1. 程式人生 > 其它 >資料結構 c程式碼2:單鏈表

資料結構 c程式碼2:單鏈表

下面是用c語言實現的單鏈表的一些基本操作:

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 typedef struct LNode
  5 {
  6     int elem;
  7     struct LNode *next;
  8 }LNode, *LinkList;
  9 
 10 /*單鏈表得初始化*/
 11 LinkList CreatList()
 12 {
 13     LinkList p = (LNode *) malloc(sizeof(LNode));  //定義一個頭節點 
 14
LinkList temp = p; //宣告一個指標指向頭節點 15 16 for(int i=1;i<=5;i++) 17 { 18 LinkList q = (LNode *) malloc(sizeof(LNode)); 19 q->elem = i; 20 q->next = NULL; 21 temp->next = q; 22 temp = q; 23 } 24 25 return
p; 26 } 27 28 /*單鏈表的插入*/ 29 LinkList InsertElem(LinkList &L, int e, int pos) 30 { 31 LinkList temp = L; 32 /*首先要找到插入節點的上一個節點*/ 33 for(int i=1;i<pos;i++) 34 { 35 if(temp == NULL) 36 { 37 printf("插入位置無效!"); 38 return L; 39 }
40 temp = temp->next; 41 } 42 43 LinkList p = (LNode *)malloc(sizeof(LNode)); 44 p->elem = e; 45 p->next = temp->next; 46 temp->next = p; 47 48 return L; 49 } 50 51 /*單鏈表的指定位置元素刪除*/ 52 LinkList DelElem(LinkList &L, int e) 53 { 54 LinkList temp = L; 55 /*先找到要被刪除的上一個節點*/ 56 for(int i=1; i < e; i++) 57 { 58 temp = temp->next; 59 if(temp == NULL) 60 { 61 printf("刪除的位置無效!\n"); 62 return L; 63 } 64 } 65 66 LinkList del = temp->next; 67 temp->next = del->next; 68 free(del); 69 return L; 70 } 71 72 /*單鏈表的查詢*/ 73 int selectElem(LinkList L, int e) 74 { 75 LinkList temp = L; 76 int i = 1; 77 while(temp->next!=NULL) 78 { 79 temp = temp->next; 80 if(temp->elem == e) 81 return i; 82 i++; 83 } 84 85 return -1; 86 } 87 88 /*單鏈表的指定位置修改*/ 89 LinkList ModifyElem(LinkList &L, int pos, int e) 90 { 91 LinkList temp = L; 92 /*先找到下標為pos的節點*/ 93 for(int i=1;i<=pos;i++) 94 { 95 temp = temp->next; 96 if(temp == NULL) 97 printf("位置資訊無效!"); 98 } 99 100 temp->elem = e; 101 return L; 102 } 103 /*單鏈表的輸出*/ 104 void display(LinkList L) 105 { 106 LinkList temp = L; 107 while(temp->next!=NULL) 108 { 109 temp = temp->next; 110 printf("%d->",temp->elem); 111 } 112 printf("NULL\n"); 113 } 114 115 int main() 116 { 117 printf("初始化連結串列為:\n"); 118 LinkList L; 119 L = CreatList(); 120 display(L); 121 122 printf("\n在第4個位置插入元素100:\n"); 123 L = InsertElem(L, 100, 4); 124 display(L); 125 126 printf("\n刪除第3個位置的元素:\n"); 127 L = DelElem(L, 3); 128 display(L); 129 130 printf("\n查詢元素100的下標:\n"); 131 int pos = selectElem(L, 100); 132 133 if(pos == -1) 134 { 135 printf("沒有查到該元素!\n"); 136 } 137 else 138 printf("位置下標為:%d\n", pos); 139 140 printf("\n將下標為4的元素更改為1000\n"); 141 L = ModifyElem(L, 4, 1000); 142 display(L); 143 system("pause"); 144 return 0; 145 }