資料結構複習筆記(一)——靜態順序表(C語言)
阿新 • • 發佈:2018-12-11
定義結構體
typedef struct{
int data[MAXSIZE]; //MAXSIZE為最大容量
int length; //當前長度
} Array;
建立順序表
/* 需要接受一個已知的陣列,以及該陣列的長度 按順序將陣列內的值,賦給順序表結構體中的陣列 返回一個順序表的結構體 */ Array array_create(int a[],int length){ Array b; int i=0; for(i;i<length;i++) b.data[i]=a[i]; b.length=length; return b; }
列印順序表
void array_print(Array a){
int i=0;
for(i;i<a.length;i++)
printf("%d ",a.data[i]);
printf("\n");
}
插入
/* 判斷插入前是否超出最大容量,以及插入位置是否合理 判斷插入後是否超出最大容量 將插入位置後面的資料全部往後移動一個位置 插入資料 順序表長度增加 */ bool array_insert(Array *a,int i,int e){ if(i<1||i>a->length+1) return false; if(a->length>=MAXSIZE) return false; int j=a->length; for(j;j>=i;j--) a->data[j]=a->data[j-1]; a->data[i-1]=e; a->length+=1; return true; }
這裡注意不能直接使用a.length,應該使用(*a).length,也可以寫作a->length。
刪除
bool array_delete(Array *a,int i){
if(i<1||i>a->length)
return false;
for(;i<a->length;i++)
a->data[i-1]=a->data[i];
a->length-=1;
return true;
}
這裡可以多傳一個指標進去,帶出刪掉值。
按值查詢
int serchwith_value(Array a,int v){ int i; for(i=0;i<a.length;i++) if(a.data[i]==v) return i+1; return 0; }