线性表的合并和有序表的合并
线性表的合并
- 问题描述:
假设利用两个线性表La和Lb分别表示两个集合A和B,现要求一个新的集合A = A∪B
La = (7, 5, 3, 11) Lb = (2, 6, 3) ➡ La = (7, 5, 3, 11, 2, 6)
- 算法步骤:
依次取出Lb中的每个元素,执行以下操作:
- 在La中查找该元素
- 如果找不到,则将其插入La的最后
void union(List &La, List Lb){
La_len = ListLength(La); //求La的长度
La_len = ListLength(Lb); //求Lb的长度
for(i = 1; i <= Lb_len; i++){ //依次取出Lb中的元素
GetElem(Lb, i, e);
if(!LocateElem(La, e)) //如果元素e不存在La中
ListInsert(&La, La_len++, e); //则将其插入La的最后
}
}
//算法的时间复杂度是:O(ListLength(La) * ListLength(Lb))
有序表的合并
用顺序表实现有序表的合并
- 已知线性表La和Lb中的数据元素按值非递减有序排列,现要求将La和Lb归并为一个新的线性表Lc,且Lc中的数据元素仍按值非递减有序排列:
La =(1, 7, 8) Lb = (2, 4, 6, 8, 10, 11) ➡ Lc = (1, 2, 4, 6, 7, 8, 8, 10, 1

本文详细介绍了线性表的合并与有序表的合并算法,包括使用顺序表和链表两种实现方式。线性表的合并通过遍历元素插入实现,时间复杂度为O(n*m),而有序表的合并通过比较元素大小合并,时间复杂度为O(n+m)。顺序表实现时直接遍历并合并,链表实现则通过三指针操作高效合并。
最低0.47元/天 解锁文章
3140

被折叠的 条评论
为什么被折叠?



