******、设有两个顺序表A和B,编写一个算法将属于A,但是不属于B的数据元素放大到另一个顺序表C中

(1)、算法设计
遍历顺序表A,将A中每一个元素依次与顺序表B比较,如果相等直接跳过开始比较下一个元素,如果没有相等的直接放在顺序表C中!
(2)、算法实现
——————————————————————————————————————————————————
#include<stdio.h>
#include<stdlib.h>
#include
#define MAXSIZE 20
#define endl ‘\n’
using namespace std;
typedef struct{
int *data;
int length;
}SqList;
——————————————————————————————————————————————————
//操作函数
void SubStrction(SqList &A,SqList &B,SqList &C){
int i = 0 , j = 0 , k = 0;
for(i = 0; i < A.length; i++){ //依次遍历顺序表A
for (j = 0; j < B.length; j++){ //依次遍历顺序表B
if (A.data[i] == B.data[j])
break; //如果在B中找到与A.data[i]相同的元素,直接跳出当前循环,执行该层循环外的代码
}
if ( j == B.length ) //如果j == B.length说明直到将顺序表B遍历完都没有找到A.data[i]相同的元素,即可将A.data[i]加入顺序表C中
C.data[k++] = A.data[i];
}
C.length = k; //修改顺序表C的长度
}
——————————————————————————————————————————————————
//输入函数
void Input(SqList &A,SqList &B){
cout<<“\n请输入顺序表A(结束请输入-1):”;
int i = 0;
int a;
cin>>a;
while(a != -1){
A.data[i] = a;
i++;
cin>>a;
}
A.length = i;
cout<<“\n请输入顺序表B(结束请输入-1):”;
int j = 0;
int b;
cin>>b;
while(b != -1){
B.data[j] = b;
j++;
cin>>b;
}
B.length = j;
}
——————————————————————————————————————————————————
int main(){
SqList A;
A.data = (int *) malloc(sizeof(int)*MAXSIZE); //给顺序表A分配内存空间
A.length = 0;
SqList B;
B.data = (int *) malloc(sizeof(int)*MAXSIZE); //给顺序表B分配存储空间
B.length = 0;
SqList C;
C.data = (int *) malloc(sizeof(int)*MAXSIZE); //给顺序表C分配存储空间
C.length = 0;
Input(A,B); //输入顺序表
SubStrction(A,B,C);
cout<<“\n输出包含在顺序表A中但是不在顺序表B中的元素集合如下:”;
for(int i = 0;i < C.length; i++){ //输出顺序表C
cout<<" “<<C.data[i]<<” ";
}
}
——————————————————————————————————————————————————

******、已知两个单链表A和B分别表示两个集合,其元素递增排列,设计一个算法求A和B的交集,要求C同样以元素值递增的单链表存储!

(1)、算法设计
先遍历链表A,找到第一个结点,然后取结点的数值域依次与链表A中的每一个结点中的数值域进行比价,如果相同使用后插法创建单链表的方法将交集元素插入到链表C中!直到将链表A中所有结点中的数值域均与链表B中的依次比较,即可完成操作!
(2)、算法实现
——————————————————————————————————————————————————
#include<stdio.h>
#include<stdlib.h>
#include
#define MAXSIZE 20
#define endl ‘\n’
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
——————————————————————————————————————————————————
//打印创建的单链表
void PrintLinkList(LinkList L){
LNode *p;
p = L->next;
cout<<“\n后插法创建的单链表如下:”;
while§{
cout<data<<" ";
p = p->next;
}
}
——————————————————————————————————————————————————
//操作函数
void InterSection(LinkList &A,LinkList &B,LinkList &C){
LNode *p = A->next;
LNode *q;
LNode *c = C;
int ElemA;
while(p != NULL){
ElemA = p->data;
q = B->next; //每次遍历完内层循环,一定要将指针q回溯到链表B的首元节点
while(q != NULL){
if ( ElemA == q->data){ //如果AB有交集
LNode *k = (LNode *)malloc(sizeof(LNode)); //申请结点空间c
k->data = ElemA;
k->next = NULL;
c->next = k;
c = k;
}
q = q->next;
}
p = p->next;
}
}

//输入函数
void InputElement(LinkList &A,LinkList &B){
cout<<“\n输入单链表A(结束请输入 -1):”;
LNode LA = A; //LA指向A
int a;
cin>>a;
while(a != -1){
LNode p;
p = (LNode )malloc(sizeof(LNode)); //申请结点的存储空间
p->data = a;
p->next = NULL;
LA->next = p; //将新节点
p插入到尾节点
LA之后,使得p有了地址
LA = p; //使LA重新指向新的尾结点
p
cin>>a;
}
PrintLinkList(A);
cout<<“\n\n输入单链表B(结束请输入 -1):”;
LNode *LB = B;
int b;
cin>>b;
while(b != -1){
LNode *p;
p = (LNode *)malloc(sizeof(LNode)); //申请结点存储空间
p->data = b;
p->next = NULL;
LB->next = p;
LB = p;
cin>>b;
break;
}
PrintLinkList(B);
}

——————————————————————————————————————————————————

int main(){
LinkList A;
A = (LNode *) malloc(sizeof(LNode)); //初始化单链表A
A->next = NULL;
LinkList B;
B = (LNode *) malloc(sizeof(LNode)); //初始化单链表B
B->next = NULL;
LinkList C;
C = (LNode *) malloc(sizeof(LNode)); //初始化单链表C
C->next = NULL;
InputElement(A,B); //输入单链表
InterSection(A,B,C); //操作函数
cout<<“\n\n输出单链表A和B的交集如下:”;
LNode *p;
p = C->next;
while§{
cout<data<<" ";
p = p->next;
}
}
——————————————————————————————————————————————————

使用顺序表、单链表求集合运算相关推荐

  1. (头冷巨制)数据结构学习日志2——(初级掉发向)--关于顺序表.单链表的核心操作实现(By Ivan小黄)

    又是在千家万户熟睡的深夜,老夫依然坐在寝室的硬椅子上,点一支烟(并没有),手指在键盘之间舞动,一根根发丝随着空调冷风从头皮缓缓剥落-咳咳····好了不贫啦!来来来,我们乖乖写完博客睡觉觉哈~ 今天带来 ...

  2. A和B 单链表表示 集合,求其 交集 并集 差集

    A和B 单链表表示 集合的 交集 并集 差集 /* A和B 单链表表示 集合的 交集 并集 差集 */ //#include <iostream> //using namespace st ...

  3. 8.基本数据结构-顺序表和链表

    一.内存 - 计算机的作用:对数据进行存储和运算.首先我们需要知道我们目前使用的计算机都是二进制的计算机,就以为着计算机只可以存储和运算二进制的数据.例如下载好的一部电影,该电影可以存储到计算机中,计 ...

  4. java数据结构与算法之顺序表与链表深入分析

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...

  5. Datawhale组队学习 Task02:顺序表和链表(2天)

    Task02 顺序表和链表(2天) 1. 线性表的定义与操作 1.1 线性表的定义 线性表(Linear List)是由n(n >= 0)个相同类型的数据元素a1,a2,...,an 组成的有序 ...

  6. 顺序表、链表、双向循环链表

    顺序表.链表.双向循环链表 SeqList.h #pragma once #include<stdio.h>#define ListSize 100 //线性表的最大长度 typedef ...

  7. c语言输出单链表最大值与最小值,数据结构(C语言版)---顺序表与链表的比较...

    1.存取方式 1)顺序表:可以顺序存取,也可以随机存取. 2)链表:只能从表头顺序存取. 2.逻辑结构与物理结构 1)顺序存储:逻辑上相邻,物理位置相邻. 2)链式存储:逻辑上相邻,物理位置不一定相邻 ...

  8. 【顺序表和链表】实现增删查改数据结构 OJ题编程

    目录 线性表 一.顺序表 1.使用顺序表MyArrayList增删查改 MyArrayList.java TestDemo.java 二.链表 1.带头 / 不带头 循环 / 非循环 2.创建链表并访 ...

  9. python列表是顺序表还是链表_Python数据结构与算法(链表使用详解)

    链表 单向链表 p是头节点,指向第一个值,最后一个是伪节点,因为不指向地址. 表元素域elem用来存放具体的数据 链接域next用来存放下一个节点的位置(python中的标识) 变量p指向链表的头节点 ...

最新文章

  1. 实现MFC中Radio Button组绑定同一变量控制
  2. 在Ubuntu下利用Eclipse调试FFmpeg
  3. gin使用 GET, POST, PUT, PATCH, DELETE, OPTIONS
  4. 【报错】ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds t
  5. if you want to reserve a place at the college library
  6. 怎么点亮段码屏_我的投影机怎么不亮了
  7. Docker安装及配置镜像加速器
  8. Pandas Window对象
  9. 熬夜整理出40张可视化大屏模板,不敲一个代码就能直接套用
  10. Python 字典(Dictionary) values()
  11. Generalised Dice Overlap as a Deep Learning Loss Function for Highly Unbalanced Segmentations
  12. MYSQL的空间查询
  13. 订阅服务器无法显示,订阅疑难解答
  14. 东欧小哥打造超全Python速查表登上GitHub热榜,标星4600+
  15. 山西华夏文明历史穿越和黄河文明”研学旅行团
  16. h5支付不能打开支付宝 ios_iOS解决H5支付跳转到支付App及返回原App问题
  17. 三款超火的国外壁纸应用,让你每天都用新手机
  18. 迅雷链:DPoA 与 VRF
  19. 《数据结构》 李春葆 第一章-绪论
  20. 哀悼日设置网站主题为黑白主题

热门文章

  1. iPhone九宫格的实现
  2. Windows计划任务提示 0xE0434352 错误
  3. 【周末分享】基因编辑技术的现状与未来
  4. The method getInstance() is undefined for the type Service
  5. java编程逻辑符号,太香了
  6. python代码实现的特效_Python 实现PS滤镜的旋涡特效
  7. 图片怎么编辑里面的文字?这篇文章告诉你方法
  8. 制作自己的网站从哪里开始
  9. Qt中mouseMoveEvent(QmouseEvent *event)使用探讨
  10. XDOJ1055 - 魔兽争霸考试