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个节点的数值是:%dn", (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     }

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!