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

目录

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,一经查实,立即删除!

相关文章

go 基础中的一些坑(2)

类型转换 在 go 语言中&#xff0c;类型转换是显式的&#xff0c;不会自动转换 go 复制代码 func main(){ i : 100 var f float64 f float64(i) } string 转换成 int 需要借助 strconv 包 使用 strconv.Atoi 函数将 string 转换成 int&#xff0c;转换后它会输出两个值&…

基于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;是确定数据库理论结构的阶段。 概念模…

大模型日报2024-03-23

微软生成式AI入门课程 摘要: 微软推出18堂生成式AI基础课程&#xff0c;适合初学者。课程内容丰富&#xff0c;涵盖理论与实操&#xff0c;使用Jupyter Notebook编写&#xff0c;详见官方教程链接。 DarkGPT&#xff1a;基于GPT-4的OSINT助手 摘要: DarkGPT是一个基于GPT-4-200…

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

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

node.js中常用的命令及示例

node.js中常用的命令及示例&#xff1a; 启动Node.js REPL&#xff08;Read-Eval-Print Loop&#xff09;nodec此命令将启动Node.js的交互式命令行环境&#xff0c;允许你编写并立即执行JavaScript代码。 运行JavaScript文件 node script.js运行名为script.js的JavaScript文件…

【Web APIs】事件高级

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

apache2.4设置完一个VirtualHost后,所有的域名和IP地址都变成访问这个VirtualHost的解决办法

apache2.4设置完一个VirtualHost&#xff08;如www.example.com&#xff09;后&#xff0c;所有的域名&#xff08;如localhost&#xff09;和IP地址都变成访问这个VirtualHost。 默认的DocumentRoot /var/www/html无效了。 解决办法&#xff1a;在/etc/httpd/conf.d/&#xf…

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

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

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

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

Spark重温笔记(三):Spark在企业中为什么能这么强?——持久化、Checkpoint机制、共享变量与内核调度原理全攻略“

Spark学习笔记 前言&#xff1a;今天是温习 Spark 的第 3 天啦&#xff01;主要梳理了 Spark 核心数据结构&#xff1a;RDD(弹性分布式数据集)&#xff0c;包括RDD持久化&#xff0c;checkpoint机制&#xff0c;spark两种共享变量以及spark内核调度原理&#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;自…

线程与进程的爱恨情仇???

线程与进程的爱恨情仇&#xff1f;&#xff1f;&#xff1f; 一&#xff1a;有了进程&#xff0c;为什么还需要线程&#xff1f;&#xff1f;&#xff1f;二:线程三:线程和进程的区别与联系四:创建线程or创建进程 一&#xff1a;有了进程&#xff0c;为什么还需要线程&#xff…

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; …

芒果YOLOv8改进116:即插即用:集中特征金字塔Centralized Feature Pyramid 高效涨点改进

💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接: 芒果YOLOv8深度改进教程 🚀🚀🚀 文章目录 一、Centralized Feature Pyramid论文理论部分 + YOLOv8代码改进论文创新论文贡献论文网络部分实验对比2. YOLOv8 …

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

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

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

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