1、线性表的合并
假设集合A和集合B分别用两个线性表LA和LB表示,目标是求A∪B并将结果存储在LA中。具体步骤是从LB中逐一取出元素,检查该元素是否已存在于LA中,如果不存在,则将其插入LA中。
void CombineLinearLists(SqList &La, SqList &Lb) {
int i, j;
for (i = 0; i
for (j = 0; j
}
if (count == 0) La.elem[La.length++] = Lb.elem[i];
}
}
2、有序线性表的合并
已知线性表LA和LB中的元素分别按非递减顺序排列,目标是将它们合并成一个新的线性表LC,使LC中的元素也按非递减顺序排列。初始时,LC为空。通过依次扫描LA和LB中的元素,比较当前元素的值,将较小的元素插入LC的末尾,直至一个线性表扫描完毕,然后将另一个线性表中剩余的元素依次插入LC的末尾。
// 有序线性表的合并,前提是两个线性表已按非递减顺序排序
void MergeSortedLists(SqList &LA, SqList &LB, SqList &LC) {
// LA和LB是按非递减顺序排序的
LC.length = LA.length + LB.length;
LC.elem = new ElemType[LC.length];
// 分配空间
ElemType *pa = LA.elem, *pb = LB.elem, *pc = LC.elem;
ElemType *pa_last = LA.elem + LA.length - 1, *pb_last = LB.elem + LB.length - 1;
while (pa <= pa_last && pb <= pb_last) {
if (*pa <= *pb) *pc++ = *pa++;
else *pc++ = *pb++;
}
while (pa <= pa_last) *pc++ = *pa++;
while (pb <= pb_last) *pc++ = *pb++;
}