單鏈表是資料結構中較為「簡單」的一部分,但是它卻是很重要的一部分。二叉樹,線索二叉樹,雜湊函式等等的相關操作都離不開鍊錶,因此搞懂單鏈表顯得尤為重要。下面是我對鍊錶簡單操作的一些理解。(本文中所有鍊錶**均無頭結點,ppfirst指的是首元結點)
首先,單鏈表的本質得先清楚。單鏈表是一種鏈式儲存的線性表。它可以解決陣列無法儲存多種型別的問題。我們通過圖簡單的認識一下鍊錶:
其次,單鏈表的相關操作需要掌握。(重中之重)
1 單鏈表成員的建立,即結點的建立。
鍊錶結點的建立,首先宣告結構體,結構體中包括資料域和指標域:**如下所示:
2 初始化單鏈表typedef int datatype;
//建立單鏈表的成員,其實就是結點
typedef struct slistnode slistnode; //slistnode為這個結構體的別名
初始化單鏈表也就是將首元結點初始化為空,**如下:
3 列印單鏈表void slistinit(slistnode **ppfirst)
列印單鏈表,首先判斷鍊錶是否為空,為空則直接列印「空鍊錶」,否則迴圈列印出每個結點的資料
4 建立新結點//列印
void slistprint(slistnode *ppfirst)
else
printf("null\n");
}}
建立新的結點,新結點包含資料域和指標域。將其封裝為函式,呼叫更加方便。主要**如下:
5 單鏈表的查詢//建立新結點,結點的資料域為data,pnext域設定為空
slistnode *_createnode(datatype data)
//建立失敗
newnode ->data = data;
newnode ->pnext = null;//建立成功
}
按值查詢,找到後返回第乙個的結點指標,如果沒找到,返回null
6 銷毀單鏈表// 按值查詢,返回第乙個找到的結點指標,如果沒找到,返回null
slistnode * slistfind(slistnode *ppfirst, datatype data)
} return null;
}
銷毀單鏈表也就是將每個結點free掉,並且將首元結點置空。
7 單鏈表的尾插// 銷毀 (記錄並刪除鍊錶中的每個結點,並將頭結點置為空)
void slistdestroy(slistnode **ppfirst)
*ppfirst = null;
}
上述鍊錶操作的測試**如下:// 尾部插入(先找到最後乙個結點,並把它記錄下來,再把最後乙個結點的pnext域指向新的結點)
void slistpushback(slistnode** ppfirst, datatype data)
else
p1 ->pnext = p;//此時p1為最後乙個結點
}}
#include #include #include #include int main()
C 單鏈表實現(插入,查詢,刪除,銷毀)
include include using namespace std struct data bool operator const data d const struct node 新建乙個節點,返回節點指標 struct node create node struct data data 在鍊...
單鏈表的初始化,刪除,銷毀,查詢
單鏈表的初始化,頭刪,尾刪,頭插,尾插,銷毀,查詢。node.h ifndef node h define node h typedef int datatype define null 0 include include includetypedef struct node node,linkli...
9106 查詢單鏈表中的值
從非空單鏈表中查詢其值在 s,t 之間 含s和t 的所有元素,要求輸出值在 s,t 之間的元素個數。輸入的第一行為乙個數字n,表示下面有n組資料,每組資料報括3行 第1行包含兩個數字s和t,第2行為單鏈表的表長len 0每組輸出為一行,對於每組輸入資料,輸出值在 s,t 之間的元素個數。1 8 18...