注釋最全的C語言鏈表的增刪改查


  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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM