線性表可分為順序儲存結構和鏈式儲存結構
順序儲存結構的建立,其實就是乙個陣列的初始化,即宣告乙個型別和大小的陣列並賦值的過程。而單鏈表和順序儲存結構就不一樣,它的每個資料的儲存位置不需要像陣列那樣集中,它可以很散,是一種動態結構。對於每個鍊錶來說,它所占用的空間大小和位置並不需要預先分配劃定,可以根據系統的情況和實際的需求即時生成。所以,建立單鏈表的過程就是乙個動態生成鍊錶的過程。即從「空表」的初始狀態起,一次建立各元素結點,並逐個插入鍊錶。
單鏈表的整表建立
單鏈表的整表建立主要有兩種方法,即頭插法和尾插法,下面分別對這兩種方法進行介紹
頭插法建立單鏈表(含有頭結點)
頭插法建立單鏈表的步驟:
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 這...