c語言鍊錶詳解

2021-09-27 00:18:23 字數 2026 閱讀 4959

參考:《c語言程式設計(蘇小紅)》p388-397

鍊錶是一種常見的基礎資料結構,結構體指標在這裡得到了充分的利用。鍊錶可以動態的進行儲存分配,也就是說,鍊錶是乙個功能極為強大的陣列,他可以在節點中定義多種資料型別,還可以根據需要隨意增添,刪除,插入節點。鍊錶都有乙個頭指標,一般以head來表示,存放的是乙個位址。鍊錶中的節點分為兩類,頭結點和一般節點,頭結點是沒有資料域的。鍊錶中每個節點都分為兩部分,乙個資料域,乙個是指標域。說到這裡你應該就明白了,鍊錶就如同車鏈子一樣,head指向第乙個元素:第乙個元素又指向第二個元素;……,直到最後乙個元素,該元素不再指向其它元素,它稱為「表尾」,它的位址部分放乙個「null」(表示「空位址」),鍊錶到此結束。

作為有強大功能的鍊錶,對他的操作當然有許多,比如:鍊錶的建立,修改,刪除,插入,輸出,排序,反序,清空鍊錶的元素,求鍊錶的長度等等。

初學鍊錶,一般從單向鍊錶開始

--

->null

head

這是乙個空鍊錶。

--

-->

[p1]

----

>

[p2]..

.---

->

[pn]

----

>

[null]

head p1-

>next p2-

>next pn-

>next

有n個節點的鍊錶。

建立鍊錶

typedef struct student linklist;
一般建立鍊錶我們都用typedef  struct,因為這樣定義結構體變數時,我們就可以直接可以用linklist  *a;定義結構體型別變數了。

初始化乙個鍊錶,n為鍊錶節點個數。

linklist *

creat

(int n)

end-

>next = null;

//結束建立

return head;

}

修改鍊錶節點值

修改鍊錶節點值很簡單。下面是乙個傳入鍊錶和要修改的節點,來修改值的函式。

void

change

(linklist *list,

int n)

if(t != null)

else

}

刪除鍊錶節點

刪除鍊錶的元素也就是把前節點的指標域越過要刪除的節點指向下下個節點。即:p->next = q->next;然後放出q節點的空間,即free(q);

void

delet

(linklist *list,

int n)

if(t != null)

else

}

插入鍊錶節點

我們可以看出來,插入節點就是用插入前節點的指標域鏈結上插入節點的資料域,再把插入節點的指標域鏈結上插入後節點的資料域。根據圖,插入節點也就是:e->next = head->next;  head->next = e;

增加鍊錶節點用到了兩個結構體指標和乙個int資料。

void

insert

(linklist *list,

int n)

if(t != null)

else

}

輸出鍊錶

輸出鍊錶很簡單,邊遍歷邊輸出就行了。

while

(h->next != null)

c語言鍊錶詳解

鍊錶是一種常見的基礎資料結構,結構體指標在這裡得到了充分的利用。鍊錶可以動態的進行儲存分配,也就是說,鍊錶是乙個功能極為強大的陣列,他可以在節點中定義多種資料型別,還可以根據需要隨意增添,刪除,插入節點。鍊錶都有乙個頭指標,一般以head來表示,存放的是乙個位址。鍊錶中的節點分為兩類,頭結點和一般節...

c語言鍊錶詳解

鍊錶是一種常見的基礎資料結構,結構體指標在這裡得到了充分的利用。鍊錶可以動態的進行儲存分配,也就是說,鍊錶是乙個功能極為強大的陣列,他可以在節點中定義多種資料型別,還可以根據需要隨意增添,刪除,插入節點。鍊錶都有乙個頭指標,一般以head來表示,存放的是乙個位址。鍊錶中的節點分為兩類,頭結點和一般節...

c語言鍊錶詳解(超詳細)

鍊錶是一種常見的基礎資料結構,結構體指標在這裡得到了充分的利用。鍊錶可以動態的進行儲存分配,也就是說,鍊錶是乙個功能極為強大的陣列,他可以在節點中定義多種資料型別,還可以根據需要隨意增添,刪除,插入節點。鍊錶都有乙個頭指標,一般以head來表示,存放的是乙個位址。鍊錶中的節點分為兩類,頭結點和一般節...