鍊錶,顧名思義,有鏈有表。
形象點說,看起來像這樣
一格一格的是表,線是鏈,兩者加起來就是」鍊錶「了。兩個格仔在一起把它叫做node(節點)
當我們把它放到計算機裡的時候,其實它更像是這樣的。
因為計算機裡並沒有繩子,連線他們的是指標。把指標跟資料放,到一起,讓每個資料後面的指標指向下乙個資料,以此來造出一條虛擬的繩子。
再完善一下模型,便是這樣子
接下來,用c語言來實現這個單向鍊錶。**如下:
#include
#include
typedef struct _node node;
void prtllst(node *p);
node *create();
void freelst(node *p);
int main()
node *create()
else
last = p1;
}}while(num != -1);
last->next = null;
return head;
}void prtllst(node *p)
}void freelst(node *p)
}
上面的**中,用node *create()
來建立鍊錶,void prtllst(node *p)
來列印鍊錶。
首先,用乙個結構體來表達圖中乙個個的節點(裡面有資料,還有指向下乙個節點的指標)
typedef
struct _node node;
然後,在main()裡面定義乙個指標,用來指向鍊錶的第乙個節點。這樣做便能夠為後面的列印鍊錶或者搜尋元素提供第乙個節點。(就像在遍歷陣列的時候從第乙個下標開始一樣,又由於這個鍊錶是單向的,要遍歷只能從第乙個開始)
node *linkhead =null;
接下來在node *create()
中,
定義三個指標,p1將指向新建立的節點,last指向最後乙個節點(這樣就可以在新增節點的時候實現將最後乙個節點的指標指向下乙個新建立的節點了),head指向鍊錶的第乙個節點,用來返回這個節點給main()裡面的linkhead。
node *p1 = null;
node *last = null;
node *head = null;
在do……while()迴圈中,先讀入使用者輸入,如果不是「-1」(在這裡用-1表示輸入結束),便建立乙個節點。
這裡通過malloc()申請一塊記憶體空間來建立節點,並將p1指向這個新的節點
往節點寫入資料後,判斷是否是第乙個節點,如果只有乙個,那麼last->next = p1
是沒意義的,因為這裡是為了把新的節點鏈結進原來的後面。
do
else
last = p1;//讓它永遠指向最後乙個
}}while(num !=
-1);
一但輸入完成了,將最後乙個節點的next指向null,後面可以通過這個指標是否為null判斷鍊錶是否到頭了。
last->next = null;
最後,返回
return head;
這樣便建立好了乙個鍊錶。
接下來是讀取鍊錶的方法
void prtllst(node *p)
}
最後,釋放空間
void freelst(node *p)
}
c語言 鍊錶 C語言鍊錶例項 玩轉鍊錶
下圖為最一簡單鍊錶的示意圖 第 0 個結點稱為頭結點,它存放有第乙個結點的首位址,它沒有資料,只是乙個指標變數。以下的每個結點都分為兩個域,乙個是資料域,存放各種實際的資料,如學號 num,姓名 name,性別 和成績 score 等。另乙個域為指標域,存放下一結點的首位址。鍊錶中的每乙個結點都是同...
c語言鍊錶 鍊錶
在儲存一大波數的時候,我們通常使用陣列,但有時候陣列顯得不夠靈活,比如有一串已經從小到大排序好的數 2 3 5 8 9 10 18 26 32 現在需要往這串數中插入6使其得到的新序列仍符合從小到大排列。如果我們使用陣列來實現這一操作,則需要將8和8後面的數字都依次往後挪一位,如果你覺得這幾個數不算...
c語言 鍊錶 C語言之鍊錶入門
鍊錶三要素 1 頭指標 head 是用來說明鍊錶開始了,頭指標就代表鍊錶本身 所以以後要訪問鍊錶,就要訪問頭指標 2 結點 node 鍊錶中每乙個結構體變數 3 尾指標 用來說明鍊錶的結束 它是乙個空指標,null include includetypedef struct stud 定義了乙個結構...