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 }
原文地址:https://www.cnblogs.com/kangge/p/8316844.html
时间: 2024-10-10 11:01:38