1. 程式人生 > 實用技巧 >02.第二章,初始化,增刪改查,速查筆記

02.第二章,初始化,增刪改查,速查筆記

靜態陣列定義

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;
}