C語言---動態建立順序表及定義、插入、刪除操作
阿新 • • 發佈:2019-02-02
題目:編寫一個程式,動態的建立一個順序表。要求:順序表的初始長度為10,向順序表中輸入15個整數,並打印出來;再刪除順序表中的第5個元素,打印出刪除後的結果。
程式程式碼:
#include <stdio.h> #include <stdlib.h> #define Maxsize 10 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ typedef int ElemType; //便於方便後續更改資料型別 typedef struct{ int *elem; int length; int listsize; }Sqlist; //引數L:Sqlist型別的指標 void initSqlist(Sqlist *L){ L->elem=(int *)malloc(Maxsize*sizeof(ElemType)); if(!L->elem){ printf("記憶體分配失敗\n"); exit(0); } L->length=0; L->listsize=Maxsize; } void InsertElem(Sqlist *L,int i,ElemType item){ ElemType *base,*insertPtr,*p; if(i<1 || i>L->length+1) exit(0); //非法插入 if(L->length >= L->listsize){ //為表重新分配空間 base=(ElemType *)realloc(L->elem,(L->listsize+10)*sizeof(ElemType)); L->elem = base; L->listsize = L->listsize+100; } insertPtr = &(L->elem[i-1]); for(p=&(L->elem[L->length-1]);p>=insertPtr;p--){ *(p+1) = *p; } *insertPtr = item; L->length++; } void Delelem(Sqlist *L, int i){ ElemType *delitem,*q; if(i<1 || i>L->length) exit(0); delitem = &(L->elem[i-1]); q=L->elem + L->length-1; for(++delitem;delitem<=q;++delitem) *(delitem-1) = *delitem; L->length--; } int main(int argc, char *argv[]) { Sqlist l; int i; initSqlist(&l); for(i=0;i<15;i++){ InsertElem(&l,i+1,i+1); } printf("The content of 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]); } return 0; }
執行結果: