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