鍊錶是一種常見的基礎資料結構,結構體指標在這裡得到了充分的利用。鍊錶可以動態的進行儲存分配,也就是說,鍊錶是乙個功能極為強大的陣列,他可以在節點中定義多種資料型別,還可以根據需要隨意增添,刪除,插入節點。鍊錶都有乙個頭指標,一般以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語言 鍊錶 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 定義了乙個結構...