热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

线性表的顺序存储与合并操作

本文介绍了如何将两个线性表LA和LB合并为一个线性表LA,并确保LA包含所有唯一元素。此外,还详细讲解了有序线性表的合并方法,确保合并后的线性表LC中的元素按非递减顺序排列。

1、线性表的合并

  假设集合A和集合B分别用两个线性表LA和LB表示,目标是求A∪B并将结果存储在LA中。具体步骤是从LB中逐一取出元素,检查该元素是否已存在于LA中,如果不存在,则将其插入LA中。

void CombineLinearLists(SqList &La, SqList &Lb) {
int i, j;
for (i = 0; i int count = 0;
for (j = 0; j if (La.elem[j] == Lb.elem[i]) count++;
}
if (count == 0) La.elem[La.length++] = Lb.elem[i];
}
}

2、有序线性表的合并

  已知线性表LA和LB中的元素分别按非递减顺序排列,目标是将它们合并成一个新的线性表LC,使LC中的元素也按非递减顺序排列。初始时,LC为空。通过依次扫描LA和LB中的元素,比较当前元素的值,将较小的元素插入LC的末尾,直至一个线性表扫描完毕,然后将另一个线性表中剩余的元素依次插入LC的末尾。

// 有序线性表的合并,前提是两个线性表已按非递减顺序排序
void MergeSortedLists(SqList &LA, SqList &LB, SqList &LC) {
// LA和LB是按非递减顺序排序的
LC.length = LA.length + LB.length;
LC.elem = new ElemType[LC.length];
// 分配空间
ElemType *pa = LA.elem, *pb = LB.elem, *pc = LC.elem;
ElemType *pa_last = LA.elem + LA.length - 1, *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) *pc++ = *pa++;
while (pb <= pb_last) *pc++ = *pb++;
}


推荐阅读
author-avatar
忧之灵_435
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有