1. 程式人生 > >順序表的建立和初始化過程詳解(C語言實現)

順序表的建立和初始化過程詳解(C語言實現)

順序表存放資料的特點和陣列這種資料型別完全吻合,因此順序表的實現使用的是陣列。需要注意的是,使用陣列實現順序表時,一定要預先申請足夠大的記憶體空間,避免因儲存空間不足,造成資料溢位,導致不必要的程式錯誤甚至崩潰。

在建立順序表時,除了預先申請記憶體空間,還需要實時記錄順序表的長度和順序表本身申請的記憶體大小,便於後期對順序表中的資料元素進行調取。因此在建立順序表之前,要自定義順序表中單個結點的結構,實現程式碼如下:
typedef struct Table{
    int * head;//聲明瞭一個名為head的長度不確定的陣列,也叫“動態陣列”
    int length;//記錄當前順序表的長度
    int size;//記錄順序表分配的儲存容量
}table;


建立順序表的過程,也就是在預先申請記憶體空間的同時,給變數 size 和 length 賦初值的過程,其實現程式碼為:

table initTable(){
    table t;
    t.head=(int*)malloc(Size*sizeof(int));//構造一個空的順序表,動態申請儲存空間
    if (!t.head) //如果申請失敗,作出提示並直接退出程式
    {
        printf("初始化失敗");
        exit(0);
    }
    t.length=0;//空表的長度初始化為0
    t.size=Size;//空表的初始儲存空間為Size
    return t;
}


順序表建立完成後,即可使用順序表儲存資料,也就是對順序表進行初始化的過程,若使用剛建立的順序表儲存 {1,2,3,4},其完整實現程式碼為:

#include <stdio.h>
#include <stdlib.h>
#define Size 4
typedef struct Table{
    int * head;
    int length;
    int size;
}table;

table initTable(){
    table t;
    t.head=(int*)malloc(Size*sizeof(int));
    if (!t.head)
    {
        printf("初始化失敗");
        exit(0);
    }
    t.length=0;
    t.size=Size;
    return t;
}

void displayTable(table t){
    for (int i=0;i<t.length;i++) {
        printf("%d",t.head[i]);
    }
    printf("\n");
}
int main(){
    table t1=initTable();
    for (int i=1; i<=Size; i++) {
        t1.head[i-1]=i;
        t1.length++;
    }
    printf("順序表為:\n");
    displayTable(t1);
    return 0;
}
輸出結果:
順序表為:
1234