#include#include #include #include #define MaxSize 10 //默认的最大长度 typedef struct { int* elem; //指示动态分配数组的指针 int length; //顺序表的当前容量 int listsize; //顺序表的最大容量 }Sqlist; //初始化动态顺序表,用malloc函数申请一片连续的存储空间 //参数L:Sqlist类型的指针 void initSqlist(Sqlist* L) { L->elem = (int*)malloc(MaxSize * sizeof(int)); L->length = 0; L->listsize = MaxSize; } //向顺序表中插入元素 //参数L:Sqlist类型的指针 //参数i:插入元素的位置 //参数item:插入元素 void InsertElem(Sqlist* L, int i, int item) { int* base, * insertPtr, * p; if (L->length>=L->listsize) { base = (int*)realloc(L->elem, (L->listsize + 10) * sizeof(int)); L->elem = base; L->listsize = L->listsize + 1; } insertPtr = &(L->elem[i - 1]); for (p = &(L->elem[L->length-1]); p>= insertPtr; p--) *(p + 1) = *p; *insertPtr = item; L->length++; } //从顺序表中删除元素 //参数L:Sqlist类型的指针 //参数i:删除元素的位置 void DelElem(Sqlist* L, int i) { int* delItem, * q; delItem = &(L->elem[i - 1]); q = L->elem + L->length - 1; for (++delItem; delItem <= q; ++delItem)*(delItem - 1) = *delItem; L->length--; } int main() { Sqlist l; //声明一个顺序表 int i; initSqlist(&l); //初始化顺序表, for (i = 0; i < 15; i++) InsertElem(&l, i + 1, i + 1); printf("nThe content od the list is n"); for (i = 0; i < l.length; i++) printf("%d ", l.elem[i]); DelElem(&l, 5); printf("nDelete the fifth element n"); for (i = 0; i < l.length; i++) printf("%d ", l.elem[i]); } //(⑴程序首先用函数initSqlist()动态地创建了一个顺序表,起初始化长度为MaxSize 10。 //(2)然后通过函数InsertElem()动态地向顺序表中插入数据。这里通过一个循环,每次向顺序表的第+1的位置插入整数i+1。然后打印出该顺序表中的值。在插入顺序表的过程中,由于顺序表初始化长度为10,而要插入15个元素,因此要调用realloc()函数为顺序表重新分配内存空间。 //(3)再应用DelElem(函数删除表中第5个元素,也就是5。 //(4)最后打印出删除元素后该顺序表中的值。



