02.第二章,初始化,增刪改查,速查筆記
阿新 • • 發佈:2020-08-09
靜態陣列定義
typedef struct{ int data[Maxsize]; //定義一個靜態陣列存放元素 int length; //順序表當前長度 }SL; //順序表的型別定義
動態順序表定義
typedef struct { int *data; //指示動態分配陣列的指標 int Maxsize; //順序表最大長度 int length; //順序表當前長度 }SL;
初始化順序表
//初始化一個順序表, void InitList(SL &L) { L.length= 0; //只是初始化開始長度,但是沒有初始化資料, //這樣如果列印的話就會發現一個系統以前用這個地址存放的資料 //但是對我們來說是沒有用的, //但是這個初始化長度不能省略,這個是我們讀多少個數據的關鍵, }
初始化一個動態順序表
void InitList(SL &L){ //使用malloc函式申請一片連續的儲存空間 L.data = (int *)malloc(Initsize*sizeof(int)); L.length = 0; L.Maxsize = Initsize; }
增加動態順序表長度
//增加動態陣列的長度,增加型別是SL的陣列L的長度,多加上len void InceraseSize(SL &L,int len){ //定義一個指標變數指向第一個值的指標,防止下一步把L.data指標重新分配後找不到資料 int *p = L.data; //現在要一片重新分配的(最大長度加上想要增加的長度)*4b的大小空間 L.data = (int *)malloc((L.Maxsize+len)*sizeof(int)); //把資料賦值到新的資料地址裡面 for(int i = 0; i <L.length ; i++){ L.data[i]= p[i]; //指標p起到了作用 } L.Maxsize = L.Maxsize + len; //最大長度增加len //將p中的資料釋放 free(p); }
順序表插入操作
//插入操作,給L這個列表第i個元素大位置插入e這個資料 //即需要將第i以及之後的元素後移一個 bool ListInsert(SL &L, int i,int e){ //判斷i是否有效, if(i<1||i>L.length+1){ return false; } if(L.length>=Maxsize) return false; //將第i個元素往後移動一位 for(int j = L.length; j>=i ; j--) L.data[j]=L.data[j-1]; L.data[i-1] = e; L.length++; return true; }