C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表的查找和建立
單鏈表的查找
其實在單鏈表的插入和刪除中,我們已經(jīng)使用過單鏈表的查找方法,因為插入和刪除的前提都是先找到對應(yīng)的結(jié)點,所以這里就不再多解釋
按位查找
GetElem(L, i):按位查找操作。獲取表 L 中第 i 個位置的元素的值
//按位查找 LNode * GetElem(LinkList L, int i) { if (i < 0) return false; LNode *p; //指針p指向當前掃描到的結(jié)點 int j = 0; //當前p指向的是第幾個結(jié)點 p = L; //L指向頭結(jié)點,頭結(jié)點是第 0 個結(jié)點 //循環(huán)找到第 i-1 個結(jié)點 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個結(jié)點開始查找數(shù)據(jù)域為e的結(jié)點 while (p && p->data != e) { p = p->next; } return p;
單鏈表的建立
如果給你很多個數(shù)據(jù)元素(ElemType),要把它們存到一個單鏈表里面,怎么操作呢?
第一步:初始化一個單鏈表
第二步:每次取一個數(shù)據(jù)元素,插入到表尾/表頭
尾插法
算法步驟:
1.創(chuàng)建一個只有頭結(jié)點的空鏈表
2.尾指針 r 初始化,指向頭結(jié)點
3.接收用戶輸入的值,判斷是否結(jié)束插入,不結(jié)束則插入表中
- 創(chuàng)建新結(jié)點 *s
- 將用戶輸入的值賦給新節(jié)點 *s 的數(shù)據(jù)域
- 將新節(jié)點 *s 插入到尾結(jié)點 *r 之后
- 尾指針 r 指向新的尾結(jié)點 *s
- 用戶繼續(xù)輸入
//尾插法建立單鏈表 LinkList List_TailInsert(LinkList &L) { int x; //假設(shè)ElemType為整型 L = (LinkList)malloc(sizeof(LNode)); //建立頭結(jié)點 LNode *s, *r = L; //r為表尾指針 scanf("%d", &x); //輸入結(jié)點的值 while (x != 9999) { //輸入9999表示結(jié)束 s = (LNode *)malloc(sizeof(LNode)); s->data = x; r->next = s; r = s; //r指向新的表尾結(jié)點 scanf("%d", &x); } r->next = NULL; //尾結(jié)點指針置空 return L; }
頭插法建立單鏈表
算法步驟:
1.創(chuàng)建一個只有頭結(jié)點的空鏈表
2.接收用戶輸入的值,判斷是否結(jié)束插入,不結(jié)束則插入表中
- 創(chuàng)建新結(jié)點 *s
- 將用戶輸入的值賦給新節(jié)點 *s 的數(shù)據(jù)域
- 將新節(jié)點 *s 插入到頭結(jié)點之后
- 用戶繼續(xù)輸入
//頭插法建立單鏈表 LinkList List_HeadInsert(LinkList &L) { LNode *s; int x; //假設(shè)ElemType為整型 L = (LinkList)malloc(sizeof(LNode)); //建立頭結(jié)點 L->next = NULL; scanf("%d", &x); //輸入結(jié)點的值 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; 這一句不能漏了,不然會出問題
到此這篇關(guān)于C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表的查找和建立的文章就介紹到這了,更多相關(guān)C語言單鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!