一步一步教你從零開始寫C語言連結串列——構建一個連結串列
今天小編給大家帶來c語言難點--連結串列的講解,一步一步教你從零開始寫C語言連結串列---構建一個連結串列。

為什麼要學習連結串列?
連結串列主要有以下幾大特性:
1、解決陣列無法儲存多種資料型別的問題。
2、解決陣列中,元素個數無法改變的限制(C99的變長陣列,C++也有變長陣列可以實現)。
3、陣列移動元素的過程中,要對元素進行大範圍的移動,很耗時間,效率也不高。
先來感性的認識一下連結串列,我們先來認識下簡單的連結串列:

從這幅圖我們得出以下資訊:
這個簡單鏈表的構成:
頭指標(Header),若干個節點(節點包括了資料域和指標域),最後一個節點要指向空。
實現原理:頭指標指向連結串列的第一個節點,然後第一個節點中的指標指向下一個節點,然後依次指到最後一個節點,這樣就構成了一條連結串列。

小編給大家推薦一個學習氛圍超好的地方,C/C++交流企鵝裙:870963251!適合在校大學生,小白,想轉行,想通過這個找工作的加入。裙裡有大量學習資料,有大神解答交流問題,每晚都有免費的直播課程
接下來看看連結串列的資料結構:
struct list_node
{
int data ; //資料域,用於儲存資料
struct list_node *next ; //指標,可以用來訪問節點資料,也可以遍歷,指向下一個節點
};
那麼如何來建立一個連結串列的一個節點呢?
我們寫個程式演示一下:
#include
#include
#include
struct list_node
{
int data ;
struct list_node *next ;
};
typedef struct list_node list_single ;
int main(void)
{
list_single *node = NULL ; //1、首先,當然是定義一個頭指標
node = (list_single *)malloc(sizeof(list_single)); //2、然後分配記憶體空間
if(node == NULL){
printf("malloc fair!
");
}
memset(node,0,sizeof(list_single)); //3、清一下
node->data = 100 ; //4、給連結串列節點的資料賦值
node->next = NULL ; //5、將連結串列的指標域指向空
printf("%d
",node->data);
free(node);
return 0 ;
}
那麼,這僅僅只是建立一個連結串列中的一個節點,為了好看,我們把建立節點封裝成函式,以後想建立多少個節點,我們就可以反覆呼叫一個函式來建立,會很方便:
list_single *create_list_node(int data)
{
list_single *node = NULL ;
node = (list_single *)malloc(sizeof(list_single));
if(node == NULL){
printf("malloc fair!
");
}
memset(node,0,sizeof(list_single));
node->data = 100 ;
node->next = NULL ;
return node ;
}
接下來在程式上完成的程式:
#include
#include
#include
struct list_node
{
int data ;
struct list_node *next ;
};
typedef struct list_node list_single ;
list_single *create_list_node(int data)
{
list_single *node = NULL ;
node = (list_single *)malloc(sizeof(list_single));
if(node == NULL){
printf("malloc fair!
");
}
memset(node,0,sizeof(list_single));
node->data = 100 ;
node->next = NULL ;
return node ;
}
int main(void)
{
int data = 100 ;
list_single *node_ptr = create_list_node(data); //建立一個節點
printf("node_ptr->data=%d
",node_ptr->data); //列印節點裡的資料
printf("node_ptr->next=%d
",node_ptr->next);
free(node_ptr);
return 0 ;
}
執行結果 :

這樣我們就完成一個連結串列節點的建立了,那麼它現在的樣子如下圖:
連結串列的結構裡,資料儲存了100,因為這個連結串列只有一個節點,所以它的指標域指向了NULL。
