鍊錶是一種常見的基礎資料結構,結構體指標在這裡得到了充分的利用。鍊錶可以動態的進行儲存分配,也就是說,鍊錶是乙個功能極為強大的陣列,他可以在節點中定義多種資料型別,還可以根據需要隨意增添,刪除,插入節點。鍊錶都有乙個頭指標,一般以head來表示,存放的是乙個位址。鍊錶中的節點分為兩類,頭結點和一般節點,頭結點是沒有資料域的。鍊錶中每個節點都分為兩部分,乙個資料域,乙個是指標域。說到這裡你應該就明白了,鍊錶就如同車鏈子一樣,head指向第乙個元素:第乙個元素又指向第二個元素;……,直到最後乙個元素,該元素不再指向其它元素,它稱為「表尾」,它的位址部分放乙個「null」(表示「空位址」),鍊錶到此結束。
作為有強大功能的鍊錶,對他的操作當然有許多,比如:鍊錶的建立,修改,刪除,插入,輸出,排序,反序,清空鍊錶的元素,求鍊錶的長度等等。
初學鍊錶,一般從單向鍊錶開始
這是乙個空鍊錶。--->null
head
有n個節點的鍊錶。---->[p1]---->[p2]...---->[pn]---->[null]
head p1->next p2->next pn->next
建立鍊錶
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語言單鏈表
include include include define error 0 typedef struct lnode lnode,linklist linklist initlist linklist l node next null l node return l int listlength ...
c語言 單鏈表
單鏈表,顧名思義是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。我們在這裡使用c語言實現 h 檔案 pragma on...
C語言單鏈表
學過線性表中的順序表的都知道,順序表裡的資料在物理記憶體上是相鄰的,所以當我們在順序表中想要訪問下乙個元素時可以直接去訪問,就像陣列一樣。但是單鏈表卻不同,單鏈表的資料儲存的位置是動態分配的,也就是說單鏈表的儲存在物理記憶體上不是相鄰的,所以我們就只能通過指標這種方式來把單鏈表串起來,通過指標來訪問...