已知A、B和C为3个元素递增有序的顺序表,且同一个表中元素值各不相同,下列算法对A做如下操作:删除那些既在表B又在表C中出现的元素。请将该算法补充完整。 typedef struct { ElemType *list; int size; intMaxSize; }SeqList; void deletesame(SeqList&A, SeqList B, SeqList C) { inti=0, j=0, k=0, m; ElemType same; while (i<A.size&& j<B.size&& k<C.size) { if (C.list[k] <B.list[j]) k++; else if (C.list[k] >B.list[j]) j++; else { same=B.list[j]; while (i<A.size&&A.list[i]<same) i++; if (i<A.size&&A.list[i]==same) { m=i+1; while (m<A.size) { ________________ } A.size--; } } } } A. A.list[m++]=A.list[j++]; B. A.list[m-1]=A.list[m]; m++; C. A.list[m]=A.list[m-1]; m++; D. A.list[m++]=A.list[k++];
时间: 2023-06-24 10:03:32 浏览: 209
数据结构与算法c++实现 两个顺序表的元素严格单调递增,将其共同元素保存到新顺序表中,且为递增排序
5星 · 资源好评率100%
答案:D. A.list[m++]=A.list[k++];
解析:在找到B和C中相同元素的位置后,我们需要在A中找到该元素的位置,并将其删除。我们可以用变量i记录A中的位置,然后从i开始遍历A,将后面的元素往前移动一位,最后将A的size减1。在遍历A时,如果遇到了与同一个相同元素相等的元素,我们也需要将其删除,因此需要在内部再使用一个变量m来记录需要删除的元素的位置,再将后面的元素往前移动一位。而对于B和C中没有相同元素的情况,我们只需要将B和C中较小的元素的下标加1即可。因此,正确的选项是D. A.list[m++]=A.list[k++];
阅读全文