当前位置:   article > 正文

C++顺序表操作_已知顺序表l为按值递增有序的,编写算法将数据元素e插入到顺序表l中,使之仍有

已知顺序表l为按值递增有序的,编写算法将数据元素e插入到顺序表l中,使之仍有

题目:

已知顺序表L为按值递增有序的,编写算法将数据元素e插入到顺序表L中,使之仍有序。
2、已知顺序表L为按值递增有序的,设计算法清除顺序表中多余重复元素,注意其删除位置之后的元素如何移动。

3、顺序表LA和顺序表LB中的元素值无序,求出LA和LB的并集,结果存储在顺序表LC中。

4、顺序表LA和顺序表LB中的元素值无序,求出LA和LB的交集,结果存储在顺序表LC中。

5、顺序表LA和顺序表LB中的元素值无序,求出LA和LB的差集,结果存储在顺序表LC中。

实现代码:

  1. #include<iostream>
  2. using namespace std;
  3. #define MaxSize 50
  4. #define AX 18
  5. #define A1 5
  6. #define B1 5
  7. typedef int ElemType;//将ElemType定为int类型
  8. int main()
  9. {
  10. typedef struct
  11. {
  12. ElemType data[MaxSize];//存放线表中的元素
  13. int length;//存放线表的长度
  14. }SqList;//顺序表类型
  15. //建立线表
  16. int a[AX] = { 1,2,3,4,5,5,7,8,9,10,11,12,13,14,15,16,17,18 };
  17. int n = 0;//由a中的n个元素建立顺序表
  18. int i = 0, k = 0;//k表示L中元素的个数,初始值为0
  19. while (a[i] != NULL)
  20. {
  21. i++;
  22. }
  23. //printf("%d", n / 2);
  24. SqList* L = (SqList*)malloc(sizeof(SqList));//分配存放线表的空间
  25. i = 0;
  26. while (i < AX)//i 扫描数组a的元素
  27. {
  28. L->data[k] = a[i];//将元素a[i]存放到L中
  29. k++;
  30. i++;
  31. }
  32. L->length = k; //设置L的长度
  33. //删除重复数据元素
  34. int h = 0, w = 0, q = 0, count2 = 0;
  35. for (h = 0; h < L->length; h++)
  36. {
  37. ElemType u = L->data[h];
  38. for (w = h + 1; w < L->length; w++)
  39. {
  40. if (u == L->data[w])
  41. {
  42. count2++;
  43. for (q = h + 1; q < L->length; q++)
  44. {
  45. L->data[q] = L->data[q + 1];
  46. }
  47. L->length = L->length - count2;
  48. }
  49. }
  50. }
  51. for ( int d = 0; d < L->length; d++)
  52. {
  53. printf(" %d ", L->data[d]);
  54. }
  55. printf("\n");
  56. //插入数据元素
  57. ElemType e;
  58. cout << "请输入需要插入的一个值:";
  59. cin >> e;//输入插入的值
  60. int j;
  61. int count_1 = 0;
  62. //SqList* L = (SqList*)malloc(sizeof(SqList));
  63. while (L->data[count_1] < e)
  64. {
  65. count_1++;
  66. }
  67. for (j = L->length; j >count_1; j--)
  68. {
  69. L->data[j] = L->data[j - 1];
  70. }
  71. L->data[count_1] = e;
  72. L->length++;
  73. for ( d = 0; d < L->length; d++)
  74. {
  75. printf(" %d ", L->data[d]);
  76. }
  77. printf("\n");
  78. //并集
  79. ElemType A[A1] = { 1,4,2,6,8 };
  80. ElemType B[B1] = { 2,5,9,6,8};
  81. SqList LA, LB, LC;
  82. int ii = 0;
  83. ii = 0; int kk = 0;
  84. while (ii < A1)//i 扫描数组a的元素
  85. {
  86. LA.data[kk] = A[ii];//将元素a[i]存放到L中
  87. kk++;
  88. ii++;
  89. }
  90. LA.length = kk; //设置L的长度
  91. ii = 0; kk = 0;
  92. while (ii < B1)//i 扫描数组a的元素
  93. {
  94. LB.data[kk] = B[ii];//将元素a[i]存放到L中
  95. kk++;
  96. ii++;
  97. }
  98. LB.length = kk; //设置L的长度
  99. int z;
  100. for (z = 0; z < LA.length; z++)
  101. {
  102. LC.data[z] = LA.data[z];
  103. }
  104. LC.length = LA.length;
  105. int count = 0;
  106. for (z = 0; z < LB.length; z++)
  107. {
  108. int signb = 1;
  109. for (int u = 0; u < LC.length + count; u++)
  110. {
  111. if (LB.data[z] == LC.data[u])
  112. {
  113. signb = 0;
  114. }
  115. }
  116. if (signb == 1)
  117. {
  118. LC.data[LC.length + count] = LB.data[z];
  119. count++;
  120. }
  121. }
  122. printf("并集:");
  123. for ( d = 0; d < LC.length + count; d++)
  124. {
  125. printf(" %d ", LC.data[d]);
  126. }
  127. printf("\n");
  128. //差集
  129. int iii = 0;
  130. iii = 0; int kkk = 0;
  131. while (iii < A1)//i 扫描数组a的元素
  132. {
  133. LA.data[kkk] = A[iii];//将元素a[i]存放到L中
  134. kkk++;
  135. iii++;
  136. }
  137. LA.length = kkk; //设置L的长度
  138. //printf("%d", k);
  139. iii = 0; kkk = 0;
  140. while (iii < B1)//i 扫描数组a的元素
  141. {
  142. LB.data[kkk] = B[iii];//将元素a[i]存放到L中
  143. kkk++;
  144. iii++;
  145. }
  146. LB.length = kkk; //设置L的长度
  147. //SqList* L = (SqList*)malloc(sizeof(SqList));
  148. int sign2 = 0;
  149. for (z = 0; z < LA.length; z++)
  150. {
  151. int sign1 = 1;
  152. for (int c = 0; c < LB.length; c++)
  153. {
  154. if (LB.data[c] == LA.data[z])
  155. {
  156. sign1 = 0;
  157. break;
  158. }
  159. }
  160. if (sign1 == 1)
  161. {
  162. LC.data[sign2] = LA.data[z];
  163. sign2++;
  164. }
  165. LC.length = sign2;
  166. }
  167. printf("A-B的差集:");
  168. for ( d = 0; d < LC.length; d++)
  169. {
  170. printf(" %d ", LC.data[d]);
  171. }
  172. printf("\n");
  173. int sign3 = 0;
  174. for (z = 0; z < LB.length; z++)
  175. {
  176. int sign1 = 1;
  177. for (int c = 0; c < LA.length; c++)
  178. {
  179. if (LA.data[c] == LB.data[z])
  180. {
  181. sign1 = 0;
  182. break;
  183. }
  184. }
  185. if (sign1 == 1)
  186. {
  187. LC.data[sign3] = LB.data[z];
  188. sign2++;
  189. sign3++;
  190. }
  191. }
  192. LC.length =sign3;
  193. printf("B-A的差集:");
  194. for ( d = 0; d < LC.length; d++)
  195. {
  196. printf(" %d ", LC.data[d]);
  197. }
  198. printf("\n");
  199. //交集
  200. int iiii = 0; int kkkk = 0;
  201. while (iiii < A1)//i 扫描数组a的元素
  202. {
  203. LA.data[kkkk] = A[iiii];//将元素a[i]存放到L中
  204. kkkk++;
  205. iiii++;
  206. }
  207. LA.length = kkkk; //设置L的长度
  208. //printf("%d", k);
  209. iiii = 0; kkkk = 0;
  210. while (iiii < B1)//i 扫描数组a的元素
  211. {
  212. LB.data[kkkk] = B[iiii];//将元素a[i]存放到L中
  213. kkkk++;
  214. iiii++;
  215. }
  216. LB.length = kkkk; //设置L的长度
  217. int bsign2 = 0;
  218. for (z = 0; z < LA.length; z++)
  219. {
  220. int sign1 = 1;
  221. for (int c = 0; c < LB.length; c++)
  222. {
  223. if (LA.data[z] == LB.data[c])
  224. {
  225. sign1 = 0;
  226. break;
  227. }
  228. }
  229. if (sign1 == 0)
  230. {
  231. LC.data[bsign2] = LA.data[z];
  232. bsign2++;
  233. }
  234. LC.length = bsign2 ;
  235. }
  236. printf("交集:");
  237. for ( d = 0; d < LC.length; d++)
  238. {
  239. printf(" %d ", LC.data[d]);
  240. }
  241. printf("\n");
  242. free(L);
  243. return 0;
  244. }

 

 

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

闽ICP备14008679号