当前位置:   article > 正文

单链表操作_编写一个程序linklist.cpp

编写一个程序linklist.cpp

一、要求       

 编写一个程序linklist.cpp (或.c),实现单链表的各种基本运算和整体建表算法(假设顺序表的内容类型ElemType为char),并在此基础上设计一个程序exp3.cpp (或.c) 完成一下功能。

(1)  初始化一个单链表L。

(2)  采用尾插法依次将元素a、b、c、d、e插入单链L中。

(3)  输出单链表L。

(4)  输出单链表L的长度。

(5)  判断单链表L是否为空。

(6)  输出单链表L的第3个长度。

(7)  输出元素a的位置。

(8)  在单链表L的第4个元素位置上插入元素f。

(9)  输出单链表L。

(10) 删除单链表L的第3个元素。

(11) 输出单链表L。

(12) 销毁单链表L。

二、代码实现:

  1. #include<stdio.h>
  2. #include<malloc.h>
  3. #include<stdlib.h>
  4. #define OK 1
  5. #define OVERFLOW -2
  6. #define TRUE 1
  7. #define FALSE 0
  8. #define ERROR 0
  9. typedef char ElemType;
  10. typedef int Status;
  11. typedef struct LNode {
  12. ElemType data;
  13. struct LNode *next;
  14. }LNode,*LinkList;
  15. //初始化单链表
  16. Status InitList(LinkList &L) //初始化线性表
  17. {
  18. L = (LinkList )malloc(sizeof(LNode)); //创建头结点
  19. if (!L) {
  20. exit(OVERFLOW);
  21. }
  22. L->next = NULL;
  23. return OK;
  24. }
  25. //输出单链表
  26. void DispList(LinkList &L)
  27. {
  28. LinkList p;
  29. p = L->next;
  30. while (p != NULL)
  31. {
  32. printf("%c ", p->data);
  33. p = p->next;
  34. }
  35. printf("\n");
  36. }
  37. //输出单链表长度
  38. int lengthList(LinkList &L)
  39. {
  40. int n = 0;
  41. LinkList p = L->next;
  42. while (p != NULL)
  43. {
  44. n++;
  45. p = p->next;
  46. }
  47. return n;
  48. }
  49. //判断单链表是否为空
  50. int emptyList(LinkList &L)
  51. {
  52. if (L->next== NULL)
  53. return TRUE;
  54. else
  55. return FALSE;
  56. }
  57. //查值
  58. Status GetElem(LinkList &L, int i, ElemType &e)
  59. {
  60. int j=1;
  61. LinkList p = L->next; //struct LNode *p = L->next;
  62. while (p&&(j < i))
  63. {
  64. p = p->next;
  65. ++j;
  66. }
  67. if (!p || j > i)
  68. return ERROR;
  69. e = p->data;
  70. return OK;
  71. }
  72. //查元素位置
  73. int LocateElem(LinkList L, ElemType e)
  74. {
  75. int i = 1;
  76. LinkList p = L->next; //p指向开始节点,i置为1(即开始节点的序号为1)
  77. while (p != NULL && p->data != e) //查找data值为e的节点,其序号为i
  78. {
  79. p = p->next;
  80. i++;
  81. }
  82. if (p == NULL) //不存在元素值为e的节点,返回0
  83. return(0);
  84. else //存在元素值为e的节点,返回其逻辑序号i
  85. return(i);
  86. }
  87. //插入
  88. Status ListInsert(LinkList &L, int i, ElemType e)
  89. {
  90. int j = 0;
  91. LinkList p = L,s;
  92. while (p&&(j<i-1))
  93. {
  94. p = p->next;
  95. ++j;
  96. }
  97. if (p == NULL)
  98. return ERROR;
  99. else
  100. {
  101. s=(LinkList )malloc(sizeof(LNode));
  102. s->data = e;
  103. s->next = p->next;
  104. p->next = s;
  105. return OK;
  106. }
  107. }
  108. //删除链表中的元素
  109. Status ListDelete(LinkList &L, int i)
  110. {
  111. int j = 0;
  112. LinkList p = L,q;
  113. while ((p->next) && (j < i - 1))
  114. {
  115. p = p->next;
  116. ++j;
  117. }
  118. if (!(p->next) || (j > i - 1))
  119. return ERROR;
  120. q = p->next;
  121. p->next = q->next;
  122. delete q;
  123. return OK;
  124. }
  125. //销毁单链表
  126. Status DestroyList(LinkList &L)
  127. {
  128. LinkList q = L;
  129. while (q != NULL)
  130. {
  131. LinkList p = q;
  132. q = q->next;
  133. free(p);
  134. p = NULL;
  135. }
  136. return OK;
  137. }
  138. //exp3.cpp
  139. # include<stdio.h>
  140. int main()
  141. {
  142. int m;
  143. ElemType e;
  144. LinkList(L);
  145. printf("1:初始化链表L\n");
  146. InitList(L);
  147. printf("2:将a,b,c,d,e插入到单链表L里\n");
  148. ListInsert(L, 1, 'a');
  149. ListInsert(L, 2, 'b');
  150. ListInsert(L, 3, 'c');
  151. ListInsert(L, 4, 'd');
  152. ListInsert(L, 5, 'e');
  153. printf("3:输出单链表L:");
  154. DispList(L);
  155. m = lengthList(L);
  156. printf("4:输出单链表L的长度:%d\n",m);
  157. printf("5:单链表L为: %s \n", (emptyList(L) ? "空" : "非空"));
  158. GetElem(L, 3, e);
  159. printf("6:单链表L第3个元素:%c\n",e);
  160. printf("7:单链表L中a元素的位置:%d\n", LocateElem(L,'a'));
  161. printf("8:在单链表L第4个元素位置插入f\n");
  162. ListInsert(L, 4, 'f');
  163. printf("9:插入f后的单链表L为:");
  164. DispList(L);
  165. printf("10:删除单链表L的第3个元素\n");
  166. ListDelete(L, 3);
  167. printf("11:删除第3个元素后的单链表L为:");
  168. DispList(L);
  169. printf("12:销毁单链表L\n");
  170. DestroyList(L);
  171. while (1);
  172. return 0;
  173. }

三、运行结果

 

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

闽ICP备14008679号