注释最全的C语言链表的增删改查

2018-01-19 18:44:26来源:cnblogs.com作者:永远年轻,永远装嫩人点击

分享
  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     }

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台