C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之單鏈表的查找和建立
單鏈表的查找
其實(shí)在單鏈表的插入和刪除中,我們已經(jīng)使用過(guò)單鏈表的查找方法,因?yàn)椴迦牒蛣h除的前提都是先找到對(duì)應(yīng)的結(jié)點(diǎn),所以這里就不再多解釋
按位查找
GetElem(L, i):按位查找操作。獲取表 L 中第 i 個(gè)位置的元素的值
//按位查找 LNode * GetElem(LinkList L, int i) { if (i < 0) return false; LNode *p; //指針p指向當(dāng)前掃描到的結(jié)點(diǎn) int j = 0; //當(dāng)前p指向的是第幾個(gè)結(jié)點(diǎn) p = L; //L指向頭結(jié)點(diǎn),頭結(jié)點(diǎn)是第 0 個(gè)結(jié)點(diǎn) //循環(huán)找到第 i-1 個(gè)結(jié)點(diǎn) while (p != NULL && j < i) { p = p->next; j++; } return p; }
按值查找
LocateElem(L, e):按值查找操作。在表 L 中查找具有給定關(guān)鍵字值的元素
//按值查找 LNode * LocateElem(LinkList L, ElemType e) { LNode *p = L->next; //從第1個(gè)結(jié)點(diǎn)開(kāi)始查找數(shù)據(jù)域?yàn)閑的結(jié)點(diǎn) while (p && p->data != e) { p = p->next; } return p;
單鏈表的建立
如果給你很多個(gè)數(shù)據(jù)元素(ElemType),要把它們存到一個(gè)單鏈表里面,怎么操作呢?
第一步:初始化一個(gè)單鏈表
第二步:每次取一個(gè)數(shù)據(jù)元素,插入到表尾/表頭
尾插法
算法步驟:
1.創(chuàng)建一個(gè)只有頭結(jié)點(diǎn)的空鏈表
2.尾指針 r 初始化,指向頭結(jié)點(diǎn)
3.接收用戶輸入的值,判斷是否結(jié)束插入,不結(jié)束則插入表中
- 創(chuàng)建新結(jié)點(diǎn) *s
- 將用戶輸入的值賦給新節(jié)點(diǎn) *s 的數(shù)據(jù)域
- 將新節(jié)點(diǎn) *s 插入到尾結(jié)點(diǎn) *r 之后
- 尾指針 r 指向新的尾結(jié)點(diǎn) *s
- 用戶繼續(xù)輸入
//尾插法建立單鏈表 LinkList List_TailInsert(LinkList &L) { int x; //假設(shè)ElemType為整型 L = (LinkList)malloc(sizeof(LNode)); //建立頭結(jié)點(diǎn) LNode *s, *r = L; //r為表尾指針 scanf("%d", &x); //輸入結(jié)點(diǎn)的值 while (x != 9999) { //輸入9999表示結(jié)束 s = (LNode *)malloc(sizeof(LNode)); s->data = x; r->next = s; r = s; //r指向新的表尾結(jié)點(diǎn) scanf("%d", &x); } r->next = NULL; //尾結(jié)點(diǎn)指針置空 return L; }
頭插法建立單鏈表
算法步驟:
1.創(chuàng)建一個(gè)只有頭結(jié)點(diǎn)的空鏈表
2.接收用戶輸入的值,判斷是否結(jié)束插入,不結(jié)束則插入表中
- 創(chuàng)建新結(jié)點(diǎn) *s
- 將用戶輸入的值賦給新節(jié)點(diǎn) *s 的數(shù)據(jù)域
- 將新節(jié)點(diǎn) *s 插入到頭結(jié)點(diǎn)之后
- 用戶繼續(xù)輸入
//頭插法建立單鏈表 LinkList List_HeadInsert(LinkList &L) { LNode *s; int x; //假設(shè)ElemType為整型 L = (LinkList)malloc(sizeof(LNode)); //建立頭結(jié)點(diǎn) L->next = NULL; scanf("%d", &x); //輸入結(jié)點(diǎn)的值 while (x != 9999) { //輸入9999表示結(jié)束 s = (LNode *)malloc(sizeof(LNode)); s->data = x; s->next = L->next; L->next = s; scanf("%d", &x); } return L; }
記得 L->next = NULL; 這一句不能漏了,不然會(huì)出問(wèn)題
到此這篇關(guān)于C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之單鏈表的查找和建立的文章就介紹到這了,更多相關(guān)C語(yǔ)言單鏈表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)文件 r/w 操作方法
由于在 C 語(yǔ)言中 '\' 一般是轉(zhuǎn)義字符的起始標(biāo)志,故在路徑中需要用兩個(gè) '\' 表示路徑中目錄層次的間隔,也可以使用 '/' 作為路徑中的分隔符,本文重點(diǎn)給大家介紹用c語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)文件 r/w 操作方法,感興趣的朋友一起學(xué)習(xí)吧2021-05-05C語(yǔ)言 一級(jí)指針與二級(jí)指針詳細(xì)介紹
這篇文章主要介紹了C語(yǔ)言 一級(jí)指針與二級(jí)指針詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-10-10C++實(shí)現(xiàn)校園運(yùn)動(dòng)會(huì)報(bào)名系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)校園運(yùn)動(dòng)會(huì)報(bào)名系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10