当前位置:   article > 正文

详解C++中链表的基本操作

详解C++中链表的基本操作

利用链表操作实现的链表数据管理系统:

  1. #include<iostream>
  2. #include "myfun.h"
  3. using namespace std;
  4. enum Status{
  5. OK = true,
  6. ERROR = false
  7. };
  8. typedef struct LNode{
  9. int data;
  10. LNode* next;
  11. }L,*LinkList;
  12. Status Print_LS(LinkList L);
  13. Status Create_LS(LinkList L,const int N);
  14. void Init_L(LinkList L);
  15. Status Insert_LS(LinkList& L,const int i);
  16. Status Delete_LS(LinkList& L,const int i);
  17. Status Search_LS(LinkList L,const int data,int& e);
  18. Status Change_LS(LinkList& L,const int data1,const int data2);
  19. int main(void){
  20. cout << "程序规则如下:" << endl;
  21. cout << "1.链表值为1~100之间的随机数" << endl;
  22. cout << "2.输入show:则输出链表" << endl;
  23. cout << "3.输入insert i:则在i下标后插入一个随机数" << endl;
  24. cout << "4.输入delete i:则删除第i个元素(注意不是下标)" << endl;
  25. cout << "5.输入search n:则输出n在链表中的下标" << endl;
  26. cout << "6.输入change m n:则将链表中的元素m改为n" << endl;
  27. srand(time(0));
  28. LinkList L = new LNode;
  29. Init_L(L);
  30. Create_LS(L,9); //在初始节点后面插入 9 个节点
  31. Print_LS(L);
  32. string str;
  33. cout << "请输入操作指令:";
  34. while (cin >> str){
  35. if (str == "show"){
  36. Print_LS(L);
  37. cout << "********************" << endl;
  38. }
  39. else if (str == "insert"){
  40. int i;cin >> i;
  41. if (Insert_LS(L,i)){
  42. cout << "insert OK" << endl;
  43. cout << "********************" << endl;
  44. }
  45. else{
  46. cout << "insert fail!" << endl;
  47. cout << "********************" << endl;
  48. }
  49. }
  50. else if (str == "delete"){
  51. int i;cin >> i;
  52. if (Delete_LS(L,i)){
  53. cout << "delete OK" << endl;
  54. }
  55. else{
  56. cout << "delete fail!" << endl;
  57. }
  58. }
  59. else if (str == "search"){
  60. int data,e;
  61. cin >> data;
  62. if (Search_LS(L,data,e)){
  63. cout << "search OK!\nThe Index: " << e << endl;
  64. }
  65. else{
  66. cout << "search fail!" << endl;
  67. }
  68. cout << "********************" << endl;
  69. }
  70. else if (str == "change"){
  71. int data1,data2;
  72. cin >> data1 >> data2;
  73. if (Change_LS(L,data1,data2)){
  74. cout << "change OK" << endl;
  75. }
  76. else {
  77. cout << "change fail!" << endl;
  78. }
  79. cout << "********************" << endl;
  80. }
  81. cout << "请输入操作指令:";
  82. }
  83. return 1;
  84. };
  85. void Init_L(LinkList L){
  86. L->data = randint(1,100);
  87. L->next = NULL;
  88. }
  89. Status Print_LS(LinkList L){
  90. LinkList p = L;
  91. int i = 0;
  92. cout << "元素:";
  93. while (p){
  94. i++;
  95. printf("%-3d",p->data);
  96. p = p->next;
  97. }
  98. cout << endl;
  99. cout << "索引:";
  100. for (int j=0;j<i;j++){
  101. printf("%-3d",j);
  102. }
  103. cout << endl;
  104. cout << "序号:";
  105. for (int j=0;j<i;j++){
  106. printf("%-3d",j+1);
  107. }
  108. cout << endl;
  109. return OK;
  110. }
  111. Status Search_LS(LinkList L,const int data,int& e){ //寻找第一个出现data的下标
  112. int i = 0;
  113. LinkList cur = L;
  114. while (cur){
  115. if (cur->data == data){
  116. break;
  117. }
  118. i++;
  119. cur = cur->next;
  120. }
  121. if (!cur){
  122. return ERROR;
  123. }
  124. e = i;
  125. return OK;
  126. }
  127. Status Create_LS(LinkList L,const int N){
  128. LinkList p,cur;
  129. p = L;
  130. cur = L;
  131. cout << "随机生成链表成功!" << endl;
  132. for (int i=0;i<N;i++){
  133. p = new LNode;
  134. p->data = randint(1,100);
  135. cur->next = p;
  136. cur = p;
  137. }
  138. if (cur == NULL){
  139. return ERROR;
  140. }
  141. p->next = NULL;
  142. return OK;
  143. }
  144. Status Insert_LS(LinkList& L,const int i){
  145. int j = 0;
  146. LinkList cur = L;
  147. if (i < 1){
  148. LinkList newL = new LNode;
  149. Init_L(newL);
  150. newL->next = L;
  151. L = newL;
  152. return OK;
  153. }
  154. while (j < i-1 && cur->next){
  155. cur = cur->next;
  156. j++;
  157. }
  158. LinkList newL = new LNode;
  159. Init_L(newL);
  160. newL->next = cur->next;
  161. cur->next = newL;
  162. return OK;
  163. }
  164. Status Delete_LS(LinkList& L,const int i){
  165. int j = 0;
  166. LinkList cur = L;
  167. if (i < 1){
  168. return ERROR;
  169. }
  170. else if(i == 1){
  171. L = cur->next;
  172. delete cur;
  173. return OK;
  174. }
  175. while (j < i-2){
  176. if (!(cur->next->next)){ //一个神奇的判断越界魔法代码<( ̄︶ ̄)↗
  177. return ERROR;
  178. }
  179. cur = cur->next;
  180. j++;
  181. }
  182. LinkList delCur = cur->next;
  183. cur->next = delCur->next;
  184. delete delCur;
  185. return OK;
  186. }
  187. Status Change_LS(LinkList& L,const int data1,const int data2){
  188. LinkList cur = L;
  189. while (cur){
  190. if (cur->data == data1){
  191. cur->data = data2; //改
  192. return OK;
  193. }
  194. }
  195. return ERROR;
  196. }

myfun.h头文件往下翻

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