数据结构与算法基础–第04周09–2.7线性表的应用2–有序表的合并–用顺序表实现
⚠️ ⭐ ❓ ❗️ ➔
已知线性表 La 和 Lb 中的数据元素按值非递减有序排列,
现要求将 La 和 Lb 归并为一个新的线性表 Lc,且 Lc 中的数据元素扔按值非递减有序排列
(1) 创建一个空表 Lc
(1) 依次从 La 或 Lb 中 “摘取” 元素值较小的结点插入到 Lc 表的最后,直至其中一个表变为空为止
(2) 继续将 La 或 Lb 其中一个表的剩余结点插入在 Lc 表的最后。
示例图1
示例图2
示例图3
void MergeList Sq(SqList LA,SqList LB,SqList &LC){
// 指针pa和pb的初值分别指向两个表的第一个元素
pa=LA.elem;
pb=LB.elem;
// 新表长度为待合并两表的长度之和
LC.length=LA.length+LB.length;
// 为合并后的新表分配一个数组空间
LC.elem=newElemType[LC.length]
// 指针 pc 指向新表的第一个元素
pc=LC.elem;
// 指针pa last指向LA表的最后一个元素
pa last=LA.elem+LA.length-1;
// 指针pb last指向LB表的最后一个元素
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)
// Lb表已到达表尾,将LA中剩余元素加入Lc
*pc++=*pa++;
while(pb<=pb last)
//La表已到达表尾,将LB中剩余元素加入Lc
*pc++=*pb++;
}//MergeList_Sq