线性表的合并之求解一般集合的并集问题(单链表)

目录

1问题描述:

2问题分析:

3代码如下:

4运行结果:


1问题描述:


        已知两个集合A和B,现要求一个新的集合A=AuB。例如,设

                A=(7,5,3,11),B=(1,2,3)

要求合并后为(7,5,3,11,1)(即遵循集合互异性的原则)

2问题分析:


可以利用两个线性表LA 和LB 分别表示集合A 和B(即线性表中的数据元素为集合中的成员), 这样只需扩大线性表 LA,将存在于 LB中而不存在于 LA 中的数据元素插入到 LA 中去。只要从LB中依次取得每个数据元素, 并依值在 LA中进行查访, 若不存在, 则插入之。
上述操作过程可用算法 2.15 来描述。具体实现时既可采用顺序形式, 也可采用链表形式。
算法2.15 线性表的合并
【算法步骤】
① 分别获取LA 表长m 和LB表长n)
②从LB中第1个数据元素开始, 循环n次执行以下操作:
● 从LB中查找第i(1≤i≤n)个数据元素赋给e;
● 在LA 中查找元素e, 如果不存在, 则将e插在表LA的最后。

主要思想就是从B里挨个取出元素,然后遍历A看是否有重复,若没有就插入A的最后即可

3代码如下:

#include<iostream>
using namespace std;
#include<stdlib.h>
#define ok -1
#define error -2
typedef int Status;
typedef int ElemType; 
typedef struct LNode
{ElemType data;struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L,LinkList &M);
Status fuzhi(LinkList &L,int m);
void shuchu(LinkList L);
Status GetElem(LinkList L,int i,ElemType &e);
Status Length(LinkList L);
Status find1(LinkList L,ElemType e);
Status ListInsert(LinkList &L,int m,ElemType e);
int main()
{LinkList L,M;int x,m,n;ElemType y,e;x=InitList(L,M);if(x==error) cout<<"初始化失败";else         cout<<"初始化成功"<<endl;cout<<"请决定为线性表L赋几个元素:";cin>>x;fuzhi(L,x);cout<<"线性表L为:"<<endl;shuchu(L); cout<<"请决定为线性表M赋几个元素:";cin>>x;fuzhi(M,x);cout<<"线性表M为:"<<endl;shuchu(M);m=Length(L);cout<<"m长度为:"<<m<<endl;n=Length(M);cout<<"n长度为:"<<n<<endl;for(int i=1;i<=n;i++){GetElem(M,i,e);if(find1(L,e)!=error){m++;ListInsert(L,m,e);}shuchu(L);}return 0;
}
Status InitList(LinkList &L,LinkList &M)
{L=new LNode;M=new LNode;if(L==NULL||M==NULL) return error;L->next=NULL;M->next=NULL;return ok;
}
Status fuzhi(LinkList &L,int m)
{LNode *s,*r=L;ElemType n;for(int i=1;i<=m;i++){cout<<"请输入第"<<i<<"个元素";cin>>n; s=new LNode;s->data=n;r->next=s;r=s;}r->next=NULL;return ok;
}
void shuchu(LinkList L)
{LNode *p;p=L->next;cout<<"单链表内容为:";while(p!=NULL){cout<<p->data<<" ";p=p->next;}cout<<endl;
}
Status ListInsert(LinkList &L,int x,ElemType e)//插入 前者为位置后者是元素 
{LNode *p=L->next,*s;int j=0;while(p->next) {p=p->next;}s=new LNode;s->data=e;s->next=p->next;p->next=s;return ok;
}
Status Length(LinkList L)
{int i,j=0;LNode *p=L->next; while(p!=NULL){p=p->next;++j;}return j;
}
Status GetElem(LinkList L,int i,ElemType &e)
{LNode *p=L->next; int j=0;while(p!=NULL){j++;if(j==i) {e=p->data;return ok;}p=p->next;}
}
Status find1(LinkList L,ElemType e)
{LNode *p=L->next; while(p!=NULL){if(p->data==e) return error;else p=p->next;}return ok;
}

#include<iostream>
using namespace std;
#include<stdlib.h>
#define ok -1
#define error -2
typedef int Status;
typedef int ElemType; 
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L,LinkList &M);
Status fuzhi(LinkList &L,int m);
void shuchu(LinkList L);
Status GetElem(LinkList L,int i,ElemType &e);
Status Length(LinkList L);
Status find1(LinkList L,ElemType e);
Status ListInsert(LinkList &L,int m,ElemType e);
int main()
{
    LinkList L,M;
    int x,m,n;
    ElemType y,e;
    x=InitList(L,M);
    if(x==error) cout<<"初始化失败";
    else         cout<<"初始化成功"<<endl;
    cout<<"请决定为线性表L赋几个元素:";
    cin>>x;
    fuzhi(L,x);
    cout<<"线性表L为:"<<endl;
    shuchu(L); 
    cout<<"请决定为线性表M赋几个元素:";
    cin>>x;
    fuzhi(M,x);
    cout<<"线性表M为:"<<endl;
    shuchu(M);
    m=Length(L);
    cout<<"m长度为:"<<m<<endl;
    n=Length(M);
    cout<<"n长度为:"<<n<<endl;
    for(int i=1;i<=n;i++)
    {
        GetElem(M,i,e);
        if(find1(L,e)!=error)
        {
            m++;
            ListInsert(L,m,e);
        }
            
        shuchu(L);
    }
    return 0;
}
Status InitList(LinkList &L,LinkList &M)
{
    L=new LNode;
    M=new LNode;
    if(L==NULL||M==NULL) return error;
    L->next=NULL;
    M->next=NULL;
    return ok;
}
Status fuzhi(LinkList &L,int m)
{
    LNode *s,*r=L;
    ElemType n;
    for(int i=1;i<=m;i++)
    {
        cout<<"请输入第"<<i<<"个元素";
        cin>>n; 
        s=new LNode;
        s->data=n;
        r->next=s;
        r=s;
    }
    r->next=NULL;
    return ok;
}
void shuchu(LinkList L)
{
    LNode *p;
    p=L->next;
    cout<<"单链表内容为:";
    while(p!=NULL)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}
Status ListInsert(LinkList &L,int x,ElemType e)//插入 前者为位置后者是元素 
{
    LNode *p=L->next,*s;
    int j=0;
    while(p->next) 
    {
        p=p->next;
    }
    s=new LNode;
    s->data=e;
    s->next=p->next;
    p->next=s;
    return ok;
}
Status Length(LinkList L)
{
    int i,j=0;
    LNode *p=L->next; 
    while(p!=NULL)
    {
        p=p->next;
        ++j;
    }
    return j;
}
Status GetElem(LinkList L,int i,ElemType &e)
{
    LNode *p=L->next; 
    int j=0;
    while(p!=NULL)
    {
        j++;
        if(j==i) 
        {
            e=p->data;
            return ok;
        }
        p=p->next;
    }
}
Status find1(LinkList L,ElemType e)
{
    LNode *p=L->next; 
    while(p!=NULL)
    {
        if(p->data==e) return error;
        else p=p->next;
    }
    return ok;
}

4运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Matlab的血管图像增强算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

设计数据库之外部模式:数据库的应用

Chapter5&#xff1a;设计数据库之外部模式&#xff1a;数据库的应用 笔记来源&#xff1a;《漫画数据库》—科学出版社 设计数据库的步骤&#xff1a; 概念模式 概念模式(conceptual schema)是指将现实世界模型化的阶段进而&#xff0c;是确定数据库理论结构的阶段。 概念模…

k8s笔记27--快速了解 k8s pod和cgroup的关系

k8s笔记27--快速了解 k8s pod和 cgroup 的关系 介绍pod & cgroup注意事项说明 介绍 随着云计算、云原生技术的成熟和广泛应用&#xff0c;K8S已经成为容器编排的事实标准&#xff0c;学习了解容器、K8S技术对于新时代的IT从业者显得极其重要了。 之前在文章 docker笔记13–…

【Web APIs】事件高级

目录 1.事件对象 1.1获取事件对象 1.2事件对象常用属性 2.事件流 1.1事件流的两个阶段&#xff1a;冒泡和捕获 1.2阻止事件流动 1.3阻止默认行为 1.4两种注册事件的区别 3.事件委托 1.事件对象 1.1获取事件对象 事件对象&#xff1a;也是一个对象&#xff0c;这个对象里…

电子电器架构 —— 诊断数据DTC具体故障篇

电子电器架构 —— 诊断数据DTC起始篇 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎…

算法---前缀和练习-2(和为k的子数组)

和为k的子数组 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 创建一个无序映射&#xff08;哈希表&#xff09; hash&#xff0c;用于统计前缀和的出现次数。初始时&#xff0c;将前缀和为 0 的次数设为 1&#xff0c;表示…

牛客题霸-SQL篇(刷题记录二)

本文基于前段时间学习总结的 MySQL 相关的查询语法&#xff0c;在牛客网找了相应的 MySQL 题目进行练习&#xff0c;以便加强对于 MySQL 查询语法的理解和应用。 由于涉及到的数据库表较多&#xff0c;因此本文不再展示&#xff0c;只提供 MySQL 代码与示例输出。 以下内容是…

HarmonyOS应用开发实战 - Api9 拍照、拍视频、选择图片、选择视频、选择文件工具类

鸿蒙开发过程中&#xff0c;经常会进行系统调用&#xff0c;拍照、拍视频、选择图库图片、选择图库视频、选择文件。今天就给大家分享一个工具类。 1.话不多说&#xff0c;先展示样式 2.设计思路 根据官方提供的指南开发工具类&#xff0c;基础的拍照、拍视频、图库选照片、选…

使用Python进行自动化测试Selenium与PyTest的结合【第150篇—自动化测试】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行自动化测试&#xff1a;Selenium与PyTest的结合 在软件开发中&#xff0c;自…

css盒子模型及浮动

内容(content)、内边距(padding)、边框(border)、外边距(margin) oder:1px solid red; 边框的粗细 边框的样式&#xff08;虚线还是实线&#xff09; 边框的颜色 border中也有一些属性可以直接调某一个方向上的边框的粗细&#xff0c;样式&#xff0c;颜色 border-left\bord…

2024/3/24 LED点阵屏

显示原理&#xff1a; 类似矩阵键盘&#xff0c;逐行or逐列扫描 74HC595是串行 寄存器 感觉就是三转八寄存器 并行&#xff1a;同时输出&#xff1b;串行&#xff1a;一位一位输出 先配置74HC595&#xff0c;重新进行位声明 sbit RCKP3^5; //RCLK sbit SCKP3^6; …

淘宝|天猫|京东|1688主流电商平台的实时数据返回接口|附Python实例

导读&#xff1a;随着淘宝/天猫直通车功能升级&#xff0c;很多功能越来越白盒化&#xff0c;越来越简化&#xff0c;更方便用户的操作&#xff0c;只需一键即可看出淘宝/天猫直通车存在的问题。淘宝/天猫直通车千人千面后有了实时数据工具&#xff0c;下面通过一个案例告诉大家…

23. UE5 RPG制作属性面板(一)

随着角色的属性越来越多&#xff0c;我们不能每次都进行showdebug abilitysystem进行查看&#xff0c;而且玩家也需要查看角色属性&#xff0c;所以需要一个查看玩家角色属性的面板。 在前面&#xff0c;我们创建三种类型的属性 Primary Attributes&#xff08;主要属性&#…

常见的OOM 问题的 6 种场景

今天跟大家一起聊聊线上服务出现 OOM 问题的 6 种场景,希望对你会有所帮助。 一、堆内存 OOM 堆内存 OOM 是最常见的 OOM 了。 出现堆内存 OOM 问题的异常信息如下: java.lang.OutOfMemoryError: Java heap space此 OOM 是由于 JVM 中 heap 的最大值,已经不能满足需求了…

资深测试总结,性能测试-常见并发问题+解决总结(最全)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、并发测试的定义…

vscode用SSH远程开发c语言

vscode配置远程 这里我使用虚拟机进行展示&#xff0c;首先需要你的虚拟机安装好ssh 没安装好就执行下面的命令安装并开启服务 sudo apt-get install ssh sudo service ssh start ps -e | grep sshvscode安装 remote-ssh扩展 点击左下角的远程连接&#xff0c;我这里已经连接…

【Hive】HIVE运行卡死没反应

Hive运行卡死 再次强调 hive&#xff1a;小兄弟&#xff0c;没想到吧&#xff0c;咱可不是随便的人。&#x1f604; 那么&#xff0c;这次又遇见了hadoop问题&#xff0c;问题描述是这样的。 hive> insert into test values(1, nucty, 男); Query ID atguigu_202403241754…

图论基础|695. 岛屿的最大面积、1020. 飞地的数量、130. 被围绕的区域

695. 岛屿的最大面积 力扣题目链接(opens new window) 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&#xff0…

C语言操作符和数据类型的存储详解

CSDN成就一亿技术人 目录​​​​​​​ 一.操作符 一.算数操作符&#xff1a; 二.位移操作符&#xff1a; 三.位操作符&#xff1a; 四.赋值操作符&#xff1a; 五.单目操作符&#xff1a; 六.关系操作符&#xff1a; 七.逻辑操作符&#xff1a; 八.条件操作符&…

【Redis】Redis 介绍Redis 为什么这么快?Redis数据结构Redis 和Memcache区别 ?为何Redis单线程效率也高?

目录 Redis 介绍 Redis 为什么这么快&#xff1f; Redis数据结构 Redis 和Memcache区别 &#xff1f; 为何Redis单线程效率也高&#xff1f; Redis 介绍 Redis 是一个开源&#xff08;BSD 许可&#xff09;、基于内存、支持多种数据结构的存储系统&#xff0c;可以作为数据…