1 //這是C語言的寫法,但會報錯,原因是len(當前的節點長度) 2 //無法在insert(插入)和deleted(刪除)之后改變 3 //不能使用delete是因為delete是C++中的一個運算符 4 //最終我把改程序用C++寫了一遍,運用引用將len的真實值改變了 5 #include <stdio.h> 6 #include <stdlib.h> 7 typedef int ElementType; 8 typedef struct node { 9 ElementType data; 10 struct node *pNext;//指向下一個結點的指針 11 }Node, *pNode;//這里NODE等價於struct node、、PNODE等價於struct Node* 12 13 pNode Create_List(int len); 14 pNode change(pNode pHead,int len); 15 void ergodic(pNode pHead,int len); 16 pNode insert(pNode pHead,int *len); 17 int main() { 18 pNode pHead = NULL;//創建一個頭結點 19 int len;//用來存放有效節點字數 20 printf("請輸入節點個數:"); 21 scanf("%d", &len); 22 pHead = Create_List(len);//創建一個單鏈表,並將該鏈表的頭指針賦值給pHead 23 pNode p;//創建一個移動指針,指向需要訪問的結點 24 25 26 ergodic(pHead,len);//遍歷數據輸出 27 p = change(pHead,len);//修改節點的數據 28 ergodic(pHead,len);//遍歷數據輸出 29 p = insert(pHead,&len);//插入一個節點 30 printf("此時len為:%d", len); 31 printf("\n插入成功\n"); 32 ergodic(pHead,len);//遍歷數據輸出 33 return 0; 34 } 35 36 37 38 pNode Create_List(int len)//這里用PNODE表示返回一個結構體類型的指針 39 { 40 //創建鏈表 41 42 pNode pHead = (pNode)malloc(sizeof(Node));//分配一個不存放有效數據的頭的頭結點 43 //malloc返回的是一個節點,其中 (結構體類型的指針)malloc(sizeof(結構體的名稱)) 44 pNode pTail = pHead;//定義一個尾指針,並初始化 45 pTail->pNext = NULL;//將尾節點指針置空 46 47 int i; 48 int val; 49 for (i = 0; i<len; i++) { 50 printf("輸入第%d個節點的數值:", i + 1); 51 scanf("%d", &val); 52 pNode pNew = (pNode)malloc(sizeof(Node)); 53 //給下一個節點分配空間 54 pNew->data = val;//1.先把值賦給下一個結點 55 pTail->pNext = pNew;//新的節點的指針域pTail的指針域 56 pNew = NULL;//把為節點的指針域置空 57 pTail = pTail->pNext;//將尾指針+1指向最后一個節點 58 } 59 return pHead;//返回一個鏈表的頭指針 60 } 61 //++++++++++++++++++++++++++++++ 62 void ergodic(pNode pHead, int len) { 63 //遍歷數據輸出 64 pNode p; 65 p = pHead;//將移動指針指向頭結點 66 int j; 67 for (j = 0; j<len; j++) { 68 p = p->pNext; 69 printf("第%d個節點的數值是:%d\n", (j + 1), p->data); 70 } 71 } 72 73 //++++++++++++++++++++++++++++++ 74 pNode change(pNode pHead, int len) { 75 //修改節點的數據 76 pNode p; 77 p = pHead; 78 int value; 79 printf("修改節點的數據\n"); 80 int k; 81 for (k = 0; k<len; k++) { 82 p = p->pNext; 83 printf("輸入第%d個結點要修改的數據:", k + 1); 84 scanf("%d", &value); 85 p->data = value; 86 } 87 return pHead; 88 } 89 //+++++++++++++++++++++++++++++ 90 //插入節點 91 pNode insert(pNode pHead, int *len) { 92 pNode p; 93 p = pHead; 94 printf("輸入在第幾個節點(頭結點不算)后插入:"); 95 int m; 96 scanf("%d", &m); 97 int i; 98 for (i = 0; i<m; i++) { 99 p = p->pNext; 100 } 101 pNode e = (pNode)malloc(sizeof(Node)); 102 e->pNext = NULL; 103 printf("請輸入該節點的數值:"); 104 int n; 105 scanf("%d", &n); 106 e->data = n; 107 e->pNext = p->pNext; 108 p->pNext = e; 109 len++; 110 return pHead; 111 } 112 //+++++++++++++++++++++++++++++++ 113 //+++++++++++++++++++++++++++++ 114 //刪除節點 115 pNode delete(pNode pHead,int len){ 116 pNode p; 117 pNode q; 118 p=pHead; 119 printf("請輸入要刪除第幾個節點(不包含頭結點)"); 120 int k; 121 scanf("%d",&k); 122 int i; 123 for(i=0;i<k-1;i++){ 124 p=p->pNext; 125 } 126 q=p->pNext; 127 p->pNext=q->pNext; 128 free(q); 129 q=NULL; 130 return pHead; 131 }