鍊錶是一種常見的資料結構。它與常見的陣列是不同的,使用陣列時先要指定陣列包含元素的個數,即為陣列的長度,但是如果向這個陣列中加入的元素超過了陣列的大小時,便不能將內容全部儲存。
鍊錶這種儲存方式,其元素個數是不受限定的,當進行新增元素的時候儲存的個數就會隨之改變。
在鍊錶中有乙個頭指標變數,這個指標變數儲存乙個位址,通過這個位址來找到這個鍊錶,頭指標節點指向第乙個節點,在鍊錶中每個節點包含兩個部分:資料部分和指標部分。雖然結構體不能含有與本身型別相同的結構,但是可以含有之相同型別結構的指標,這種定義是鍊錶的基礎,鍊錶中每一項都包含在何處能找到下一項的資訊。而最後乙個節點的指標指向必須為空null,從鍊錶的原理來看不用擔心鍊錶的長度會超出範圍這種問題。
typedef structnode
pnote;
ponte* head =null;pnote* end = null;
void addlisttill(int該函式的功能是在尾新增的方式在鍊錶尾部增加乙個節點,首先建立乙個節點並申請乙個節點的記憶體,然後對傳入節點的資料進行賦值,注意尾新增的新節點的指標應指向空。此時分為兩種情況:1.鍊錶無節點,那麼這個節點既是頭結點也是尾節點;2.已經有節點,那麼新增加的節點將成為最後乙個節點,而之前的節點成為倒數第二個節點,所以它的指標應該指向新新增的節點,之後全域性變數應指向當前節點。(操作先後順序不變)n) }
}
void該函式的功能是遍歷輸出這個鍊錶,首先定義乙個用於遍歷的臨時指標,用while迴圈實現遍歷輸出的操作scanlist()
}
pnote* findnode(int該函式的功能是遍歷陣列,對每個節點進行一一判斷,若找到則返回該節點,沒找到則返回null。a)
//沒找到
return
null;
}
void該函式的功能是乙個乙個的將節點記憶體釋放,最後達到全部刪除的效果。要注意的是最後應將頭尾節點至null,否則下次的頭節點就接著0x10。freelist()
//頭尾清空
head =null;
end =null;
}
void addlistrand(int index, int此函式關鍵在於兩種情況的判斷,要注意的是若插入的節點位置在中間,那麼要先連後面再連前面。a) pnote* pt =findnote(index);
if(pt == null) //
無此節點
//有此節點
//建立節點,申請記憶體
pnote* temp = (pnote*)malloc(sizeof
(pnote));
temp->num =a;
temp->next =null;
//兩種情況:1.節點在尾部;2.節點在中間
if(pt =end)
else
}
void尾刪除應先判斷鍊錶是否為空或者只有乙個節點,若只有乙個節點則直接置null,若不為空,則遍歷找到倒數第二個節點,將最後乙個節點釋放記憶體,再將倒數第二個節點設定為end,然後將它的指標指向null。deletelisetail()
//鍊錶不為空
if(head ==end)
else
}
void先定義乙個臨時變數指向舊頭指標,將第二個節點記為新的頭指標head,之後將舊頭指標釋放。deletelisehead()
head = head->next;
free
(temp);
}
void deletelistrand(int分為三種情況:1.只有乙個節點;2.有兩個節點;3.有多個節點。三個步驟與前面的思路相似,這裡就不再贅述a) pnote* temp =findnode(a);
if (temp ==null)
if (head == end)//
只有乙個節點
else
if (head->next == end)//
有兩個節點
else
pt->next = temp->next;
free
(temp);}}
void有關無空頭的單鏈表的基本操作就總結到這裡main()
else
*/}
C語言 單鏈表各種基本操作
includetypedef struct student node 鍊錶建立 node create else break p next null head head next return head 鍊錶列印 void print node head printf n n 鍊錶測長 int ge...
c語言 單鏈表的基本操作
list.h檔案 pragma once include include include typedef int datatype typedef struct listnode listnode listnode buynode datatype x 建立乙個結點 void pushback li...
c 單鏈表基本操作
下午沒事,看資料結構。想到自畢業以後,都沒有寫過這些東西了。寫個鍊錶基本操作,還沒完全測試。includeusing namespace std node 節點 struct node int data node p 單鏈表 class link 通過陣列夠造 link int arr,int le...