DS实验4--求单链表交集与差集(含测试效果及实现)
本次实验包含求单链表的交集和差集,并作用在一个单链表的上面,为了实现两个函数的测试,需要用到几个函数。第一:1、初始化 2、尾插法 3、删除节点 4、遍历节点。这四个函数写好后,我们就可以愉快的给1交集和差集做测试了。我们先谈论交集如何做。
交集
原题再现:
- 1、已知两个链表A和B分别表示两个集合,其元素递增排列。 请设计一个算法,用千求出A与B的交集,并存放在A链表中。
拿到题目时,先看他输入输出与功能,功能才限制他的输出,输入就是两个单链表,A是要操作的,所以需要加上&。核心关键词:递增、交集.
假设A = {1,2,3,4,8},B={2,4,7,8,9}
那么A∩B= {2,4,8}
算法思路
- 两个操作指针p和q指向两个链表的数据域
- while循环判断p->data 和q->data 如果相等不操作直接下一条,如果大于q跳向下一条地址 ,如果小于,删除节点,最后就是想要的结果了。
根据思路,算法就很简单的转化为代码。
void Inter(LinkList &A,LinkList B){LinkList p = A->next;LinkList q = B->next;while(p && q){if(p->data == q->data){p =p->next;q = q->next;}else if(p->data>q->data){q = q->next;}else{p = ListDelete(A,p->data);p = p->next;}}
}
差集
题目再现
- 2、巳知两个链表 A和 B分别表示两个集合,其元素递增排列。请设计算法
- 求出两个集合 A和B 的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
假设 A = {1,2,3,4,8} B={2,4,7,8,9}
A-B = {1,3} 2个
算法步骤,上题同理
- 两个操作指针p和q指向两个链表的数据域
- while循环判断p->data 和q->data 如果相等删除节点,如果大于q跳向下一条地址 ,如果小于,计数器+1。
int Differ(LinkList &A,LinkList B){int cnt=0;LinkList p = A->next;LinkList q = B->next;while(p && q){if(p->data == q->data){p = ListDelete(A,p->data);p = p->next;q = q->next;}else if(p->data>q->data){q = q->next;}else {p = p->next;cnt ++;}}return cnt;}
测试效果
完整源码
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define MAXSIZE 10
using namespace std;
typedef int Status;
typedef int ElementType;typedef struct LNode{ElementType data;struct LNode* next;
}LNode,*LinkList;Status InitList(LinkList &L){L = new LNode;L->next = NULL;return OK;
}
void CreateList_H(LinkList &L,int A[],int n){InitList(L);LinkList r = L;for(int i =0;i<n;i++){LinkList p = new LNode;p->data = A[i];p->next = NULL;r->next = p;r = p;}
}
void Print(LinkList L){LinkList p = L->next;while(p){cout << p->data << " ";p = p->next;}cout << endl;
}
LinkList ListDelete(LinkList &L,int x){LinkList p = L,pre;while(p->next != NULL && p->data !=x){pre = p;p=p->next;}pre->next = p->next;delete p;return pre;}
/** * 1、已知两个链表A和B分别表示两个集合,其元素递增排列。* 请设计一个算法,用千求出A与B的交集,并存放在A链表中。* A = {1,2,3,4,8},B={2,4,7,8,9}* A∩B= {2,4,8}* */
void Inter(LinkList &A,LinkList B){LinkList p = A->next;LinkList q = B->next;while(p && q){if(p->data == q->data){p =p->next;q = q->next;}else if(p->data>q->data){q = q->next;}else{p = ListDelete(A,p->data);p = p->next;}}
}
/** 2、巳知两个链表 A和 B分别表示两个集合,其元素递增排列。请设计算法* 求出两个集合 A和B 的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。* A = {1,2,3,4,8} B={2,4,7,8,9}* A -B={1,3} 2个* */
int Differ(LinkList &A,LinkList B){int cnt=0;LinkList p = A->next;LinkList q = B->next;while(p && q){if(p->data == q->data){p = ListDelete(A,p->data);p = p->next;q = q->next;}else if(p->data>q->data){q = q->next;}else {p = p->next;cnt ++;}}return cnt;}
int main(){LinkList A,B;int a[5]={1,2,3,4,8};int b[5] ={2,4,7,8,9};CreateList_H(A,a,5);CreateList_H(B,b,5);cout << "A list:" << endl;Print(A);cout << "B list:" << endl;Print(B);cout << "A and B intersect: " << endl;Inter(A,B);Print(A);cout << "A and B Difference:" << endl;CreateList_H(A,a,5);int cnt = Differ(A,B);Print(A);cout << "cnt:" << endl;cout << cnt << endl;return 0;
}
DS实验4--求单链表交集与差集(含测试效果及实现)相关推荐
- c语言while求a和b的和程序,数据结构实验1_C语言_输入集合A和B求并集、交集、差集(while +...
数据结构实验1_C语言_输入集合A和B求并集.交集.差集(while + 数据结构实验1_C语言_输入集合A和B求并集.交集.差集(while + switch + 功能函数)) 实验1 (1)实验目 ...
- 数据结构实验3、单链表的基本操作实现
实验三: 作者说: 写的如果有不太好的地方,欢迎大佬指点! 一.运行效果截图 二.实验要求 实验3.单链表的基本操作实现 (1)实验目的 通过该实验,深入理解链表的逻辑结构.物理结构等概念,掌握链表基 ...
- c语言链表交换,求单链表的数据交换解决思路
当前位置:我的异常网» C语言 » 求单链表的数据交换解决思路 求单链表的数据交换解决思路 www.myexceptions.net 网友分享于:2013-11-04 浏览:14次 求单链表的数据 ...
- PTA 基础编程题目集 6-6 求单链表结点的阶乘和
PTA 基础编程题目集 6-6 求单链表结点的阶乘和 本题要求实现一个函数,求单链表L结点的阶乘和.这里默认所有结点的值非负,且题目保证结果在int范围内. 函数接口定义: int Factorial ...
- 求单链表结点的阶乘和
求单链表结点的阶乘和 (15分) 本题要求实现一个函数,求单链表L结点的阶乘和.这里默认所有结点的值非负,且题目保证结果在int范围内. 函数接口定义: int FactorialSum( List ...
- PTA:6-3求单链表结点的阶乘和(15分)
大一下半期数据结构 数据结构实践任务2 求单链表结点的阶乘和 本题要求实现一个函数,求单链表L结点的阶乘和.这里默认所有结点的值非负,且题目保证结果在int范围内. 函数接口定义 int Factor ...
- PHP求并集,交集,差集
PHP求并集,交集,差集 一.总结 一句话总结:在php中如果我想要对两个数组进行如并集.交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersec ...
- 【牛客网】邮票;python set()集合函数,去重;“”、“|”、“-”求并集、交集、差集
题目描述 某人有8 角的邮票5 张,1 元的邮票4 张,1 元8 角的邮票6 张,用这些邮票中的一张或若干张可以得到多少中不同的邮资? 输入描述: 无 输出描述: 输出一行,表示题目所求. 本人解答: ...
- java求集合的交集、差集和并集
一.本文介绍两种写法 1原生写法 2com.google.guava写法 <dependency> <groupId>com.google.guava</grou ...
最新文章
- Java 技术篇-利用ClipboardOwner实现实时监听剪切板功能实例演示
- 敏捷开发用户故事系列之三:用户建模
- OSI七层模型详解 TCP/IP协议
- 通过IE私有滤镜让IE6 7 8支持背景透明,内容不透明效果
- excel计算式自动计算_全套Excel版工程自动计算表格+实用小工具,高效工作不加班...
- 淘宝与拍拍的世纪之战!(庄帅)
- 小鼠血清白蛋白包裹四氧化三铁纳米粒
- python读取txt文件中的内容并用逗号分割_数据分析—gt;文件读写
- LiveData 源码解析(2.4.1 版本)
- java privatekey输出字符串_[Java教程]根据字符串(String)生成公钥(PublicKey)和私钥(PrivateKey)对象_星空网...
- 超容易上手的绘图软件
- 解锁商业新模式,神奇AR为IP内容“添把火”
- 高级PHP工程师必备的编码技巧及思维(收藏)
- 如何防御DDoS等流量攻击?
- 最佳论文!商汤提出手机端实时单目三维重建系统 | ISMAR 2020
- matplotlib绘制曲线图
- e3 v3服务器芯片组,最保值的E3-1230 v3遇上锐龙5:结果惊讶!
- OSChina 周三乱弹 ——新技能get 如何机智的关注大胸妹子。
- 软件测试--两个星期的工作经历
- 核与线程 CPU 4核8线程 的解释