單鏈表整表建立的兩種方法(頭插法和尾插法)

2021-09-25 18:09:48 字數 1863 閱讀 3366

線性表可分為順序儲存結構和鏈式儲存結構

順序儲存結構的建立,其實就是乙個陣列的初始化,即宣告乙個型別和大小的陣列並賦值的過程。而單鏈表和順序儲存結構就不一樣,它的每個資料的儲存位置不需要像陣列那樣集中,它可以很散,是一種動態結構。對於每個鍊錶來說,它所占用的空間大小和位置並不需要預先分配劃定,可以根據系統的情況和實際的需求即時生成。所以,建立單鏈表的過程就是乙個動態生成鍊錶的過程。即從「空表」的初始狀態起,一次建立各元素結點,並逐個插入鍊錶。

單鏈表的整表建立

單鏈表的整表建立主要有兩種方法,即頭插法和尾插法,下面分別對這兩種方法進行介紹

頭插法建立單鏈表(含有頭結點)

頭插法建立單鏈表的步驟:

1. 宣告一指標變數p和計數器n;

2. 初始化一空鍊錶l;

3. 讓l的頭結點的指標指向null,即建立乙個帶頭結點的單鏈表;

4. 迴圈:

頭插法實現的**如下:

#include#include#include#includestruct node //建立結構體

;typedef struct node node; //重定義struct node型別為node

node* creat(int count) //建立鍊錶

return(head);

} void list(node* head) //列印鍊錶

} int main() //主函式

這段演算法**中,我們其實用的是插隊的辦法,就是始終讓新結點在第一的位置。如下圖所示:

每乙個新結點都插在頭結點之後的位置,所謂插入,實際上就是為新建立的結點解決兩個問題:它指向誰誰指向它,在**中分別由

p->next = head->next;  //新結點指向原來頭結點的後面乙個結點

head->next = p; //頭結點指向新結點

這種方法雖然實現了鍊錶的建立,由於是頭插,所以鍊錶的順序是逆序的,下面介紹的尾插法建立的鍊錶的順序是正序的。

尾插法建立單鏈表

#include#include#include#includestruct node  //建立結構體

;typedef struct node node; //重定義struct node型別為node

node* creat(int count) //建立鍊錶

p1->next = null; //迴圈結束後最終的尾結點的指標賦值為null

return(head);

} void list(node* head) //列印鍊錶

} int main() //主函式

在這個演算法中,每次新申請的結點都插入到了表尾,所以稱為尾插法,注意理解p1=p2這一句**,它的作用是:只要新結點插入進去了,那麼他就會變成尾部結點。然後不斷重複這個操作。流程如下:

尾插法建立單鏈表結果展示:

顯然尾插法建立的鍊錶是正序的

單鏈表整表建立的兩種方法(頭插法和尾插法)

線性表可分為順序儲存結構和鏈式儲存結構 順序儲存結構的建立,其實就是乙個陣列的初始化,即宣告乙個型別和大小的陣列並賦值的過程。而單鏈表和順序儲存結構就不一樣,它的每個資料的儲存位置不需要像陣列那樣集中,它可以很散,是一種動態結構。對於每個鍊錶來說,它所占用的空間大小和位置並不需要預先分配劃定,可以根...

單鏈表建立的兩種方法 頭插法和尾插法

方法1 頭插法 方法2 尾插法 linkedlist linkedlistcreath 返回的是該鍊錶的位址 return l 返回頭節點位址 還是先定義乙個鍊錶型別的指標l,指標l指向的是鍊錶的首位址,而不是鍊錶的第乙個數,指標l指向的下乙個鍊錶型別才是鍊錶的第乙個數,然後定義乙個r指標,保證r指...

頭插法建立單鏈表

include include define max 50 typedef struct list list int main 頭插法建立鍊錶 void headcreatlist list l,char x 輸出函式 void display list l printf n commentes 這...