/* 九大基本操做(不一樣的存儲結構實現的代碼不一樣) 此處用一維數組的動態分配: InitList(&L);//初始化表, Length(L); LocateElem(L,e); GetElem(L,i); ListInsert(&L,i,e); ListDelete(&L,i,&e); PrintList(L); Empty(L); DestoryList(&L); */ /*靜態分配的結構 #define MaxSize 50 typedef struct{ int data[MaxSize]; int length; }SqList; */ #include<cstdio> #include<cstdlib> #include<cmath> #define InitSize 100//動態分配的結構 #define AddSize 20//增長的空間個數 typedef struct{ int* data; int MaxSize,length;//數組的最大容量,當前個數 }SeqList; SeqList* InitList(SeqList &L){ L.data = (int*)malloc(sizeof(int)*InitSize); if(L.data == NULL) return NULL; L.MaxSize = InitSize; L.length = 0; return &L; } int Length(SeqList L){ return L.length; } int LocateElem(SeqList L,int e){//返回e在數組中的下標 int i = 0; while(i<=L.length&&L.data[i] != e){ i++; } if(i>L.length){ exit(EXIT_FAILURE); } return i; } int GetElem(SeqList L,int i){//獲取第i個元素 if(i<1||i>L.length+1) exit(EXIT_FAILURE); return L.data[i-1]; } SeqList* ListInsert(SeqList &L,int i,int e){//在第i個位置插入 if(i<1||i>L.length+1) exit(EXIT_FAILURE); if(L.length >= L.MaxSize) { L.data = (int*)realloc(L.data,sizeof(int)*(InitSize+AddSize)); if(L.data == NULL) exit(OVERFLOW); L.MaxSize = InitSize+AddSize; } for(int j = L.length-1;j>=i-1;j--) L.data[j+1] = L.data[i]; L.data[i-1] = e; ++L.length; return &L; } SeqList* ListDelete(SeqList &L,int i,int &e){//刪除第i個元素的位置 if(i<1||i>L.length) exit(EXIT_FAILURE); e = L.data[i-1]; for(int j=i-1;j<L.length-1;j++) L.data[j]=L.data[j+1]; --L.length; return &L; } void PrintList(SeqList L){ int i = 0; while(i<L.length){ printf("%d ",L.data[i]); } printf("\n"); } bool Empty(SeqList L){ if(L.length == 0) return true; else return false; } bool DestoryList(SeqLisrt &L){ for(int i=0;i<L.length;i++) free(L); } main(){ SeqList SL; SeqList* L = InitList(SL); printf("%d",L); return 0; }