算法之有序列表
(一)有序列表的合并算法
1.合并两个有序列表并且按升序排列——顺序表
void MergeList_Sq(SqList LA, SqList LB, SqList &LC) {
pa = LA.elem // 定义两个pa、pb指针指向两个表的第一个元素
pb = LB.elem
LC.length = LA.length + LB.length // 新表长度为带合并两表长度之和
LC.elem = new ElemType[LC.length] // 为合并后的新表分配一个数值空间
pc = LC.elem // 指针pc指向新表的第一个元素
pa_last = LA.elem + LA.length -1 // 指针pa_last指向LA表的最后一个元素
pb_last = LB.elem + LB.length -1 // 指针pb_last指向LA表的最后一个元素
while (pa <= pa_last && pb <= pb_last) { // 在两个表都是非空的情况下
if(*pa <= *pb) *pc++ = *pa++ // 判断较小的那个数值,将其存入LC中
else *pc++ = *pb++
}
while (pa <= pa_last) *pc++ = *pa++ // 当其中一个表为空后,将另一个表剩余元素加入LC中
while (pb <= pb_last) *pc++ = *pa++
}
2.合并两个有序列表并且按升序排列——链表
void MergeList_L(LinkList &La,linkList &Lb, linkList &LC) {
pa = La->next
pb = Lb->next // 创建两个表的指针
pc = Lc = La // 用La的头节点作为L从的头节点
while (pa && pb) { // 在两个表都存在的时候
if(pa->data <= pb->data){ // 判断链表数据域中的大小,将小的链表接入Lc中
pc ->next = pa // 将pa接入Lc的next域,
pc = pa // 移动Lc的指针pc 到 pa指针 指向结点
pa = pa ->next // 取到下一个pa结点
} else {
pc -> next = pb // 类似
pc =pb
pb = pb -> next
}
}
pc ->next = pa? pa:pb // 当某一个表为空后,将另一个表的剩余接入Lc后
delete Lb
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本