题目要求(类似的题型也可供参考)

已知A和B均是由整型数据组成的集合,使用线性表表示集合,设计算法求集合A、B的交集和并集,功能包括
输入集合A,输入集合B,求A和B的并集,求A和B的交集。本题中, 线性表的第一个元素位置为1,线性表的
最大长度为20。
输入描述
各个命令以及相关数据的输入格式如下:输入集合A:A,接下来的一行是要输入的集合元素个数n,下面是1行数据,代表集合元素值 。 输入集合B:B,接下来的一行是要输入的集合元素个数n,下面是1行数据,代表集合元素值。 求集合A和B的并集:U 求集合A和B的交集:I
当输入的命令为E时,程序结束。

整个代码块

#include<iostream>
using namespace std;
const int MaxSize=20;      //设置最大长度为20 class Slist
{
public: void list1(int n);      //集合1void list2(int n);         //集合2void bing();           //集合的并 void jiao();             //集合的交
private: int Adata[MaxSize];        //存放集合1元素的数组A int Bdata[MaxSize];   //存放集合2元素的数组B int lengtha;          //存放集合1元素数组A的长度 int lengthb;            //存放集合2元素数组B的长度
};
void Slist::list1(int n)    //构造集合1
{ int i; if(n>MaxSize || n<1)      { cout<<"长度有误!"<<endl; } else { for(i=0;i<n;i++)   //定义集合1{ cin>>Adata[i]; } lengtha=n;             //数组A的长度 }
}
void Slist::list2(int n)    //构造集合2
{ int i; if(n>MaxSize|| n<1) { cout<<"长度有误!"<<endl; } else { for(i=0;i<n;i++)     //定义集合2{ cin>>Bdata[i]; } lengthb=n;             //数组B的长度 }
}
void Slist::bing()                  //求并集函数
{ int i,j,k,l,m,s; for(i=0;i<lengtha;i++)             //遍历数组1 {cout<<Adata[i]<<endl;      //输出集合1所有元素 } for(m=0;m<lengthb;m++)          //遍历集合2所有元素 { l=Bdata[m];                  //使集合2中元素为l s=0;                       //定义累加器 for(j=0;j<lengtha;j++)        //遍历集合1,将集合2中元素与集合1中元素逐个比较,若累加器s没有加,则出现新的元素,将其输出 { k=Adata[j];                //使集合1中元素为k if(l==k)          //两集合中元素重复,累加器累加,不必再输出集合2中与集合1一样的元素  {s=s+1;} } if(s==0)                  //累加器没有增加 则出现新元素,输出即可 {cout<<l<<endl;} }
}
void Slist::jiao()
{int i,j,k,l; for(i=0;i<lengthb;i++)      //遍历集合2 { l=Bdata[i];              //使集合2中元素为l for(j=0;j<lengtha;j++)    //遍历集合1 { k=Adata[j];          //使集合1中元素为k if(l==k)          //若l=k,则输出两集合相同的元素 {cout<<l<<endl;} } }
}
int main()
{ Slist list;       //定义对象变量list int n; char m;     while(1) { cin>>m;if(m=='E')break;switch(m) { case 'A' : cin>>n; list.list1(n); break; case 'B' : int n; cin>>n; list.list2(n); break; case 'U' : list.bing(); break; case 'I': list.jiao(); break; } } return 0;
}

运行结果示例

思路梳理

1、在类里面定义各个集合函数还有交、并函数。私有里面是暂存集合的数组的定义。
2、各个集合构造一样,主要不同是每个集合暂存数组长度(例:lengtha lengthb)的不同。
3、并函数里面先输出一个暂存数组的所有元素,接下来比较第二个暂存数组与第一个里面元素的不同,不同则输出,相同则不再一次输出。(此处建议在稿纸上将Slist::bing()函数里面的两个for循环的代码用例子试验一下,会让人理解更加深刻的。)
4、交函数部分代码就很好理解,不用过多解释
5、主函数部分就是调用类里面函数,采用while循环,用case函数使最终要求达成。

收获

1、知道了两集合的交与并要怎么处理。
2、有些代码在稿纸上演示出来会记忆更加深刻。

线性表求集合的交与并相关推荐

  1. java线性表与集合_Java之集合

    为什么我们要使用集合?之前存储大量数据使用数组,数组不能拓展容量.数组在操作元素时需要大量的移动元素,操作元素的逻辑需要开发者写代码实现.实际开发过过程中,需要自动拓容的容器. Collection集 ...

  2. 用顺序表求集合的交集、并集和差集

    使用顺序表时, 需要定义一个数组来存储顺序表中的所有元素和定义一个整型变量来存储顺序表的长度.假定数组用data[MaxSize]表示,长度整型变量用length表示,并采用结构体类型表示,元素类型采 ...

  3. 基于SQL求集合的交、并、补

    对数据库查询结果集求补(差).交.并集,可利用SQL的EXCEPT(补集).INTERSECT(交集)和UNION(并集)关键词,其中Mysql仅支持UNION,但可以利用SQL实现EXCEPT.IN ...

  4. 一、线性表的顺序存储和基本运算

    线性表的顺序存储: 线性表的顺序存储指的是将线性表的数据元素按其逻辑次序依次存入一组地址连续的单元里,用这种方法存储的线性表称为顺序表. 只要确定线性表存储的起始位置,线性表中任意一个元素都可以随机存 ...

  5. 【数据结构 C描述】有两个整数集合 A 和 B 分别用两个线性表 LA 和 LB 表示,求:一个新的集合A=A∪B,A仍然为纯集合,线性表采用链式存储方式。【单链表】

    这是我的作业题,作业写完后再附到博客中,可能代码写得很烂.虽然是C语言写的,但是我在其中加入了C++的写法,例如cout.我懒得写printf的格式控制符,所以用cout来输出内容,这样我感觉简便多了 ...

  6. 2019牛客多校第四场 B xor (线性基求交)

    xor 思路 题目是要求[l,r][l, r][l,r]的所有集合是否都可以得到xxx,那么显然我们可以对这[l,r][l, r][l,r]个线性基求交,然后再特判能否xxx能否插入,如果能插入,显然 ...

  7. c语言两个线性表la lb,有两个集合用两个线性表LA和LB表示即线性表中的数据元素即为集合中的成员现要求一个新的集合...

    <有两个集合用两个线性表LA和LB表示即线性表中的数据元素即为集合中的成员现要求一个新的集合>由会员分享,可在线阅读,更多相关<有两个集合用两个线性表LA和LB表示即线性表中的数据元 ...

  8. c语言数据结构线性表LA和LB,数据结构(C语言版)设有线性表LA(3,5,8,110)和LB(2,6,8,9,11,15,20)求新集合?...

    数据结构(C语言版)设有线性表LA(3,5,8,110)和LB(2,6,8,9,11,15,20)求新集合? 数据结构(C语言版)设有线性表LA(3,5,8,110)和LB(2,6,8,9,11,15 ...

  9. Programming Ability Test学习 3-05. 求链式线性表的倒数第K项(15)

    3-05. 求链式线性表的倒数第K项(15) 时间限制 250 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 给定一系列正整数,请设计一个尽可能高效的算法, ...

最新文章

  1. 计算机专业教育,科学网—中国大学计算机教育路在何方? - 吴军的博文
  2. 为什么升级不了android版本,为啥你的手机无法升级到安卓7.0?原因都在这里!...
  3. linux script $,linux的script命令
  4. mysql的部分命令图解
  5. OpenCV中的模板匹配
  6. 库克连夜从谷歌抢人,阻止 Siri 继续变傻!
  7. 【引用】成熟人格六要素
  8. CentOS和AIX查看系统序列号
  9. Web 加速,协议先行!
  10. 用foobar2000播放服务器文件,用Foobar2000打造网络电台
  11. InDesign: Interactive Documents InDesign:交互式文档 Lynda课程中文字幕
  12. js 复制div文本
  13. 关于如何阅读英文文献(干货详解)
  14. 奇迹般地修复损坏的Windows、苹果双系统
  15. 中国历史上5个谣言,单是第1条就骗了不少人!
  16. 北京大学计算机系张润楠,▶拜泉县第一中学2019年高考喜报
  17. 路由器不同网段虚拟服务器设置,局域网中不同网段互访?静态路由表必须要学会设置...
  18. 人工智能的主要应用领域
  19. php tdd,用phpUnit入门TDD
  20. c语言输出我爱你程序,程序员表白教程,这些代码用过的都成功了!

热门文章

  1. ann神经网络模型评价指标,神经网络模型参数辨识
  2. 使用python开发“魂斗罗”游戏
  3. 安拆网分享:钢板桩的强大
  4. Python升级之路( Lv1 ) Python 入门
  5. android QQ登录与分享
  6. 美团刚被罚 34 个亿,又出大事了
  7. 在网站上添加加入QQ群的按钮 加群按钮 网站加群按钮 添加加群按钮 QQ群按钮
  8. 国产操作系统银河麒麟V10(ARM64 / AArch64)使用docker安装milvus数据库
  9. 组装服务器详细攻略,深度学习服务器组装经验过程分享
  10. 【故障诊断】风力涡轮机自动故障检测和隔离的最优解决方案研究(Matlab代码实现)