📄 algo0221.cpp
字号:
Status MergeList_L(NLinkList &La, NLinkList &Lb, NLinkList &Lc,
int (*compare)(ElemType, ElemType)) { // 算法2.21
// 已知单链线性表La和Lb的元素按值非递减排列。
// 归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列。
NLink ha, hb;
Position pa, pb, q;
ElemType a, b;
if (!InitList(Lc)) return ERROR; // 存储空间分配失败
ha = GetHead(La); // ha和hb分别指向La和Lb的头结点
hb = GetHead(Lb);
pa = NextPos(La, ha); // pa和pb分别指向La和Lb中当前结点
pb = NextPos(Lb, hb);
while (pa && pb) { // La和Lb均非空
a = GetCurElem(pa); // a和b为两表中当前比较元素
b = GetCurElem(pb);
if ((*compare)(a, b)<=0) { // a≤b
DelFirst(ha, q); Append(Lc, q); pa = NextPos(La, pa);
} else { // a>b
DelFirst(hb, q); Append(Lc, q); pb = NextPos(Lb, pb);
}
} // while
if (pa) Append(Lc, pa); // 链接La中剩余结点
else Append(Lc, pb); // 链接Lb中剩余结点
FreeNode(ha); FreeNode(hb); // 释放La和Lb的头结点
return OK;
} // MergeList_L
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -