当前位置:   article > 正文

顺序表的基本操作_问题 a: 顺序表的输出

问题 a: 顺序表的输出

一、实验目的:

1、复习C语言程序设计中的知识。

2、掌握线性表的顺序存储结构的表示和实现方法。

3、掌握顺序表基本操作的算法实现。

二、实验内容:

1.建立顺序表。

2.在顺序表上实现插入、删除和查找等操作。

三、实验要求:

1、编写实现顺序表的基本算法(初始化、查找、插入、删除等)的函数,并在此基础上设计一个主程序完成如下功能:

⑴初始化一个顺序表L,数据元素类型可任选;

⑵建立顺序表L,要求数据元素至少10个;

⑶输出顺序表L的长度;

⑷按位置查找:输出顺序表L的第i个元素,如第3个元素;

⑸按内容查找:输出给定元素的位置;

⑹在第i个元素前插入给定元素;

⑺删除顺序表L的第i个元素;

遍历顺序表,将表中的元素按序输出。

编写菜单,以便用户可以选择相应的操作。

  1. 拓展实验(可选做)

 利用顺序表的基本操作,求两个集合A和B的交集、并集和差集。

  • 实验步骤:

  #include "stdio.h"

 #include "stdlib.h"

 #include "malloc.h"

 #define msize  100

 #define elemtype  int

 typedef struct

 {elemtype elem[msize];

 int last;

 }seqlist;

 1.顺序表的初始化

 seqlist *init_seqlist()

 {seqlist *L;

 L=(seqlist *)malloc(sizeof(seqlist));

 if(L!=NULL)

 {L->last=-1;

 printf("初始化成功\n");

 }

 return L;

 }

 2.建立顺序表输入顺序表元素

 seqlist  *indata_seqlist (seqlist *L )

 {elemtype m;

 scanf("%d",&m);

 while (m!=0)

 {L->last+=1;//访问Last

 L->elem[L->last]=m;

 scanf("%d",&m);

 }

 return L;

 }

 3.获取顺序表元素

 elemtype Getdata_seqlist (seqlist *L,int i)

 {if(i<1||i>L->last+1)

 {return 0;

 }

 else

 return (L->elem[i-1]);

 }

 

 4.输出顺序表的长度

 int seqlist_Long (seqlist *L )

 {printf("该顺序表的长度为%d\n",L->last+1);

 return 0;

 }

5. 查找给定元素的位置

 int search_seqlist_1 (seqlist *L,elemtype key)//查找给定元素的位置

 {int i;

 for(i=0;i<=L->last;i++)

 {if(L->elem[i]==key)

 {printf("给定元素的位置为%d\n",i+1);

 return (i+1);}}

 if(key!=L->elem[i]&&i==L->last)

 printf("无此元素\n");

 return 0;

 }

6.按位置查找对应元素

 elemtype  search_seqlist_2 (seqlist *L,elemtype key )//按位置查找对应元素

 {int i;

 if(key<=0||key>(L->last))

 {printf("输入错误,查找失败\n");

 }

 for(i=0;i<L->last;i++)

 {if(i+1==key)

 printf("对应元素的值为%d\n",L->elem[i]);}

 return (L->elem[i]);

 }

 

  7. 遍历顺序表

  

 int print_seqlist(seqlist *L)

 {int i;elemtype t;

 if(L->last==-1)

 {return 0;

 }int j;

 printf("顺序表的所有元素为\n");

 for(i=0;i<=L->last;i++)

 {

 printf("a[%d]=%d\t",i,L->elem[i]);}

 return 1;

 }

 

 

8.在顺序表中插入元素

 int insert_seqlist(seqlist *L,int i,elemtype x )

 {int j;

 if(L->last>=msize-1)

 {printf("表已满无法插入\n");

 return 0;

 }

 if((i<1)||(i>L->last+2))

 {printf("插入位置不合理\n");

 return -1;

 }

 for(j=L->last;j>=i-1;j--)

 L->elem[j+1]=L->elem[j];

 L->elem[i-1]=x;

 L->last++;

 print_seqlist(L);

 return 1;

 }

 9.删除顺序表元素

 int Delete_seqlist(seqlist *L,int i,elemtype *w)

 {int k;

 if((i<1)||(i>L->last+1))

 {printf("删除位置不合理\n");

 return 0;

 }

 else

 {*w=L->elem[i-1];

 for(k=i-1;k<L->last;k++)

 {L->elem[k]=L->elem[k+1];

 }

 }

 L->last--;

 print_seqlist(L);

 return 1;}

10菜单

 void menu()

 {int a;

 printf("\n************ 欢迎使用顺序表的基本操作系统 ************\n");

printf("\n************ 1 初始化顺序表L ************\n");

printf("\n************ 2 建立顺序表L ************\n");

printf("\n************ 3 输出顺序表L的长度 ************\n");

printf("\n************ 4 按位置查找输出顺序表L的第i个元素 ************\n");

printf("\n************ 5 按内容查找输出给定元素的位置 ************\n");

printf("\n************ 6 在第i个元素前插入给定元素 ************\n");

printf("\n************ 7 删除顺序表的第i个元素 ************\n");

printf("\n************ 8 输出顺序表的所有元素 ************\n");

printf("\n************ 9 退出系统 ************\n");

printf("\n************ 10 清理屏幕 返回菜单 ************\n");

printf("\n************ 11 求集合AUB ************\n");

printf("\n************ 12 求集合AnB ************\n");

printf("请选择1-12:");}

11.求两个集合A和B的交集

 void  union_seqlist(seqlist *L1,seqlist *L2 )

{int i,len,k;

elemtype x;

len=seqlist_Long(L1);

for(i=1;i<=L2->last+1;i++)

{x=Getdata_seqlist (L2,i);

k=search_seqlist_1 (L1,x);

if(k==0)

{insert_seqlist(L1,len+1,x);

len=seqlist_Long(L1);

}}}

12.求两个集合A和B的

void  union_seqlist_2(seqlist *L1,seqlist *L2 )

{int i,len,k;

elemtype x;

len=seqlist_Long(L1);

for(i=1;i<=L2->last+1;i++)

{x=Getdata_seqlist (L2,i);

k=search_seqlist_1 (L1,x);

if(k!=0)

{insert_seqlist(L1,len+1,x);

len=seqlist_Long(L1);

}}}

int main()

{menu();seqlist *L;seqlist *L1;seqlist*L2;int a;

while(1)

{

int t;scanf("%d",&t);

if(t<1||t>12)

{printf("输入错误,请重新输入:\n");

scanf("%d",&t);}

switch(t)

{case 1:{L=init_seqlist();

break;}

case 2:{

printf("请输入元素,按0结束输入\n");

L=indata_seqlist(L);

printf("该操作完成,请继续输入下一步指令\n");

break;}

case 3:{

a=seqlist_Long (L);

printf("该操作完成,请继续输入下一步指令\n");

break;}

case 5:{

int m;

  printf("请输入待查找元素值\n");

  scanf("%d",&m);

  search_seqlist_1(L,m);

  printf("该操作完成,请继续输入下一步指令\n");break;}

case 4:

{printf("输入待查找元素位置\n");

 int d;

  scanf("%d",&d);

search_seqlist_2 (L,d);

printf("该操作完成,请继续输入下一步指令\n");break;

}

case 6:{printf("输入待插入元素位置\n");

int o;

 scanf("%d",&o);

 printf("输入待插入元素\n");

int u;

 scanf("%d",&u);

 insert_seqlist(L,o,u);

 printf("插入成功\n");

 printf("该操作完成,请继续输入下一步指令\n");

break;

}

case 7:{printf("输入待删除元素位置\n");

int y;int h;

 scanf("%d",&y);

 Delete_seqlist(L,y,&h);

 printf("删除成功\n");

 printf("该操作完成,请继续输入下一步指令\n");

break;

}

case 8:{print_seqlist(L);

printf("该操作完成,请继续输入下一步指令\n");break;}

case 9:{exit(0);break;}

case 10:{system("cls");menu();

printf("该操作完成,请继续输入下一步指令\n");break;}

case 11:{

printf("请输入顺序表A中数据元素以0结束:\n");

L1=init_seqlist();

L1=indata_seqlist(L1);

printf("请输入顺序表B中数据元素以0结束:\n");

L2=init_seqlist();

L2=indata_seqlist(L2);

union_seqlist(L1,L2);

printf("AUB=");

print_seqlist(L1);

printf("该操作完成,请继续输入下一步指令\n");

break;}

case 12:{

printf("请输入顺序表A中数据元素以0结束:\n");

L1=init_seqlist();

L1=indata_seqlist(L1);

printf("请输入顺序表B中数据元素以0结束:\n");

L2=init_seqlist();

L2=indata_seqlist(L2);

union_seqlist_2(L1,L2);

printf("AnB=");

print_seqlist(L1);

printf("该操作完成,请继续输入下一步指令\n");

break;

}

default:{printf("输入错误,请重新输入\n");

printf("请选择1-12:");break;}

  } }}

 

  • 实验结果:

1菜单如下:

2输入数据删除查找遍历结果如下:

 

3.求AUB结果如下

4.求AnB结果如下

  1. 七、附(源代码)
  2. #include "stdio.h"
  3. #include "stdlib.h"
  4. #include "malloc.h"
  5. #define msize 100
  6. #define elemtype int
  7. typedef struct
  8. {elemtype elem[msize];
  9. int last;
  10. }seqlist;
  11. seqlist *init_seqlist()
  12. {seqlist *L;
  13. L=(seqlist *)malloc(sizeof(seqlist));
  14. if(L!=NULL)
  15. {L->last=-1;
  16. printf("初始化成功\n");
  17. }
  18. return L;
  19. }
  20. seqlist *indata_seqlist (seqlist *L )
  21. {elemtype m;
  22. scanf("%d",&m);
  23. while (m!=0)
  24. {L->last+=1;//访问Last
  25. L->elem[L->last]=m;
  26. scanf("%d",&m);
  27. }
  28. return L;
  29. }
  30. elemtype Getdata_seqlist (seqlist *L,int i)
  31. {if(i<1||i>L->last+1)
  32. {return 0;
  33. }
  34. else
  35. return (L->elem[i-1]);
  36. }
  37. int seqlist_Long (seqlist *L )
  38. {printf("该顺序表的长度为%d\n",L->last+1);
  39. return 0;
  40. }
  41. int search_seqlist_1 (seqlist *L,elemtype key)//查找给定元素的位置
  42. {int i;
  43. for(i=0;i<=L->last;i++)
  44. {if(L->elem[i]==key)
  45. {printf("给定元素的位置为%d\n",i+1);
  46. return (i+1);}}
  47. if(key!=L->elem[i]&&i==L->last)
  48. printf("无此元素\n");
  49. return 0;
  50. }
  51. elemtype search_seqlist_2 (seqlist *L,elemtype key )//按位置查找对应元素
  52. {int i;
  53. if(key<=0||key>(L->last))
  54. {printf("输入错误,查找失败\n");
  55. }
  56. for(i=0;i<L->last;i++)
  57. {if(i+1==key)
  58. printf("对应元素的值为%d\n",L->elem[i]);}
  59. return (L->elem[i]);
  60. }
  61. int print_seqlist(seqlist *L)
  62. {int i;elemtype t;
  63. if(L->last==-1)
  64. {return 0;
  65. }int j;
  66. printf("顺序表的所有元素为\n");
  67. for(i=0;i<=L->last;i++)
  68. {
  69. printf("a[%d]=%d\t",i,L->elem[i]);}
  70. return 1;
  71. }
  72. int insert_seqlist(seqlist *L,int i,elemtype x )
  73. {int j;
  74. if(L->last>=msize-1)
  75. {printf("表已满无法插入\n");
  76. return 0;
  77. }
  78. if((i<1)||(i>L->last+2))
  79. {printf("插入位置不合理\n");
  80. return -1;
  81. }
  82. for(j=L->last;j>=i-1;j--)
  83. L->elem[j+1]=L->elem[j];
  84. L->elem[i-1]=x;
  85. L->last++;
  86. print_seqlist(L);
  87. return 1;
  88. }
  89. int Delete_seqlist(seqlist *L,int i,elemtype *w)
  90. {int k;
  91. if((i<1)||(i>L->last+1))
  92. {printf("删除位置不合理\n");
  93. return 0;
  94. }
  95. else
  96. {*w=L->elem[i-1];
  97. for(k=i-1;k<L->last;k++)
  98. {L->elem[k]=L->elem[k+1];
  99. }
  100. }
  101. L->last--;
  102. print_seqlist(L);
  103. return 1;}
  104. void menu()
  105. {int a;
  106. printf("\n************ 欢迎使用顺序表的基本操作系统 ************\n");
  107. printf("\n************ 1 初始化顺序表L ************\n");
  108. printf("\n************ 2 建立顺序表L ************\n");
  109. printf("\n************ 3 输出顺序表L的长度 ************\n");
  110. printf("\n************ 4 按位置查找输出顺序表L的第i个元素 ************\n");
  111. printf("\n************ 5 按内容查找输出给定元素的位置 ************\n");
  112. printf("\n************ 6 在第i个元素前插入给定元素 ************\n");
  113. printf("\n************ 7 删除顺序表的第i个元素 ************\n");
  114. printf("\n************ 8 输出顺序表的所有元素 ************\n");
  115. printf("\n************ 9 退出系统 ************\n");
  116. printf("\n************ 10 清理屏幕 返回菜单 ************\n");
  117. printf("\n************ 11 求集合AUB ************\n");
  118. printf("\n************ 12 求集合AnB ************\n");
  119. printf("请选择1-12:");}
  120. void union_seqlist(seqlist *L1,seqlist *L2 )
  121. {int i,len,k;
  122. elemtype x;
  123. len=seqlist_Long(L1);
  124. for(i=1;i<=L2->last+1;i++)
  125. {x=Getdata_seqlist (L2,i);
  126. k=search_seqlist_1 (L1,x);
  127. if(k==0)
  128. {insert_seqlist(L1,len+1,x);
  129. len=seqlist_Long(L1);
  130. }}}
  131. void union_seqlist_2(seqlist *L1,seqlist *L2 )
  132. {int i,len,k;
  133. elemtype x;
  134. len=seqlist_Long(L1);
  135. for(i=1;i<=L2->last+1;i++)
  136. {x=Getdata_seqlist (L2,i);
  137. k=search_seqlist_1 (L1,x);
  138. if(k!=0)
  139. {insert_seqlist(L1,len+1,x);
  140. len=seqlist_Long(L1);
  141. }}}
  142. int main()
  143. {menu();seqlist *L;seqlist *L1;seqlist*L2;int a;
  144. while(1)
  145. {
  146. int t;scanf("%d",&t);
  147. if(t<1||t>12)
  148. {printf("输入错误,请重新输入:\n");
  149. scanf("%d",&t);}
  150. switch(t)
  151. {case 1:{L=init_seqlist();
  152. break;}
  153. case 2:{
  154. printf("请输入元素,按0结束输入\n");
  155. L=indata_seqlist(L);
  156. printf("该操作完成,请继续输入下一步指令\n");
  157. break;}
  158. case 3:{
  159. a=seqlist_Long (L);
  160. printf("该操作完成,请继续输入下一步指令\n");
  161. break;}
  162. case 5:{
  163. int m;
  164. printf("请输入待查找元素值\n");
  165. scanf("%d",&m);
  166. search_seqlist_1(L,m);
  167. printf("该操作完成,请继续输入下一步指令\n");break;}
  168. case 4:
  169. {printf("输入待查找元素位置\n");
  170. int d;
  171. scanf("%d",&d);
  172. search_seqlist_2 (L,d);
  173. printf("该操作完成,请继续输入下一步指令\n");break;
  174. }
  175. case 6:{printf("输入待插入元素位置\n");
  176. int o;
  177. scanf("%d",&o);
  178. printf("输入待插入元素\n");
  179. int u;
  180. scanf("%d",&u);
  181. insert_seqlist(L,o,u);
  182. printf("插入成功\n");
  183. printf("该操作完成,请继续输入下一步指令\n");
  184. break;
  185. }
  186. case 7:{printf("输入待删除元素位置\n");
  187. int y;int h;
  188. scanf("%d",&y);
  189. Delete_seqlist(L,y,&h);
  190. printf("删除成功\n");
  191. printf("该操作完成,请继续输入下一步指令\n");
  192. break;
  193. }
  194. case 8:{print_seqlist(L);
  195. printf("该操作完成,请继续输入下一步指令\n");break;}
  196. case 9:{exit(0);break;}
  197. case 10:{system("cls");menu();
  198. printf("该操作完成,请继续输入下一步指令\n");break;}
  199. case 11:{
  200. printf("请输入顺序表A中数据元素以0结束:\n");
  201. L1=init_seqlist();
  202. L1=indata_seqlist(L1);
  203. printf("请输入顺序表B中数据元素以0结束:\n");
  204. L2=init_seqlist();
  205. L2=indata_seqlist(L2);
  206. union_seqlist(L1,L2);
  207. printf("AUB=");
  208. print_seqlist(L1);
  209. printf("该操作完成,请继续输入下一步指令\n");
  210. break;}
  211. case 12:{
  212. printf("请输入顺序表A中数据元素以0结束:\n");
  213. L1=init_seqlist();
  214. L1=indata_seqlist(L1);
  215. printf("请输入顺序表B中数据元素以0结束:\n");
  216. L2=init_seqlist();
  217. L2=indata_seqlist(L2);
  218. union_seqlist_2(L1,L2);
  219. printf("AnB=");
  220. print_seqlist(L1);
  221. printf("该操作完成,请继续输入下一步指令\n");
  222. break;
  223. }
  224. default:{printf("输入错误,请重新输入\n");
  225. printf("请选择1-12:");break;}
  226. } }}

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

闽ICP备14008679号