顺序表: 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。
静态顺序表:使用定长数组存储元素.缺点是 动态顺序表:使用动态开辟的数组存储元素.
顺序表的结构体定义
typedef struct
{int data[MAX_SIZE];//存储顺序表的数组int length;//顺序表的当前长度
}sqlist;
顺序表的初始化
//顺序表的初始化
sqlist* sql_init()
{sqlist* list = malloc(sizeof(sqlist));//申请一块顺序表结构体大小的内存memset(list->data, 0, MAX_SIZE);//初始化顺序表内的数据都是0list->length = 0;//初始化顺序表内没有任何数据,长度就是0return list;//返回表的首地址,也就是返回表的地址
}
顺序表的指定位置插入
//顺序表的指定位置插入
int sql_insert(sqlist *list,int index,int data)
{//索引小于0,索引超出顺序表的长度,顺序表的长度超过最大大小if (index - 1 < 0 || index - 1 > list->length || list->length >MAX_SIZE){return -1;}else{//i是顺序表最后一个元素的位置,它往前移动,直到移动到要插入元素索引位置,把插入元素位置后面的元素依次后移for (int i = list->length-1;i >= index - 1;i--){list->data[i + 1] = list->data[i];//把前一个元素依次后移}list->data[index - 1] = data;list->length++;}return 0;}
顺序表的打印
//顺序表的打印
void sql_print(sqlist* list)
{for (int i = 0; i < list->length; i++){printf("%d", list->data[i]);}printf("\n");}
顺序表指定位置的删除
//顺序表的指定位置删除
int sql_delete(sqlist* list,int index)
{//索引小于0,索引超出顺序表的长度,顺序表的长度超过最大大小if (index - 1 < 0 || index - 1 > list->length || list->length > MAX_SIZE){return -1;}else{//i是顺序表指定要删除元素的位置,它往后移动,把它后面的元素向前移动,直接覆盖掉for (int i = index - 1; i <list->length-1; i++){list->data[i] = list->data[i+1];//把后一个元素前移动}list->length--;}return 0;}
顺序表的修改
//顺序表的修改
int sql_modify(sqlist* list, int index,int data)
{//索引小于0,索引超出顺序表的长度,顺序表的长度超过最大大小if (index - 1 < 0 || index - 1 > list->length || list->length > MAX_SIZE){return -1;}else{list->data[index - 1] = data;//直接修改对应索引位置的值}return 0;
}
顺序表的查找
//顺序表的查找
int sql_locate(sqlist* list, int data)
{for(int i=0;i<=list->length-1;i++){if (list->data[i] == data){printf("%d\n", i);//打印输出查找到的索引位置return i;//返回索引}}return -1;//未查找到
}
顺序表的逆序
//顺序表的逆序
int sql_reverse(sqlist* list)
{int data = 0;for (int i = 0; i <= list->length/2;i++){data = list->data[i];list->data[i] = list->data[list->length-1-i];list->data[list->length - 1 - i] = data;}return -1;//未查找到
}
测试
int main()
{sqlist *l = sql_init();//创建并初始化一个顺序表lfor (int i = 0; i < 6; i++){sql_insert(l,i+1,i+1);}sql_print(l);sql_insert(l,3,6);//顺序表插入sql_print(l);sql_delete(l,3);//顺序表删除sql_print(l);sql_modify(l,1,7);//顺序表修改sql_print(l);sql_locate(l, 5);//顺序表查找sql_reverse(l);sql_print(l);//顺序表逆序return 0;
}