1. 程式人生 > 實用技巧 >單鏈表的基本運算①:初始化、判斷連結串列是否為空、按序號查詢、按內容查詢、定位操作

單鏈表的基本運算①:初始化、判斷連結串列是否為空、按序號查詢、按內容查詢、定位操作

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 typedef struct LNode
  5 {
  6     int data;
  7     struct LNode *next;
  8 }LNode,*LinkList;//定義結點 和 連結串列的指標
  9 
 10 //連結串列初始化操作
 11 bool InitLinklist(LinkList &head) 
 12 {
 13     //分配一個頭結點
 14     head = (LNode *)malloc(sizeof(LNode));
15 //判斷分配記憶體是否失敗 16 if (head == NULL) 17 { 18 return false; 19 } 20 else 21 { 22 //讓頭節點的連結域(指標域)設定為空,因為連結串列是空的——初始化 23 head->next = NULL; 24 return true; 25 } 26 } 27 28 //判斷連結串列是否為空 29 bool ListEmpty(LinkList head) 30 { 31 if
(head->next == NULL) 32 { 33 return true; 34 } 35 else 36 { 37 return false; 38 } 39 } 40 41 //按序號查詢操作---從頭指標開始查詢 42 LNode *GetElem(LinkList head, int i) 43 { 44 LNode *p; 45 //判斷連結串列是否為空 46 if (ListEmpty(head) == true) 47 return
NULL; 48 //判斷序號是否合法,不能小於1 49 if (i < 1) 50 return NULL; 51 //將head賦值給p指標,並用迴圈進行掃描 52 p = head; 53 int j = 0; 54 while (p->next != NULL && j < i) 55 { 56 p = p->next; 57 j++; 58 } 59 if (j == i) 60 { 61 return p; 62 } 63 else 64 { 65 return NULL; 66 } 67 } 68 69 //按內容查詢,如果查詢到,就返回他的節點指標,由於資料域是int,所以第二個引數也對應是int 70 LNode *LocateElem(LinkList head, int e) 71 { 72 LNode *p; 73 //判斷是否是空連結串列 74 if (head->next == NULL) 75 { 76 return false; 77 } 78 //讓p指標指向第一個結點,也就是頭節點的下一個結點 79 p = head->next; 80 while (p) 81 { 82 //判斷是否與想查詢的元素值相等 83 if (p->data != e) 84 { 85 p = p->next; 86 } 87 else 88 { 89 break; 90 } 91 } 92 return p; 93 } 94 95 //定位操作,返回欲查詢值結點的序號 96 int LocatePos(LinkList head, int e) 97 { 98 LNode *p; 99 //判斷是否為空 100 if (head->next == NULL) 101 return NULL; 102 103 p = head->next; 104 int i = 1;//定義序號 105 while (p) 106 { 107 if (p->data == e) 108 { 109 return i; 110 } 111 else 112 { 113 p = p->next; 114 i = i + 1; 115 } 116 } 117 //如果找到最後都沒找到的情況 118 if (p == NULL) 119 { 120 return 0; 121 } 122 } 123 124 125 int main() 126 { 127 128 129 130 131 getchar(); 132 return 0; 133 }