0x01.相关结构与宏定义
//宏定义正误类型
#define ok 1
#define error 0
#define true 1
#define false 0
//定义初始化顺序表的大小
#define INI_SIZE 50
//定义每次增加的大小
#define ADD_SIZE 5
//定义函数返回值类型
typedef int Status;
//定义数据类型,暂定为int型
typedef int Elemtype;
//创建顺序表的结构体
typedef struct
{
Elemtype* data;//存储空间基地址,也是数据载体,可以理解为一个动态数组;
int length; //顺序表当前的长度;
int size; //当前已分配的表长大小;
}SqList;
0x02.创建顺序表
//创建一个空的顺序表
Status CreateList(SqList* L)
{
L->data = (Elemtype*)malloc(INI_SIZE * sizeof(Elemtype));//动态创建顺序表结构体中的数据存储数组;
//处理动态分配失败的异常情况;
if (!L->data)
{
return error;
}
L->length = 0;
L->size = INI_SIZE;
return ok;
}
0x03.增删遍历
//在顺序表的第k个位置添加数据为m的元素
Status AddData(SqList* L,int k,int m)
{
//处理插入位置不合理的异常;
if (k<1 || k>L->length + 1)
{
printf("你的插入位置3不合理!!!\n");
return error;
}
if (L->length >= L->size)
{
Elemtype*pnew;
pnew=(Elemtype *)realloc(L->data, (L->size + ADD_SIZE) * sizeof(Elemtype));//如果存储空间已满,利用realloc函数增加分配;
if (!pnew)
{
return error;
}
L->data = pnew;
L->size += ADD_SIZE;
}
Elemtype* p = &L->data[k - 1];
Elemtype* q = &L->data[L->length - 1];
for (; q >= p; q--)
{
*(q+1) = *q;
}
*p = m;
L->length++;
return ok;
}
//删除指定元素
Status DeleteList(SqList* L,int k)
{
if (k<1 || k>L->length)
{
printf("该元素不存在!!!\n");
return error;
}
printf("将要删除的元素信息为:第 %d 号元素 ,该元素值为 %d \n", k, L->data[k-1]);
Elemtype* p = &L->data[k - 1];
for (; p < &L->data[L->length]; p++)
{
*p = *(p + 1);
}
L->length--;
return ok;
}
//遍历顺序表
Status PrintList(SqList L)
{
int i;
for (i = 0; i < L.length; i++)
{
printf("第 %d 个元素数据为 %d \n", i + 1, L.data[i]);
}
return ok;
}