当前位置:   article > 正文

c++/c详细链表操作(头插尾插创建,插入,删除,查找,遍历,清空)_c++实现单链表的节点头插入、尾插入的代码,并可以遍历查看,实现单链表的节点的删

c++实现单链表的节点头插入、尾插入的代码,并可以遍历查看,实现单链表的节点的删
  1. #include <iostream>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<stdbool.h>
  5. #include<windows.h>
  6. using namespace std;
  7. typedef struct Node
  8. {
  9. int number;//数据域
  10. struct Node*next;//指针域
  11. } Node,*Linklist;
  12. //链表的初始化
  13. void linklistIntit(Linklist &L)
  14. {
  15. L=(Linklist)malloc(sizeof(Node));
  16. L->next=NULL;
  17. }
  18. //头插法创建链表
  19. void linklistheadCreat1(Linklist &L,int n)
  20. {
  21. Linklist p;
  22. for(int i=0; i<n; i++)
  23. {
  24. p=(Linklist)malloc(sizeof(Node));//开辟空间
  25. cout<<"请你输入数据\n";
  26. cin>>p->number;
  27. p->next=L->next;
  28. L->next=p;
  29. }
  30. }
  31. //尾插法创建链表
  32. void linklistheadCreat2(Linklist &L,int n)
  33. {
  34. Linklist rear=L;//定义rear由下下面操作(rear=p;)让rear始终指向尾部节点
  35. for(int i=0; i<n; i++)
  36. {
  37. Linklist p=(Linklist)malloc(sizeof(Node));
  38. cout<<"请输入数据\n";
  39. cin>>p->number;
  40. rear->next=p;
  41. rear=p;
  42. rear->next=NULL;//必不可少指向空
  43. }
  44. }
  45. //遍历链表
  46. void linklistTreavle(Linklist &L)
  47. {
  48. Linklist p;
  49. p=L->next;
  50. while(p)
  51. {
  52. printf("%d ",p->number);
  53. p=p->next;
  54. }
  55. }
  56. //查找指定元素
  57. bool linklistLocate(Linklist &L,int data)
  58. {
  59. Linklist p;
  60. p=L->next;
  61. while(p)
  62. {
  63. if(p->number==data)
  64. {
  65. cout<<"已找到"<<data<<'\n';
  66. return true;
  67. }
  68. p=p->next;
  69. }
  70. cout<<"抱歉没有您要的值!"<<'\n';
  71. return false;
  72. }
  73. //指定位置插入指定元素
  74. void linklistInsert(Linklist &L,int n,int data)
  75. {
  76. Linklist p;
  77. p=L->next;
  78. for(int i=0; i<n-1; i++)
  79. {
  80. p=p->next;
  81. }
  82. Linklist q=(Linklist)malloc(sizeof(Node));
  83. q->number=data;
  84. q->next=p->next;//顺序不能颠倒
  85. p->next=q;
  86. }
  87. //删除指定元素
  88. bool linklistDelete(Linklist &L,int data)
  89. {
  90. Linklist p,q;//两个指针使p始终在q的前一个,这样方便删除q之后做好接下来的连接工作
  91. p=L;
  92. q=L->next;
  93. while(q)
  94. {
  95. if(q->number==data)
  96. {
  97. p->next=q->next;
  98. free(q);
  99. cout<<"找到并且删除!\n";
  100. return true;
  101. }
  102. p=q;//使p始终在q的前面
  103. q=q->next;
  104. }
  105. cout<<"不存在您找的值!\n";
  106. return false;
  107. }
  108. //清空链表
  109. void linklistClear(Linklist &L)
  110. {
  111. Linklist p=L;
  112. while(L)
  113. {
  114. L=L->next;//先移动L
  115. free(p);//再释放p
  116. p=L;//再移动p
  117. }
  118. cout<<"链表清空完毕!\n";
  119. }
  120. //菜单
  121. void linklistMenu()
  122. {
  123. cout<<"链表已经完成初始化"<<'\n';
  124. cout<<"1.头插法建立链表"<<"2.尾插法建立链表"<<'\n';
  125. cout<<"3.链表中插入数据"<<"4.删除指定数据"<<'\n';
  126. cout<<"5.查找指定元素"<<"6.清空链表"<<'\n';
  127. cout<<"7.遍历链表"<<'\n';
  128. }
  129. int main()
  130. {
  131. int data,n,i;
  132. Linklist L;
  133. linklistIntit(L);
  134. while(1)
  135. {
  136. system("cls");//清屏
  137. linklistMenu();
  138. cin>>i;
  139. switch(i)
  140. {
  141. case 1:
  142. cout<<"请输入数量!"<<'\n';
  143. cin>>n;
  144. linklistheadCreat1(L,n);
  145. break;
  146. case 2:
  147. cout<<"请输入数量!"<<'\n';
  148. cin>>n;
  149. linklistheadCreat2(L,n);
  150. break;
  151. case 3:
  152. cout<<"请输入位置和新值!"<<'\n';
  153. cin>>n>>data;
  154. linklistInsert(L,n,data);
  155. break;
  156. case 4:
  157. cout<<"请输入要删除的值!"<<'\n';
  158. cin>>data;
  159. linklistDelete(L,data);
  160. break;
  161. case 5:
  162. cout<<"请输入要查找的值!"<<'\n';
  163. cin>>data;
  164. linklistLocate(L,data);
  165. break;
  166. case 6:
  167. linklistClear(L);
  168. break;
  169. case 7:
  170. linklistTreavle(L);
  171. }
  172. system("pause");//按任意键继续
  173. }
  174. return 0;
  175. }

 

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

闽ICP备14008679号