当前位置:   article > 正文

线性表的完整操作_如线性表已满,则返回false,如i合法, 则返回true, 否则返回false {

如线性表已满,则返回false,如i合法, 则返回true, 否则返回false {
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <time.h>
  4. #include <stdlib.h>
  5. #define OK 1
  6. #define ERROR 0
  7. #define TRUE 1
  8. #define FALSE 0
  9. #define MAXSIZE 20 /* 存储空间初始分配量 */
  10. typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */
  11. typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
  12. typedef struct
  13. {
  14. ElemType data[MAXSIZE];/* 数组,存储数据元素 */
  15. int length; /* 线性表当前长度 */
  16. }SqList;
  17. /* 初始化顺序线性表 */
  18. Status InitList(SqList *L)
  19. {
  20. L->length=0;
  21. return OK;
  22. }
  23. /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L), */
  24. /* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */
  25. Status ListInsert(SqList *L,int i,ElemType e)
  26. {
  27. int k;
  28. if (L->length==MAXSIZE)/* 顺序线性表已经满 */
  29. {
  30. printf("error:顺序线性表已满\n");
  31. return ERROR;
  32. }
  33. if (i<1||i>L->length+1)/* 当i比第一位置小或者比最后一位置后一位置还要大时 */
  34. {
  35. printf("error:插入位置不合法\n");
  36. return ERROR;
  37. }
  38. if (i<=L->length) /* 若插入数据位置不在表尾 */
  39. {
  40. for (k=L->length-1;k>=i-1;k--)
  41. {
  42. L->data[k+1]=L->data[k];
  43. }
  44. }
  45. L->data[i-1]=e;
  46. L->length++;
  47. return OK;
  48. }
  49. //顺序表的建立,给线性表随机赋10个值
  50. SqList Create(SqList L)
  51. {
  52. int i;
  53. srand((unsigned)time(NULL));//产生一个种子不固定的随机数
  54. for (i=0;i<10;i++)
  55. {
  56. L.data[i]=rand()%100;
  57. L.length+=1;
  58. }
  59. return L;
  60. }
  61. //输出结构体中的一个元素
  62. Status visit(ElemType c)
  63. {
  64. printf("%d",c);
  65. return OK;
  66. }
  67. /* 初始条件:顺序线性表L已存在 */
  68. /* 操作结果:依次对L的每个数据元素输出 */
  69. Status ListTraverse(SqList L)
  70. {
  71. for (int i=0;i<L.length;i++)
  72. {
  73. visit(L.data[i]);
  74. printf("\n");
  75. }
  76. return OK;
  77. }
  78. //初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE
  79. Status ListEmpty(SqList L)
  80. {
  81. if (L.length==0)
  82. {
  83. return TRUE;
  84. }
  85. else
  86. return FALSE;
  87. }
  88. //初始条件:顺序线性表L已存在。操作结果:将L重置为空表
  89. Status ClearList(SqList *L)
  90. {
  91. L->length=0;
  92. return OK;
  93. }
  94. /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
  95. /* 操作结果:用e返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 */
  96. Status GetElem(SqList L,int i,ElemType *e)
  97. {
  98. if(L.length==0 || i<1 || i>L.length)
  99. printf("范围错误\n");
  100. else
  101. {
  102. *e=L.data[i-1];
  103. }
  104. return OK;
  105. }
  106. /* 初始条件:顺序线性表L已存在 */
  107. /* 操作结果:返回L中第1个与e满足关系的数据元素的位序。 */
  108. /* 若这样的数据元素不存在,则返回值为0 */
  109. int LocateElem(SqList L,ElemType e)
  110. {
  111. int i;
  112. if (L.length==0)
  113. {
  114. printf("范围错误\n");
  115. return 0;
  116. }
  117. for(i=0;i < L.length;i++)
  118. {
  119. if (L.data[i]==e)
  120. break;
  121. }
  122. if(i>=L.length)
  123. {
  124. printf("不存在\n");
  125. return 0;
  126. }
  127. return i+1;
  128. }
  129. /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
  130. /* 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 */
  131. Status ListDelete(SqList *L,int i,ElemType *e)
  132. {
  133. int k;
  134. if (L->length==0) /* 线性表为空 */
  135. return ERROR;
  136. if (i < 1 || i>L->length) /* 删除位置不正确 */
  137. return ERROR;
  138. *e=L->data[i-1];
  139. if (i < L->length)
  140. {
  141. for(k=i;k < L->length; k++)/* 将删除位置后继元素前移 */
  142. L->data[k-1]=L->data[k];
  143. }
  144. L->length--;
  145. return OK;
  146. }
  147. int main()
  148. {
  149. SqList L;
  150. ElemType e;
  151. Status i;
  152. char opp='A';
  153. int j,k;
  154. int pos;
  155. ElemType value;
  156. i=InitList(&L);
  157. printf("初始化成功:L.length=%d\n",L.length);
  158. printf("\n1.遍历线性表 \n2.线性表赋值 \n3.线性表插入 \n4.线性表重置为空表 \n5.线性表查找\n6.线性表元素定位\n7.删除线性表中的元素\n0.退出 \n请选择你的操作:\n");
  159. while (opp!='0')
  160. {
  161. scanf("%c",&opp);
  162. switch (opp)
  163. {
  164. case '1':
  165. ListTraverse(L);
  166. printf("\n");
  167. break;
  168. case '2':
  169. L=Create(L);
  170. printf("线性表的长度:%d\n",L.length);
  171. printf("现在线性表为:\n");
  172. ListTraverse(L);
  173. printf("\n");
  174. break;
  175. case '3':
  176. printf("请输入插入元素位置:");
  177. scanf("%d",&pos);
  178. printf("请输入插入元素的值:");
  179. scanf("%d",&value);
  180. i = ListInsert(&L,pos,value);
  181. printf("插入完毕,现在线性表为:\n");
  182. ListTraverse(L);
  183. printf("线性表的长度:%d\n",L.length);
  184. printf("\n");
  185. break;
  186. case '4':
  187. i=ClearList(&L);
  188. printf("清空L后:L.length=%d\n",L.length);
  189. break;
  190. case '5':
  191. printf("你要查找第几个元素? ");
  192. scanf("%d",&pos);
  193. GetElem(L,pos,&e);
  194. printf("第%d个元素的值为:%d\n",pos,e);
  195. break;
  196. case '6':
  197. printf("请输入你要查找的元素:");
  198. scanf("%d",&e);
  199. printf("元素所在位置为:%d\n",LocateElem(L,e));
  200. break;
  201. case '7':
  202. printf("你要删除第几个元素?");
  203. scanf("%d",&pos);
  204. ListDelete(&L,pos,&e);
  205. printf("删除后的线性表为:\n");
  206. ListTraverse(L);
  207. break;
  208. case '0':
  209. exit(0);
  210. }
  211. }
  212. return 0;
  213. }

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

闽ICP备14008679号