当前位置:   article > 正文

[实验一] 顺序表的基本操作_1.顺序表的存储结构定义。 2.创建顺序表,从键盘上依次输入21、18、30、75、42、56

1.顺序表的存储结构定义。 2.创建顺序表,从键盘上依次输入21、18、30、75、42、56

(1) 从键盘上依次输入21、18、30、75、42、55、99、35、40,创建顺序表,并输出顺序表中的各元素值(自己编写)

(2) 分别在顺序表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出顺序表中的各元素值(参考代码)

(3) 查找值为10的元素,找到返回其位序,否则返回0(自己编写)

(4) 查找顺序表中的最大元素值并输出(自己编写)

(5) 对顺序表元素进行就地逆置并输出(自己编写)

(6) 删除顺序表中的第4个数据元素和第7个数据元素,给出删除成功或失败的信息,并输出顺序表中的各元素值(参考代码)

(7) 求顺序表中所有元素的平均值并输出(自己编写)

(8) 先清空顺序表,然后销毁顺序表(自己编写)

思考:如果插入、删除元素的位置是随机输入的,待插入的元素也是随机输入的,程序可以怎么改?

  1. #include<stdio.h>
  2. #include<malloc.h>
  3. #include<stdlib.h>
  4. #define ok 1
  5. #define error 0
  6. typedef struct
  7. {
  8. int a[100];
  9. int length;
  10. }sqlist,*p;
  11. p creatlist();
  12. int ListDelete(p,int);
  13. void ListInsert(p,int,int);
  14. int LocateElem(p,int);
  15. int MAX(p);
  16. void oppsite(p);
  17. void average(p);
  18. void Clearlist(p);
  19. int DestroyList(p);
  20. int main ()
  21. { int e;
  22. int i;
  23. int j;
  24. int i1;
  25. int j3;
  26. p top;
  27. int s;
  28. int j1;
  29. int j2;
  30. top=creatlist();
  31. printf("请输入要在哪个位置插入第一个数(以XX,XX格式输入):");
  32. scanf("%d",&i1);
  33. scanf("%d",&j3);
  34. ListInsert(top, i1, j3);
  35. printf("请输入要在哪个位置插入第二个数(以XX,XX格式输入):");
  36. scanf("%d",&i);
  37. scanf("%d",&j);
  38. ListInsert(top, i, j);
  39. printf("请输入要查找的元素");
  40. scanf("%d",&e);
  41. s=LocateElem(top,e);
  42. if(s!=0)
  43. {printf("查找元素的值位置为:");
  44. printf("%d",s);
  45. }
  46. else
  47. printf("该元素不存在查找失败");
  48. int y=MAX(top);
  49. printf("最大元素为:");
  50. printf("%d\n",y);
  51. oppsite(top);
  52. printf("请输入第一个要删除元素的位置");
  53. scanf("%d",&j1);
  54. int k=ListDelete(top,j1);
  55. if(k)
  56. printf("删除元素成功");
  57. else
  58. printf("删除元素失败");
  59. printf("请输入第二个要删除元素的位置");
  60. scanf("%d",&j2);
  61. int k1=ListDelete(top,j2);
  62. if(k1)
  63. printf("删除元素成功");
  64. else
  65. printf("删除元素失败");
  66. average(top);
  67. Clearlist(top);
  68. DestroyList(top);
  69. }
  70. p creatlist()
  71. {
  72. p d;
  73. int k;
  74. d=(p)(malloc(sizeof(sqlist)));
  75. printf("你想要从键盘上输入几个数");
  76. scanf("%d",&d->length);
  77. if(d->length<=0)
  78. {printf("你输入了负数或者0");
  79. exit(-1);
  80. }
  81. for(k=0;k<d->length;k++)
  82. {
  83. printf("请输入第%d个数,按回车结束: ",k+1);
  84. scanf("%d",&d->a[k]);
  85. }
  86. for(k=0;k<d->length;k++)
  87. {
  88. printf("第%d个数是",k+1);
  89. printf("%d\n",d->a[k]);
  90. }
  91. printf("\n");
  92. return d;
  93. }
  94. void ListInsert(p top,int i,int j)
  95. {
  96. if(top->length<=0)
  97. {
  98. printf("输入失败,长度不够");
  99. exit(-1);
  100. }
  101. if(top->length>=100)
  102. {
  103. printf("插入失败,数目过溢");
  104. exit(-1);
  105. }
  106. if(i>top->length)
  107. {
  108. printf("插入位置大于数组的最大长度");
  109. exit(-1);
  110. }
  111. if(i<0)
  112. {
  113. printf("插入位置有误");
  114. exit(-1);
  115. }
  116. int k;
  117. for(k=top->length-1;k>=i;k--)
  118. top->a[k+1]=top->a[k];
  119. top->a[i]=j;
  120. ++top->length;
  121. for(k=0;k<top->length;k++)
  122. {
  123. printf("输出第%d个数是:",k+1);
  124. printf("%d\n",top->a[k]);
  125. }
  126. printf("输入成功\n");
  127. }
  128. int LocateElem(p top,int e)
  129. {
  130. int t=0;
  131. for(;t<top->length;t++)
  132. if(e==top->a[t])
  133. return t+1;
  134. if(top->length==t)
  135. return error;
  136. }
  137. int MAX(p top)
  138. { int max=top->a[0];
  139. for(int r=1;r<top->length;r++)
  140. if(max<top->a[r])
  141. max=top->a[r];
  142. return max;
  143. }
  144. void oppsite(p top)
  145. {
  146. int b;
  147. for(int k=0;k<(top->length/2);k++)
  148. {b=top->a[k];
  149. top->a[k]=top->a[top->length-1-k];
  150. top->a[top->length-1-k]=b;
  151. }
  152. printf("逆序后的元素为\n");
  153. for(int t=0;t<top->length;t++)
  154. printf("%d\n",top->a[t]);
  155. }
  156. int ListDelete(p top,int i)
  157. {
  158. if(i>top->length||i<1)
  159. {printf("删除位置不对,删除失败");
  160. return error;
  161. exit(-1);
  162. }
  163. else
  164. {
  165. int b;
  166. for(int j=1;j<=top->length;j++)
  167. {
  168. b=top->a[i-1];
  169. if(j==i&&i<top->length)
  170. {
  171. for(;j<top->length;j++)
  172. top->a[j-1]=top->a[j];
  173. --top->length;
  174. printf("删除后的剩余元素是:\n");
  175. for(int j=0;j<top->length;j++)
  176. printf("%d\n",top->a[j]);
  177. return ok;
  178. }
  179. }
  180. }
  181. }
  182. void average(p top)
  183. {
  184. double s=0;
  185. for(int j=0;j<top->length;j++)
  186. //printf("%d",top->a[j]);
  187. s+=top->a[j];
  188. printf("%lf",s);
  189. double b=s/10;
  190. printf("顺序表中所有元素的平均数是:");
  191. printf("%lf\n",b);
  192. }
  193. void Clearlist(p top)
  194. {
  195. for(int i=0;i<top->length;i++)
  196. top->a[i]=NULL;
  197. printf("清除顺序表元素成功");
  198. }
  199. int DestroyList(p top)
  200. {
  201. free(top); /*释放malloc(或calloc、realloc)函数给指针变量分配的内存空间的函数,使用后该指针变量一定要重新指向NULL,防止野指针出现,有效 规避误操作。
  202. */
  203. printf("\n");
  204. printf("该线性表已经被销毁");
  205. exit(-1);
  206. return error;
  207. }

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

闽ICP备14008679号