数据结构 线性表 单链表 插入与删除

举报
悦来客栈的老板 发表于 2020/12/29 23:16:42 2020/12/29
【摘要】 #include <stdio.h>#include <stdlib.h>#include <iostream.h> #define OK 1#define ERROR 0#define OVERFLOW -2 typedef int ElemType; typedef struct LNode{ ElemType data; struct...

  
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <iostream.h>
  4. #define OK 1
  5. #define ERROR 0
  6. #define OVERFLOW -2
  7. typedef int ElemType;
  8. typedef struct LNode
  9. {
  10. ElemType data;
  11. struct LNode *next;
  12. }LNode, *LinkList;
  13. void CreateList_L(LinkList &L, int n)
  14. {
  15. int i;
  16. LinkList p,q;
  17. L = (LinkList) malloc (sizeof(LNode));
  18. if (!L)
  19. {
  20. exit(OVERFLOW);
  21. }
  22. p = L;
  23. for (i=0; i<n; i++)
  24. {
  25. q = (LinkList) malloc (sizeof(LNode));
  26. if (!q)
  27. {
  28. exit(OVERFLOW);
  29. }
  30. scanf("%d",&q->data);
  31. p->next = q;
  32. p = q;
  33. }
  34. p->next = NULL;
  35. }
  36. void Display(LinkList L)
  37. {
  38. LinkList p = L->next;
  39. while (p != NULL)
  40. {
  41. printf("%d ",p->data);
  42. p = p->next;
  43. }
  44. printf("\n");
  45. }
  46. int ListInsert_L(LinkList &L, int i, ElemType e)
  47. {
  48. LinkList s,p = L;
  49. int j = 0;
  50. while (p && j<i-1)
  51. {
  52. p = p->next;
  53. ++j;
  54. }
  55. if (!p || j>i-1)
  56. {
  57. return ERROR;
  58. }
  59. s = (LinkList) malloc (sizeof(LNode));
  60. s->data = e;
  61. s->next = p->next;
  62. p->next = s;
  63. return OK;
  64. }
  65. int ListDelete_L(LinkList &L, int i, ElemType &e)
  66. {
  67. LinkList p = L,q;
  68. int j = 0;
  69. while (p->next && j<i-1)
  70. {
  71. p = p->next;
  72. ++j;
  73. }
  74. if (!(p->next) || j>i-1)
  75. {
  76. return ERROR;
  77. }
  78. q = p->next;
  79. p->next = q->next ;
  80. e = q->data ;
  81. free(q);
  82. return OK;
  83. }
  84. int GetElem_L(LinkList L, int i, ElemType &e)
  85. {
  86. LinkList p = L->next;
  87. int j = 1;
  88. while (p && j<i)
  89. {
  90. p = p->next;
  91. j++;
  92. }
  93. if (!p || j>i)
  94. {
  95. return ERROR;
  96. }
  97. e = p->data;
  98. return OK;
  99. }
  100. int main()
  101. {
  102. int i,n,e;
  103. LinkList L;
  104. printf("请输入您要创建单链表的元素的个数:");
  105. scanf("%d",&n);
  106. CreateList_L(L,n);
  107. printf("请输入您要插入元素的位置:");
  108. scanf("%d",&i);
  109. printf("请输入您要插入的元素:");
  110. scanf("%d",&e);
  111. ListInsert_L(L,i,e);
  112. printf("插入元素后的单链表是:");
  113. Display(L);
  114. printf("请输入您要删除的元素的位置:");
  115. scanf("%d",&i);
  116. ListDelete_L(L,i,e);
  117. printf("该位置上的元素是: %d\n",e);
  118. printf("删除元素 %d 后的单链表是:",e);
  119. Display(L);
  120. printf("请输入您要查找的元素的位置:");
  121. scanf("%d",&i);
  122. if (GetElem_L(L,i,e))
  123. {
  124. printf("该位置上的元素是:%d\n",e);
  125. }
  126. else
  127. {
  128. printf("查找失败,位置非法!\n");
  129. }
  130. return 0;
  131. }

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/17078411

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。