【算法】线性表的合并
问题描述:假设利用两个线性表La和Lb分别表示两个集合A和B,现要求一个新的集合A=AUB(若两个集合有重复元素,只取一次)
La=(7, 5, 3, 11) Lb=(2, 6, 3) → 修改La=(7, 5, 3, 11, 2, 6)
算法步骤:
代码实现:
void union(List &La, List Lb) {
La_len = ListLength(La);
Lb_len = ListLength(Lb);
for(i = 1 ;i <= Lb_len;i++) { //将表Lb循环一遍
GetElem(Lb, i ,e); //从表Lb中取出i位元素,用e返回
if(!GetElem(La, e)) //如果表La中没有e元素
ListInsert(&La, ++La_length,e); //在La末尾插入e
}
}
时间复杂度:O(ListLength(La)*ListLength(Lb))
【算法】有序表的合并
问题描述:已知线性表La和Lb中的数据元素按值非递减有序排列,现要求将La和Lb归并为一个新线性表Lc,且Lc中的数据元素仍按值非递减有序排列
La=(1,7,8) Lb=(2,4,6,8,8,10,11) → Lc=(1,2,4,6,7,8,8,8,10,11)
算法步骤: