1. 程式人生 > >資料結構複習筆記(一)——靜態順序表(C語言)

資料結構複習筆記(一)——靜態順序表(C語言)

定義結構體

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