当前位置:   article > 正文

(车)定义单链表,编写单链表初始化函数、插入函数(在某个位置插入一个元素)、查找函数(按值查找)、删除函数(删除单链表中某个位置上的元素)、输出函数(显示单链表中每个元素)、主函数。_将单链表的初始化和插入放到一个函数里

将单链表的初始化和插入放到一个函数里

可供操作

  1. printf("\n输入你要选择的命令\n");
  2. printf("1、展示一切信息\n");
  3. printf("2、插入\n");
  4. printf("3、销毁表\n");
  5. printf("4、初始化表\n");
  6. printf("5、查找信息\n");
  7. printf("6、删除信息\n");
  8. printf("7、退出\n");

代码使用了后插入法 

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include "stdio.h"
  3. #include "stdlib.h"
  4. #include "string.h"
  5. typedef int dataType;
  6. typedef struct node
  7. {
  8. int data;//数据-车牌
  9. char color[20];//颜色
  10. int length;//长度
  11. struct node *next;
  12. }Node,*LinkList;
  13. void insertLinkList(LinkList L,int i,dataType x,char s[]);//插入函数,在L中第i个位置插入x,s;
  14. int searchLinkList(LinkList L,dataType x);//查找x是否在L中,若有返回x在L中的位序,若没有返回0
  15. int delLinkList(LinkList L,int i);//删除L中第i个元素,并返回其值
  16. LinkList init(int n);//创建链表
  17. void show(LinkList L);//展示链表
  18. void destorylist(LinkList L);//销毁表
  19. void mingling(LinkList L,int n);//命令执行
  20. void choose(LinkList L);//选项
  21. int getnumber();
  22. //主函数
  23. int main()
  24. {
  25. int n;
  26. LinkList L;
  27. n=getnumber();
  28. L=init(n);
  29. show(L);
  30. choose(L);
  31. free(L);
  32. }
  33. //得到要输入的车辆数量
  34. int getnumber()
  35. {
  36. int n;
  37. printf("请输入你要录入的车辆数量:");
  38. scanf("%d",&n);
  39. return n;
  40. }
  41. /*建立链表
  42. 前插入法创造链表
  43. 算法时间复杂度为O(n)
  44. */
  45. //LinkList init(int n)
  46. //{
  47. // int i;
  48. // LinkList L;
  49. // Node *p;
  50. // L=(LinkList)malloc(sizeof(Node));
  51. // L->next=NULL;
  52. // for(i=1;i<=n;i++)
  53. // {
  54. // p=(Node *)malloc(sizeof(Node));//生成新的结点p
  55. // printf("输入第%d车辆的车牌号:",i);
  56. // scanf("%d",&p->data);
  57. // p->next=L->next;//将新结点插入头结点后
  58. // L->next=p;
  59. // }
  60. // L->length=n;
  61. // return L;//返回表
  62. //
  63. //}
  64. /*建立链表
  65. 后插入法创造链表
  66. 算法时间复杂度为O(n)
  67. */
  68. LinkList init(int n)
  69. {
  70. int i;
  71. LinkList L;
  72. Node *r;
  73. Node *p;
  74. L=(LinkList)malloc(sizeof(Node));//建立一个带头指针的空链表
  75. L->next=NULL;
  76. r=L;//尾指针r指向头结点
  77. for(i=1;i<=n;i++)
  78. {
  79. p=(Node *)malloc(sizeof(Node));//生成新结点
  80. printf("输入第%d车辆的车牌号:",i);//输入元素值赋给新结点*p的数据域
  81. scanf("%d",&p->data);
  82. printf("输入第%d车辆的车颜色:",i);
  83. scanf("%s",p->color);
  84. p->next=NULL;//将新结点*p插入尾结点*r之后
  85. r->next=p;//r指向新的尾结点*p
  86. r=p;
  87. }
  88. L->length=n;
  89. return L;
  90. }
  91. //展示信息
  92. //算法的时间复杂度未O(n),n为单链表中的数据节点的个数
  93. void show(LinkList L)
  94. {
  95. int i=0;
  96. Node *p;
  97. p=L->next;
  98. while(p)
  99. {
  100. i++;
  101. printf("第%d车辆的车牌号:%d\n",i,p->data);
  102. printf("第%d车辆的车颜色:%s \n",i,p->color);
  103. p=p->next;
  104. }
  105. printf("\n信息已全部输出\n");
  106. }
  107. //查找信息
  108. int searchLinkList(LinkList L,dataType x)
  109. {
  110. Node *p;int j;
  111. p=L;
  112. j=0;
  113. //判断车牌x是否在表中
  114. while(j<L->length&&p&&p->data!=x)
  115. {
  116. p=p->next;
  117. j++;
  118. }
  119. if(!p||j>L->length)
  120. {
  121. return -1;
  122. }
  123. else
  124. return j;//返回车牌所在的位序
  125. }
  126. //插入
  127. //在L中第i个位置插入x
  128. void insertLinkList(LinkList L,int i,dataType x,char s[])
  129. {
  130. int a=1;
  131. Node *c;
  132. Node * temp;
  133. temp=L;//创建临时结点temp等于L
  134. //首先找到要插入位置的上一个结点
  135. for ( ;a<i; a++) {
  136. if (temp==NULL) {
  137. printf("插入位置无效\n");
  138. }
  139. temp=temp->next;
  140. }
  141. //创建插入结点c
  142. c=( Node*)malloc(sizeof(Node));
  143. c->data=x;
  144. strcpy(c->color,s);
  145. //向链表中插入结点
  146. c->next=temp->next;
  147. temp->next=c;
  148. }
  149. //销毁表
  150. void destorylist(LinkList L)
  151. {
  152. free(L);
  153. }
  154. //删除目标信息
  155. //删除L中第i个元素,并返回其值。
  156. int delLinkList(LinkList L,int i)
  157. {
  158. int j=0,temp;
  159. LinkList p,q;p=L;
  160. while(j<i&&p!=NULL)
  161. {
  162. j++;
  163. p=p->next;
  164. }
  165. if(p==NULL)
  166. return -1;
  167. else
  168. {
  169. temp=p->data;
  170. q=p->next;
  171. if(q==NULL)
  172. return -1;
  173. p->data=q->data;
  174. strcpy(p->color,q->color);
  175. p->next=q->next;
  176. free(q);
  177. return temp;
  178. }
  179. }
  180. //选择
  181. void choose(LinkList L)
  182. {
  183. int n;
  184. printf("\n输入你要选择的命令\n");
  185. printf("1、展示一切信息\n");
  186. printf("2、插入\n");
  187. printf("3、销毁表\n");
  188. printf("4、初始化表\n");
  189. printf("5、查找信息\n");
  190. printf("6、删除信息\n");
  191. printf("7、退出\n");
  192. scanf("%d",&n);
  193. mingling(L,n);
  194. }
  195. //命令执行
  196. void mingling(LinkList L,int n)
  197. {
  198. int i,flag;int e;char s[20];
  199. switch(n)
  200. {
  201. case 1: show(L);choose(L);break;
  202. case 2:
  203. {
  204. printf("你想插入的位置 数据(车牌) 颜色:\n");
  205. scanf("%d %d %s",&i,&e,s);
  206. insertLinkList(L,i,e,s);
  207. show(L);
  208. choose(L);
  209. }break;
  210. case 3:destorylist(L);choose(L);break;
  211. case 4:init(n);choose(L);break;
  212. case 5:
  213. {
  214. printf("你想查找的数据(车牌):\n");
  215. scanf("%d",&e);
  216. flag=searchLinkList(L,e);
  217. if(flag==-1)printf("未找到该信息\n");
  218. else printf("找到该信息,信息为:数据(车牌)%d位于表中第%d位\n",e,flag);
  219. choose(L);
  220. }break;
  221. case 6:
  222. {
  223. printf("你想删除第几位的数据:\n");
  224. scanf("%d",&i);
  225. flag=delLinkList(L,i);
  226. if(flag==-1)printf("未执行命令");
  227. else printf("删除了第%d位信息\n被删除的第%d位上数据(车牌)为%d",i,i,flag);
  228. choose(L);
  229. }break;
  230. case 7:exit(0);break;
  231. default: choose(L);break;
  232. }
  233. }

前插入法

  1. /*建立链表
  2. 前插入法创造链表
  3. 算法时间复杂度为O(n)
  4. */
  5. LinkList init(int n)
  6. {
  7. int i;
  8. LinkList L;
  9. Node *p;
  10. L=(LinkList)malloc(sizeof(Node));
  11. L->next=NULL;
  12. for(i=1;i<=n;i++)
  13. {
  14. p=(Node *)malloc(sizeof(Node));//生成新的结点p
  15. printf("输入第%d车辆的车牌号:",i);
  16. scanf("%d",&p->data);
  17. p->next=L->next;//将新结点插入头结点后
  18. L->next=p;
  19. }
  20. L->length=n;
  21. return L;//返回表
  22. }

输出

 

 

 

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

闽ICP备14008679号