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

╰半橙微兮° 2022-09-18 14:52 354阅读 0赞
  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. q = L;
  23. q->next = L;
  24. for (i=n; i>0; --i)
  25. {
  26. p = (LinkList) malloc (sizeof (LNode));
  27. if (!p)
  28. {
  29. exit(OVERFLOW);
  30. }
  31. scanf("%d",&p->data);
  32. p->next = L;
  33. q->next = p;
  34. q = p;
  35. }
  36. }
  37. void Display(LinkList L)
  38. {
  39. LinkList p = L->next;
  40. while (p != L)
  41. {
  42. printf("%d ",p->data);
  43. p = p->next;
  44. }
  45. printf("\n");
  46. }
  47. int ListInsert_L(LinkList &L, int i, ElemType e)
  48. {
  49. LinkList s,p = L;
  50. int j = 0;
  51. while (p->next != L && j<i-1)
  52. {
  53. p = p->next;
  54. ++j;
  55. }
  56. if ( (p->next == L) || j>i-1)
  57. {
  58. return ERROR;
  59. }
  60. s = (LinkList) malloc (sizeof(LNode));
  61. s->data = e;
  62. s->next = p->next;
  63. p->next = s;
  64. return OK;
  65. }
  66. int ListDelete_L(LinkList &L, int i, ElemType &e)
  67. {
  68. LinkList p = L,q;
  69. int j = 0;
  70. while (p->next != L && j<i-1)
  71. {
  72. p = p->next;
  73. ++j;
  74. }
  75. if ((p->next == L) || j>i-1)
  76. {
  77. return ERROR;
  78. }
  79. q = p->next;
  80. p->next = q->next ;
  81. e = q->data ;
  82. free(q);
  83. return OK;
  84. }
  85. int main()
  86. {
  87. int i,e,n;
  88. LinkList L;
  89. printf("请输入您要创建循环链表的元素的个数:");
  90. scanf("%d",&n);
  91. CreateList_L(L,n);
  92. printf("请输入您要插入元素的位置:");
  93. scanf("%d",&i);
  94. printf("请输入您要插入的元素:");
  95. scanf("%d",&e);
  96. ListInsert_L(L,i,e);
  97. printf("插入元素后的单链表是:");
  98. Display(L);
  99. printf("请输入您要删除的元素的位置:");
  100. scanf("%d",&i);
  101. ListDelete_L(L,i,e);
  102. printf("该位置上的元素是: %d\n",e);
  103. printf("删除元素 %d 后的单链表是:",e);
  104. Display(L);
  105. return 0;
  106. }

发表评论

表情:
评论列表 (有 0 条评论,354人围观)

还没有评论,来说两句吧...

相关阅读