当前位置:   article > 正文

8579 顺序表逆置 SCAU 华南农业大学 数据结构实验(个人笔记 勿喷)_scau链表逆序

scau链表逆序
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct Node
  4. {
  5. int date;
  6. struct Node *pNext;
  7. } NODE, *PNODE;
  8. PNODE creat_list()
  9. {
  10. int len, temp; //temp负责临时接收输入值
  11. printf("请输入你要创建的链表长度\n");
  12. scanf("%d", &len);
  13. PNODE phead; //头指针
  14. phead = (PNODE)malloc(sizeof(NODE));
  15. if (NULL == phead)
  16. {
  17. printf("空间分配失败\n");
  18. exit(-1);
  19. }
  20. phead->pNext = NULL;
  21. PNODE ptail = phead; //创建尾指针并初始化,方便指针的移动
  22. for (int i = 0; i < len; ++i)
  23. {
  24. printf("请输入节点的值\n");
  25. scanf("%d", &temp);
  26. PNODE pnew = (PNODE)malloc(sizeof(NODE));
  27. if (NULL == pnew)
  28. {
  29. printf("空间分配失败\n");
  30. exit(-1);
  31. }
  32. pnew->date = temp;
  33. ptail->pNext = pnew;
  34. pnew->pNext = NULL;
  35. ptail = pnew;
  36. }
  37. return (phead);
  38. }
  39. void traverse_list(PNODE phead)
  40. {
  41. PNODE p = phead->pNext; //让p指向第一个有效的节点(首节点)
  42. while (p != NULL)
  43. {
  44. printf("%d ", p->date);
  45. p = p->pNext;
  46. }
  47. printf("\n");
  48. }
  49. int list_length(PNODE phead)
  50. {
  51. int len = 0;
  52. PNODE p = phead->pNext;
  53. while (p != NULL)
  54. {
  55. len++;
  56. p = p->pNext;
  57. }
  58. return len;
  59. }
  60. bool is_empty(PNODE phead)
  61. {
  62. PNODE p = phead->pNext;
  63. if (p != NULL)
  64. return true;
  65. else
  66. return false;
  67. }
  68. void sort_list(PNODE phead)
  69. {
  70. /* //冒泡排序的 数组版
  71. int i, j ,temp;
  72. for(i=0;i<len-1;i++)
  73. {
  74. for(j=0;j<len-1-i;j++)
  75. {
  76. if(a[j]>a[j+1])
  77. {
  78. temp = a[j];
  79. a[j] = a[j+1];
  80. a[j+1] = a[j];
  81. }
  82. }
  83. } */
  84. //下面是模仿数组版写出来 ,体现了泛型的思想,这是交换节点的数据域,没有交换节点,当数据源很大时,效率就会很低,后期有时间要学下怎么交换节点
  85. int i, j, temp;
  86. PNODE p1, p2;
  87. for (i = 0; i < list_length(phead) - 1; i++)
  88. {
  89. p1 = phead->pNext;
  90. p2 = p1->pNext;
  91. for (j = 0; j < list_length(phead) - i - 1; j++)
  92. {
  93. if (p1->date > p2->date)
  94. {
  95. temp = p1->date;
  96. p1->date = p2->date;
  97. p2->date = temp;
  98. }
  99. p1 = p1->pNext;
  100. p2 = p2->pNext;
  101. }
  102. }
  103. }
  104. bool insert_list(PNODE phead, int pos, int val) //在第pos-1位置前插入一个节点,关键就是找前一个节点的位置, POS是从一开始
  105. {
  106. int i = 0;
  107. PNODE p = phead;
  108. while (p != NULL && i < pos - 1)
  109. {
  110. i++;
  111. p = p->pNext;
  112. } //这个算法可以很好让P指向第pos-1个节点 如果p=NULL 的话说明要在插入的位置前 链表以及为空(pos大于len+1)
  113. if (i > pos - 1 || p == NULL) //这个可以防止 pos为负数;
  114. return false;
  115. PNODE pnew = (PNODE)malloc(sizeof(NODE));
  116. if (pnew == NULL)
  117. {
  118. printf("分配内存失败\n");
  119. exit(-1);
  120. }
  121. pnew->date = val;
  122. pnew->pNext = p->pNext; //这先让pnew的尾巴和第pos个连接起来
  123. p->pNext = pnew; // 这个让POS-1个节点与PNEW 连接起来
  124. return true;
  125. }
  126. bool delet_list(PNODE phead, int pos, int *val)
  127. {
  128. int i = 0;
  129. PNODE p = phead;
  130. while (p->pNext != NULL && i < pos - 1)
  131. {
  132. i++;
  133. p = p->pNext;
  134. } //这个算法可以很好让P指向第pos-1个节点 如果p->next=NULL 的话说明要在删除的位置前 链表以及为空(pos大于len)
  135. if (i > pos - 1 || p->pNext == NULL) //这个可以防止 pos为负数;
  136. return false;
  137. PNODE ptemp = (PNODE)malloc(sizeof(NODE)); //需要一个临时的指针指向被删除的节点 方便日后释放内存,以免找不回被删的节点
  138. if (ptemp == NULL)
  139. {
  140. printf("分配内存失败\n");
  141. exit(-1);
  142. }
  143. ptemp = p->pNext;
  144. *val = ptemp->date;
  145. p->pNext = p->pNext->pNext;
  146. free(ptemp);
  147. ptemp = NULL; //规范操作 释放后让不能再用了
  148. return true;
  149. }
  150. int main()
  151. {
  152. int val;
  153. PNODE phead;
  154. phead = creat_list();
  155. traverse_list(phead);
  156. insert_list(phead, 1, 3);
  157. traverse_list(phead);
  158. delet_list(phead, 22, &val);
  159. printf("删除值是 %d \n", val);
  160. traverse_list(phead);
  161. return 0;
  162. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/761676
推荐阅读
相关标签
  

闽ICP备14008679号