单链表ADT模板简单应用算法设计:有序单链表的归并(提纯)

问题描述

目的:使用C++模板设计单链表的抽象数据类型(ADT)。并在此基础上,使用单链表ADT的基本操作,设计并实现单链表的简单算法设计。

内容:(1)请使用模板设计单链表的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考网盘中的ADT原型文件。)

(2)ADT的简单应用:使用该ADT设计并实现单链表应用场合的一些简单算法设计。

应用:假设线性表 A和B,分别由单链表 La和Lb 存储,其中数据元素为整数,按值非递减有序排列(即已经有序),现要求设计一个算法,将A和B归并为一个线性表 , 其数据元素仍按值非递减排列。如果两个表中存在相等的元素,则只保留A中的元素,删除B中对应的元素,以确保合并后的表中无重复的元素。要求使用A和B的原存储空间,且B不再单独存在。输入中的单链表的长度不得在归并算法中利用,仅作为建表使用。(本质:求A和B的交集)

参考函数原型:

template<class ElemType>
void Merge_L_Order( LinkList<ElemType> &A, LinkList<ElemType> &B );

输入说明

第一行:单链表A的长度

第二行:单链表A的数据元素(数据元素之间以空格分隔)

第三行:单链表B的长度

第四行:单链表B的数据元素(数据元素之间以空格分隔)

输出说明

第一行:单链表A的遍历结果

第二行:单链表B的遍历结果

第三行:归并后单链表A的遍历结果

输入范例

4
3 5 8 11
5
2 6 8 9 11

输出范例

3 5 8 11 
2 6 8 9 11 

2 3 5 6 8 9 11 

思路分析

  • 问题重点:
    • 数据元素是整数,按值的非递减有序排列
    • 将A和B两个数据元素进行归并成一个,仍旧是按照非递减排列
    • 表中没有重复的元素
    • B不再存在
尝试一
  • 个人认为这个之前的归并好像并没有太大的区别,只是会删除重复的元素,所以仅仅只会在原来的合并两个序列的算法上进行修改
  • 对于两边元素相同进行特殊处理,删除一个,保留一个

伪代码

void Merge_L_Order( LinkList<ElemType> &A, LinkList<ElemType> &B )
{
    LinkNode<ElemType> *ATemp = A.GetHead()->next;
    LinkNode<ElemType> *BTemp = B.GetHead()->next;
    LinkNode<ElemType> *result = A.GetHead();

    while(ATemp && BTemp)
    {
        if(ATemp->data > BTemp->data)
        {
            //move the smaller element to the sequence of result
            result->next = BTemp;
            result = result->next;
            BTemp = BTemp->next;
        }
        else if(ATemp->data < BTemp->data)
        {
            result->next = ATemp;
            result = result->next;
            ATemp = ATemp->next;
        }
        else
        {
            result->next = ATemp;
            result = result->next;
            ATemp = ATemp->next;
            BTemp = BTemp->next;
        }
    }

    //reconcat the rest to the result
    if(!ATemp)
    {
        result->next = BTemp;
    }

    if(!BTemp)
    {
        result->next = ATemp;
    }

}

在这里插入图片描述
在这里插入图片描述

分析与总结

  • 并没有什么,就是加上一个提纯的功能,简单的修改了一下

如果不妥或者疑惑,请在评论区留言,或者加本人的扣扣651378276线上讨论

  • 3
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页

打赏

客院载论

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者