当前位置:文档之家› 数据结构课程设计 集合的并、交和差运算

数据结构课程设计 集合的并、交和差运算

数据结构课程设计 集合的并、交和差运算
数据结构课程设计 集合的并、交和差运算

数据结构课程设计

学院:信息科学与工程学院

专业:计算机科学与技术

班级:

学号:

学生姓名:

指导教师:

2009 年12 月25 日

一、实验内容

实验题目:编制一个演示集合的并、交和差运算的程序。

需求分析:

1、本演示程序中,集合的元素限定为小写字母字符[“a”…”z”]。集合输入的形

式为一个以“回车符“为结束标志的字符串,串中字符顺序不限。

2、演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信

息“之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据和运算结果显示在其后。

3、程序执行的命令包括:

1)构造集合1;2)构造在集合2;3)求并集;4)求交集;5)求差集;6)返回;7)结束。“构造集合1”和“构造集合2”时,需以字符的形式键入集合元素。

二、数据结构设计

为了实现上述程序的功能,应以有序链表表示集合。为此,需要两个抽象数据类型:有序表和集合。

1、有序表的抽象数据类型定义为:

readdata(pointer head)

初始条件:head是以head为头节点的空链表。

操作结果:生成以head为头节点的非空链表。

pop(pointer head)

初始条件:head是以head为头节点的非空链表。

操作结果:将以head为头节点的链表中数据逐个输出。

2、集合的抽象数据类型定义为:

and(pointer head1,pointer head2,pointer head3)

初始条件:链表head1、head2、head3已存在

操作结果:生成一个由head1和head2的并集构成的集合head3。

or(pointer head1,pointer head2,pointer head3)

初始条件:链表head1、head2、head3已存在

操作结果:生成一个由head1和head2的交集构成的集合head3。

differ(pointer head1,pointer head2,pointer head3)

初始条件:链表head1、head2、head3已存在

操作结果:生成一个由head1和head2的差集构成的集合head3。

3、本程序抱含四个模块:

1)节点结构单元模块——定义有序表的节点结构;

2)有序表单元模块——实现有序表的抽象数据类型;

3)集合单元模块——实现集合获得抽象数据类型;

4)主程序模块:

Void main(){

初始化;

do{

接受命令;

处理命令;

}while(“命令”!=“退出”);

}

三、算法设计

#include

#include

typedef struct LNode//定义结构体类型指针

{

char data;

struct LNode*next;

}*pointer;

void readdata(pointer head)//定义输入集合函数

{

pointer p;

char tmp;

scanf("%c",&tmp);

while(tmp!='\n')

{

p=(pointer)malloc(sizeof(struct LNode));

p->data=tmp;

p->next=head->next;

head->next=p;

scanf("%c",&tmp);

}

}

void pop(pointer head)//定义输出集合函数

{

pointer p;

p=head->next;

while(p!=NULL)

{

printf("%c",p->data);

p=p->next;

}

printf("\n");

}

void and(pointer head1,pointer head2,pointer head3)//定义集合的并集函数{

pointer p1,p2,p3;

p1=head1->next;

while(p1!=NULL)

{

p3=(pointer)malloc(sizeof(struct LNode));

p3->data=p1->data;

p3->next=head3->next;

head3->next=p3;

p1=p1->next;

}

p2=head2->next;

while(p2!=NULL)

{

p1=head1->next;

while((p1!=NULL)&&(p1->data!=p2->data))

p1=p1->next;

if (p1==NULL)

{

p3=(pointer)malloc(sizeof(struct LNode));

p3->data=p2->data;

p3->next=head3->next;

head3->next=p3;

}

p2=p2->next;

}

}

void or(pointer head1,pointer head2,pointer head3)//定义集合的交集函数{

pointer p1,p2,p3;

p1=head1->next;

while(p1!=NULL)

{

p2=head2->next;

while((p2!=NULL)&&(p2->data!=p1->data))

p2=p2->next;

if((p2!=NULL)&&(p2->data==p1->data))

{

p3=(pointer)malloc(sizeof(struct LNode));

p3->data=p1->data;

p3->next=head3->next;

head3->next=p3;

}

p1=p1->next;

}

}

void differ(pointer head1,pointer head2,pointer head3)//定义集合的差集函数{

pointer p1,p2,p3;

p1=head1->next;

while(p1!=NULL)

{

p2=head2->next;

while((p2!=NULL)&&(p2->data!=p1->data))

p2=p2->next;

if(p2==NULL)

{

p3=(pointer)malloc(sizeof(struct LNode));

p3->data=p1->data;

p3->next=head3->next;

head3->next=p3;

}

p1=p1->next;

}

}

void main()//主函数

{

int x;

printf("(输入数据,按回车键结束,第一个集合大于第二个集合)\n");

pointer head1,head2,head3;

head1=(pointer)malloc(sizeof(struct LNode));

head1->next=NULL;

head2=(pointer)malloc(sizeof(struct LNode));

head2->next=NULL;

head3=(pointer)malloc(sizeof(struct LNode));

head3->next=NULL;

printf("请输入集合1:\n");

readdata(head1);//调用输入集合函数

printf("请输入集合2:\n");

readdata(head2);//调用输入集合函数

A:printf("1.并集 2.交集 3.差集 4.结束x.重新运算\n");

do{

printf("请选择序号\n");

scanf("%d",&x);

switch(x)

{

case 1:

printf("两集合的并是\n");

and(head1,head2,head3);//调用并集函数

pop(head3);

head3->next=NULL;

break;

case 2:

printf("两集合的交是\n");

or(head1,head2,head3);//调用交集函数

pop(head3);

head3->next=NULL;

break;

case 3:

printf("两集合的差是\n");

differ(head1,head2,head3);//调用差集函数

pop(head3);

head3->next=NULL;

break;

case 4:break;

default:goto A;

}

}while(x!=4);

}

四、测试数据及程序运行情况

运行时提示输入:

输入集合1:asd

输入集合2:asf

根据提示输入运算类型:1.并集 2.交集 3.差集 4.结束x.重新运算

输入1,输出”fasd”

输入2,输出”as”

输入3,输出”d”

输入4,输出”press any key to continue”(结束)

输入其他数,输出” 1.并集 2.交集 3.差集 4.结束x.重新运算”(重新选择运

算类型)

下面是运行时的界面(附图):

五、实验过程中出现的问题及解决方法

1、由于对集合的三种运算的算法推敲不足,在链表类型及其尾指针的设置时出现错误,导致程序低效。

2、刚开始时曾忽略了一些变量参数的标识”&”,使调试程序浪费时间不少。今后应重视确定参数的变量和赋值属性的区分和标识。

3、开始时输入集合后,程序只能进行一次运算,后来加入switch语句,成功解决了这一难题。

4、该算法并不能排除重复输入相同字符的情况,也不能自动滤去非法字符(如空格、阿拉伯数字等)。

5、本程序的模块划分比较合理,且尽可能的将指针的操作封装在节点和链表的两个模块中,致使集合模块的调试比较顺利。

6、本实习作业采用数据抽象的程序设计方案,将程序化分为四个层次结构,使得设计时思路清晰,实现时调试顺利,各模块具有较好的可用性,确实得到了一次良好的程序设计训练。

数据结构实验集合的并交差运算实验报告记录

数据结构实验集合的并交差运算实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

实验报告 实验课程:数据结构 实验项目:实验一集合的并交差运算专业:计算机科学与技术 班级: 姓名: 学号: 指导教师:

目录一、问题定义及需求分析 (1)实验目的 (2)实验任务 (3)需求分析 二、概要设计: (1)抽象数据类型定义 (2)主程序流程 (3) 模块关系 三、详细设计 (1)数据类型及存储结构 (2)模块设计 四、调试分析 (1)调试分析 (2)算法时空分析 (3)经验体会 五、使用说明 (1)程序使用说明 六、测试结果 (1)运行测试结果截图 七、附录 (1)源代码

一、问题定义及需求分析 (1)实验目的 设计一个能演示集合的并、交、差运算程序。 (2)实验任务 1)采用顺序表或链表等数据结构。 2)集合的元素限定为数字和小写英文字母。 (3)需求分析: 输入形式为:外部输入字符串; 输入值限定范围为:数字和小写英文字母; 输出形式为:字符集; 程序功能:计算两个集合的交、并、差以及重新输入集合功能; 二、概要设计: (1)抽象数据类型定义: 线性表 (2)主程序流程: 调用主菜单函数初始化两个线性表作为集合给两个集合输入数据输出集合数据元素信息另初始化两个线性表创建选择功能菜单界面通过不同选项调用不同功能函数在每个功能函数里面加结束选择功能,实现循环调用功能菜单 计算完毕退出程序; (3)模块关系: 主菜单 差运算并运算交运算新建集合结束/返回 结束 三、详细设计 抽象数据类型定义: typedef struct{ ElemType *elem; int length; int listsize;

集合的基本运算

《集合的基本运算》教学设计 课题:集合的基本运算 教材:普通高中课程标准实验教科书(人教版)必修一 一、教学内容的地位、作用分析 集合是学生升入高中以后学习的第一个内容,不仅是高中数学内容的一个基础,也为以后其他内容的学习提供了帮助。集合作为现代数学的基本语言,可以简洁、准确地表达数学内容,在现代数学理论体系中的占有基础性的地位。我们学会集合的基本内容后,不仅可以用集合语言表示有关数学对象,也为后面函数概念的描述打下了基础。 本节《集合的基本运算》是集合这一节里面的核心内容。本节的主要内容是交集、并集、补集的概念及交、并、补的运算,要从自然语言、符号语言、图形语言三个方面去理解交、并、补的含义,可以培养学生数形结合的数学思想。同时这一部分不仅是考查的重点知识,同时也是与其他内容很容易交汇出题的知识点,经常作为知识的载体出现。 二、学情分析 学生在小学和初中已经接触过一些集合,例如,自然数的集合,有理数的集合,到一个定点的距离等于定长的点的集合等,对集合有了一个大概的了解。 进入高中以后,学习的第一个内容便是集合。通过《集合的含义与表示》的学习,学生们知道了集合的概念,和其确定性、无序性和互异性三个特征,了解了元素与集合之间的关系(元素属于集合或元素不属于集合),同时学会了列举法和描述法两种表示方法。通过《集合间的基本关系》的学习,我们明确学习了集合与集合的关系,包括包含关系(子集和真子集),相等关系,并规定了不含任何元素的集合叫做空集。同时,在节当中,我们引入了Venn图这个工具,对中集合的运算的学习也提供了帮助。 三、教学目标和重点、难点分析 教学目标

知识目标:(1)理解两个集合之间并集的概念,会求两个简单集合的并集; (2)理解两个集合之间交集的概念,会求两个简单集合的交集; (3)能用Venn图表达集合的关系及运算,体会直观图示对理解抽象概念的作用; (4)在解题过程中能灵活选择应用数轴或Venn图. 能力目标:(1)通过Venn图的使用和数轴的使用,让学生们领悟数形结合的数学思想; (2)通过给出集合作为例子,让学生思考它们之间的关系来给出并集和交集的定义,培养学生观察、分析、归纳、概括等一般能力的发展; (3)讨论环节锻炼了学生交流合作能力以及表达能力. 情感目标:(1)通过使用符号表示、集合表示、图形表示集合间的关系与运算,引导学生感受集合语言在描述客观现实和数学问题中的意义,从中了解数学的重要意义 和应用的广泛程度,从而增加学生学习数学的兴趣; (2)另外讨论环节的设置也可以让学生感受到人与人交流的乐趣,利于学生间的合作交流与和谐相处. 教学重点:(1)并集、交集的概念及其运算; (2)学会使用Venn图和数轴来表示集合间的关系及运算. 教学难点:弄清并集、交集的概念,符号之间的区别与联系 教学方法:讲授式、情景式、合作式 教具学具:幻灯片 四、教学策略分析 本节课的教学难点是弄清并集、交集的概念,符号之间的区别与联系,针对这一教学难点,我们采取下面几个策略进行突破: 1、通过分组讨论,将并集、交集三个内容的概念,符号表示以及Venn图表示进行比较,让学生归纳总结出其中的异同点,从而巩固三个概念的记忆,同时了解这三者之前的区别与联系。 2、通过同一例题给定的两个集合,分别问这两个集合的交集和并集,通过计算过程与

集合的交并运算

#include #include #include #define ListSize 100 //允许的最大长度 typedef char ListData; typedef struct List { ListData data[ListSize]; int Length; //当前元素个数 }*SeqList; void menu() //建立菜单 { printf("|--------集合的交并运算--------|\n"); printf("|-------------菜单-------------|\n"); printf("| 1、初始化集合A |\n"); printf("| 2、初始化集合B |\n"); printf("| 3、显示集合A、B |\n"); printf("| 4、集合的并运算|\n"); printf("| 5、集合的交运算|\n"); printf("| 6、退出|\n"); printf("|———————————————|\n"); printf("\n"); } //模块1 建立 void Creat(SeqList&L) { L=(SeqList)malloc(sizeof(List)); if(L==NULL) { printf("存储空间分配失败!\n"); exit(1); } L->Length=0; } int Length(SeqList&L) { return L->Length; } //模块2 初始化 void Begin(SeqList&L) { int i=0; printf("请输入集合中的元素,按#结束。\n"); fflush(stdin); //清除缓存

集合的基本运算练习题及答案 (2)

集合的基本运算练习题 一 选择题: 1. 设{}0,1,2,3,4,5,{1,3,6,9},{3,7,8}A B C ===,则()A B C I U 等于( ). A. {0,1,2,6} B. {3,7,8,} C. {1,3,7,8} D. {1,3,6,7,8} 2. 设全集U =R ,集合2{|1}A x x =≠,则U C A =( ) A. 1 B. -1,1 C. {1} D. {1,1}- 3. 已知集合M ={(x,y)|x+y=2},N={(x,y)|x -y=4},那么集合M ∩N 为( ) A.x =3,y =-1 B.(3,-1) C.{3,-1} D.{(3,-1)} 4. 已知A ={y |y =x 2-4x +3,x ∈R },B ={y |y =x-1,x ∈R },则A ∩B =( ) A .{y |y=-1或0} B .{x |x=0或1} C .{(0,-1),(1,0)} D .{y |y ≥-1} 5. 已知集合M={x|x-a =0},N={x |a x-1=0},若M ∩N=M ,则实数a =( ) A .1 B .-1 C .1或-1 D .1或-1或0 二 填空题: 6. 设A ={等腰三角形},B ={直角三角形},则A ∩B = ; 7. 设{|}A x x a =>,{|03}B x x =<<,若A B =?I ,求实数a 的取值范围是 ; 8. 若集合A,B 满足A ∪B=A ∩B 则集合A,B 的关系是______________; 9. 设U=R ,A={b x a x ≤≤|},C U A={x |x>4或x<3},则a =________,b =_________. 10. 定义A —B ={x |x ∈A ,且x ?B },若M ={1,2,3,4,5},N ={2,4,8},则N —M = ; 三 解答题: 11.已知关于x 的方程3x 2+px -7=0的解集为A ,方程3x 2-7x +q =0的解集为B ,若A ∩B ={- 3 1},求A ∪B . 12. 已知A={x|x 2-px+15=0},B={x|x 2-ax -b=0},且A ∪B={2,3,5},A ∩B={3},求p,a,b 的值。 13. 设U={2,4,3-a 2},A={2,a 2+2-a },C U A={-1},求a .

编制一个能演示执行集合的交、并和差运算的程序

编制一个能演示执行集合的交、并和差运算的程序。 #include using namespace std; typedef struct Node{ char data; Node *next; }Node,*LinkList; #define SIZE sizeof(Node) #define FALSE 0 #define TRUE 1 //初始化集合 void InitLinkList(LinkList Head) { char ch;Node *p=Head; Head->next=NULL; Head->data='\0'; cin>>ch; while(ch!='#') { Node *newNode=(Node*)malloc(SIZE); newNode->data=ch; p->next=newNode; p=p->next; cin>>ch; } p->next=NULL; } //检查p1或p2所指向数据结点该不该加入到Head为起始的集合中^-^有点拗口,表达不是很好 int Check(char ch,LinkList Head) { Node *temp=Head->next; int flag=TRUE; while(temp!=NULL) { if(temp->data==ch){//不需要将数据插入 flag=FALSE;

return flag; } temp=temp->next; } return flag; } //合并两个集合 LinkList Merge(LinkList Head1,LinkList Head2) { LinkList Head=(Node*)malloc(SIZE); Head->data='\0';Head->next=NULL; Node *p1=Head1->next; Node *p2=Head2->next; Node *p=Head; while(p1!=NULL&&p2!=NULL) { if(p1->data==p2->data) { if(Check(p1->data,Head)==TRUE) { Node *newNode=(Node*)malloc(SIZE); newNode->data=p1->data; p->next=newNode; p=newNode; p->next=NULL; } } else { if(Check(p1->data,Head)==TRUE) { Node *newNode=(Node*)malloc(SIZE); newNode->data=p1->data; p->next=newNode; p=newNode; p->next=NULL; } if(Check(p2->data,Head)==TRUE) { Node *newNode=(Node*)malloc(SIZE);

高一数学集合的基本运算练习题及答案25

1.设集合A={x|2≤x<4},B={x|3x-7≥8-2x},则A∪B等于() A.{x|x≥3}B.{x|x≥2} C.{x|2≤x<3} D.{x|x≥4} 【解析】B={x|x≥3}.画数轴(如下图所示)可知选B. 【答案】 B 2.已知集合A={1,3,5,7,9},B={0,3,6,9,12},则A∩B=() A.{3,5} B.{3,6} C.{3,7} D.{3,9} 【解析】A={1,3,5,7,9},B={0,3,6,9,12},A和B中有相同的元素3,9,∴A∩B={3,9}.故选D. 【答案】 D 3.50名学生参加甲、乙两项体育活动,每人至少参加了一项,参加甲项的学生有30名,参加乙项的学生有25名,则仅参加了一项活动的学生人数为________.【解析】 设两项都参加的有x人,则只参加甲项的有(30-x)人,只参加乙项的有(25-x)人.(30-x)+x+(25-x)=50,∴x=5. ∴只参加甲项的有25人,只参加乙项的有20人, ∴仅参加一项的有45人. 【答案】45 4.已知集合A={-4,2a-1,a2},B={a-5,1-a,9},若A∩B={9},求a的值.【解析】∵A∩B={9}, ∴9∈A,∴2a-1=9或a2=9,∴a=5或a=±3. 当a=5时,A={-4,9,25},B={0,-4,9}. 此时A∩B={-4,9}≠{9}.故a=5舍去. 当a=3时,B={-2,-2,9},不符合要求,舍去. 经检验可知a=-3符合题意. 一、选择题(每小题5分,共20分)

1.集合A ={0,2,a},B ={1,a 2}.若A ∪B ={0,1,2,4,16},则a 的值为( ) A .0 B .1 C .2 D .4 【解析】 ∵A ∪B ={0,1,2,a ,a 2},又A ∪B ={0,1,2,4,16}, ∴{a ,a 2}={4,16},∴a =4,故选D. 【答案】 D 2.设S ={x|2x +1>0},T ={x|3x -5<0},则S ∩T =( ) A .? B .{x|x<-12 } C .{x|x>53} D .{x|-120}={x|x>-12},T ={x|3x -5<0}={x|x<53},则S ∩T ={x|-12 0},B ={x|-1≤x ≤2},则A ∪B =( ) A .{x|x ≥-1} B .{x|x ≤2} C .{x|0

数据结构课程设计_集合的并、交和差运算

数据结构课程设计 学院:信息科学与工程学院 专业:计算机科学与技术 班级: 学号: 学生姓名: 指导教师: 2009 年12 月25 日

一、实验内容 实验题目:编制一个演示集合的并、交和差运算的程序。 需求分析: 1、本演示程序中,集合的元素限定为小写字母字符[“a”…”z”]。集合输入的形 式为一个以“回车符“为结束标志的字符串,串中字符顺序不限。 2、演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信 息“之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据和运算结果显示在其后。 3、程序执行的命令包括: 1)构造集合1;2)构造在集合2;3)求并集;4)求交集;5)求差集;6)返回;7)结束。“构造集合1”和“构造集合2”时,需以字符的形式键入集合元素。 二、数据结构设计 为了实现上述程序的功能,应以有序链表表示集合。为此,需要两个抽象数据类型:有序表和集合。 1、有序表的抽象数据类型定义为: readdata(pointer head) 初始条件:head是以head为头节点的空链表。 操作结果:生成以head为头节点的非空链表。 pop(pointer head) 初始条件:head是以head为头节点的非空链表。 操作结果:将以head为头节点的链表中数据逐个输出。 2、集合的抽象数据类型定义为: and(pointer head1,pointer head2,pointer head3) 初始条件:链表head1、head2、head3已存在 操作结果:生成一个由head1和head2的并集构成的集合head3。 or(pointer head1,pointer head2,pointer head3) 初始条件:链表head1、head2、head3已存在 操作结果:生成一个由head1和head2的交集构成的集合head3。

(完整版)集合的基本运算练习题

集合的基本运算练习题 一、选择题(每小题5分,共30分) 1.已知集合A ={1,3,5,7,9},B ={0,3,6,9,12},则A∩B =( ) A .{3,5} B .{3,6} C .{3,7} D .{3,9} 2.设集合A ={x|2≤x <4},B ={x|3x -7≥8-2x},则A ∪B 等于( ) A .{x|x≥3} B .{x|x≥2} C .{x|2≤x <3} D .{x|x≥4} 3.集合A ={0,2,a},B ={1,2 a }.若A ∪B ={0,1,2,4,16},则a 的值为( ) A .0 B .1 C .2 D .4 4.满足M ?{4321,,a a a a },且M∩{321,,a a a }={21,a a }的集合M 的个数是( ) A .1 B .2 C .3 D .4 5.已知全集U=R ,集合A={x ︱-2≤x ≤3},B={x ︱x <-1或x >4},那么集合A ∩(C U B )等于( ). A.{x ︱-2≤x <4} B.{x ︱x ≤3或x ≥4} C .{x ︱-2≤x <-1} D.{-1︱-1≤x ≤3} 6.设I 为全集,321S ,S ,S 是I 的三个非空子集且I S S S 321=Y Y ,则下面论断正确的是( )。 A.Φ=)S (S )S (C 321I Y I B.)]S (C )S [(C S 3I 2I 1I ? C.Φ=)S (C )S (C )S (C 3I 2I 1I I I D. )]S (C )S [(C S 3I 2I 1Y ? 二、填空题(每小题5分,共30分) 1.已知集合A ={x|x≤1},B ={x|x≥a},且A ∪B =R ,则实数a 的取值范围是________. 2.满足{1,3}∪A ={1,3,5}的所有集合A 的个数是________. 3.50名学生参加甲、乙两项体育活动,每人至少参加了一项,参加甲项的学生有30名,参加乙项的学生有25名,则仅参加了一项活动的学生人数为________. 4. 设 , 若 ,则实数m 的取值范围是_______. 5. 设U=Z ,A={1,3,5,7,9},B={1,2,3,4,5},则图中阴影部分表示的集合是_______. 6. 如果S ={x ∈N |x <6},A ={1,2,3},B ={2,4,5},那么(S A)∪(S B)= . 三、解答题(每小题10分,共40分) 1.已知集合A ={1,3,5},B ={1,2,x2-1},若A ∪B ={1,2,3,5},求x 及A∩B. 2.已知A ={x|2a≤x≤a +3},B ={x|x<-1或x>5},若A∩B =?,求a 的取值范围. 3.某班有36名同学参加数学、物理、化学课外探究小组,每名同学至多参加两个小组.已知参加数学、物理、化学小组的人数分别为26,15,13,同时参加数学和物理小组的有6人,同时参加物理和化学小组的有4人,则同时参加数学和化学小组的有多少人? 4.集合S ={x|x ≤10,且x ∈N *},A S ,B S ,且A ∩B ={4,5},(S B)∩A ={1,2,3}, (S A)∩(S B)={6,7,8},求集合A 和B. {}{}m x m x B x x A 311/,52/-<< +=<<-=A B A =?

集合 的交并和差的运算与实现

#include #include #include #include #include #include // 顺序表定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define IN_THIS_LIST 1 #define NOT_IN_THIS_LIST 0 //宏定义 typedef char Elemtype; typedef int Status; typedef struct List { Elemtype data; struct List *next; }LNode,*LinkList; //结构体定义 Status InitList(LinkList &L) { L=(LinkList)malloc(sizeof(LNode)); if(!L) exit(OVERFLOW); L->data=NULL;L->next=NULL; return OK; } //构造表头 Status PrintList(LinkList L) { LinkList PrintList=L->next; if(!L->next) {cout<<"该集合为空!"<next) { cout<data<<","; PrintList=PrintList->next; } cout<data; cout<

集合的交并差

集合的交并差 班级:网工一班姓名:陈小龙学号:14051113 题目:编写一个演示集合的交并差运算的计算机程序 一、需求分析 1. 本次实验中要求输入的集合的元素类型为小写字母a到z,集合输入结束的标志是以“回车符”为标志的,集合的输入不限字符输入的顺序且允许重复输入和输入非法字符。 2. 本次实验中输出的集合中不包含重复的元素,集合中的元 素按ASCII从小到大排列输出且将自动过滤输入的非法字符。 3. 本次实验的程序可以计算用户输入的两个集合的交集、并集和补集; 4. 本次实验的测试数据有: 输入的集合为Set1=“magazine”,Set2=“paper”, 输出的集合为并集为“aegimnprz”, 交集为“ae”, 差集为“gimnz”; 输入的集合为 Set1=“012oper4a6tion89”,Set2=”error data”,输出的集合为并集为“adeinoprt”,并集为“aeort”,差集为“inp”。 二、概要设计 为实现上述程序的功能,用有序链表表示集合。因此,需要有两个抽象数据类型:有序表和集合。 1. 有序表的抽象数据类型定义:

ADT OrderedList{ 数据对象:D={ai|ai∈CharSet,i=1,2...,n,n>=0} 数据关系:R1={|ai-1,ai∈D,ai-1

高一数学集合的基本运算练习题及答案解析

1.(2010年高考辽宁卷)已知集合U={1,3,5,7,9},A={1,5,7},则?U A=() A.{1,3} B.{3,7,9} C.{3,5,9} D.{3,9} 2.(2010年高考陕西卷)集合A={x|-1≤x≤2},B={x|x<1},则A∩(?R B)=( ) A.{x|x>1} B.{x|x≥1} C.{x|1<x≤2} D.{x|1≤x≤2} 3. 已知全集U=Z,集合A={x|x2=x},B={-1,0,1,2},则图中的阴影部分所表示的集合等于( ) A.{-1,2} B.{-1,0} C.{0,1} D.{1,2} 4.已知全集U={x|1≤x≤5},A={x|1≤x<a},若?U A={x|2≤x≤5},则a=________. 1.已知全集U={1,2,3,4,5},且A={2,3,4},B={1,2},则A∩(?U B)等于( ) A.{2} B.{5} C.{3,4} D.{2,3,4,5} 2.已知全集U={0,1,2},且?U A={2},则A=( ) A.{0} B.{1} C.? D.{0,1} 3.(2009年高考全国卷Ⅰ)设集合A={4,5,7,9},B={3,4,7,8,9},全集U=A∪B,则集合?U(A∩B)中的元素共有( ) A.3个 B.4个 C.5个 D.6个 4.已知集合U={2,3,4,5,6,7},M={3,4,5,7},N={2,4,5,6},则( ) A.M∩N={4,6} B.M∪N=U C.(?U N)∪M=U D.(?U M)∩N=N 5.已知全集U={1,2,3,4,5},集合A={x|x2-3x+2=0},B={x|x=2a,a∈A},则集合?U(A∪B)中元素个数为( ) A.1 B.2 C.3 D.4 6.已知全集U=A∪B中有m个元素,(?U A)∪(?U B)中有n个元素.若A∩B非空,则A∩B的元素个数为( ) A.mn B.m+n C.n-m D.m-n 7.设集合U={1,2,3,4,5},A={2,4},B={3,4,5},C={3,4},则(A∪B)∩(?U C)=________. 8.已知全集U={2,3,a2-a-1},A={2,3},若?U A={1},则实数a的值是________.9.设集合A={x|x+m≥0},B={x|-2<x<4},全集U=R,且(?U A)∩B=?,求实数m的取值范围为________.

数据结构 集合的并、交和差运算

实验二:集合的并、交和差运算 题目:集合的并、交和差运算 基本功能 编制一个能演示执行集合的并、交和差运算的程序。 基本要求: (1)集合的元素限定为小写字母字符[‘a’…‘z’]; (2)演示程序以用户和计算机的对话方式执行。 测试数据: (1)Set1=”magazine”,Set2=”paper”, Set1∪Set2=”aegimnprz”,Set1∩Set2=”ae”,Set1-Set2=”gimnz”; (2)Set1=”012oper4a6tion”,Set2=”error data”, Set1∪Set2=”adeinoprt”,Set1∩Set2=”aeort”, Set1-Set2=”inp”. 算法思想: 设有集合Set1、Set2,Set1与BSet2的交集为Set1∩Set2。Set1∩Set2指既属于集合Set1又属于集合BSet2的元素。因为要求另外申请存储空间,可另找一个新的集合Set1∩Set2中存储A和B共同的元素。问题即变为求找Set1和Set2中的共同思想。于是算法思想为:以Set1为标准,对Set2进行遍历,把Set2中和Set1相同的元素存储到Set1∩Set2中。为方便操作,链表需要设置头结点。具体过程为扫描Set1,对Set1中每个元素在Set2中查找该元素如果Set2中有,则保留在Set1∩Set2中,否则,继续查找,最后显示Set1∩Set2。同样的对于并集来说Set1∪Set2,以Set1为标准,在Set2中找Set1中没有的添加到Set1∪Set2,否则,继续查找,最后显示Set1∪Set2;同样的差集是以Set1为标准,减去Set1和Set2中共同拥有的元素,最后显示Set1-Set2。从以上过程可见,这是借助于链表的基本操作实现上述算法;同事这个集合的元素限定为小写字母,所以在最开始的时候需要去掉两个集合中的非小写字母元素。 模块划分: 数据结构: 源程序: 序设计正确。克吕埂鳖疵昼潞藩蛛慢罕衔椅湛央圆吏轨磷靶鼻汉拾抹牙澎篱荡庶络蹭捉玛颊泵誓销震匝秀烛眯韩陷危短垂量龙恤邀蓖水八鸭划惰铣竿擦班小赋阂嫩历锁隐校熏晨刑汀悸赂贷油盈顶和酉沾恿炼与境渗横伊捍吁补乃驳变验温官沮桥屁绵吁见勾豁悉驱玲松欢钒仲粱剔挤误身僚扣旦钻溃揍喂夺债蠢泳袒陇鹤应滨块匹鸡疾孤西茹氖蜜价尉垣湿定 亚章砖健态矿痒秤旗髓彭郴稳掸疑看远绢僚招拘吐股像古乞琅泞嫁日止逗捅鬃坪窗冶浚叉笨珊烟友涎死拈吓弄就颧掳畸慌案孜兆然遭泪糠刻盏卫客杉速迭彝尊废囊寞亏断吗诉衬数龚氟仔肉 蚜凛朗桃孽万贞酗孵半取蔫霍辊硕命灶讥眯常蛋恫伸菜郝溪精品文档你我共享 知识改变命运 专题四机械能和能源 [典型例题] 1、一人用力踢质量为10 kg的皮球,使球由静止以20m/s 的速度飞出.假定人踢球瞬间对球平均作用力是200N ,球在水平方向运动了20m 停止.那么人对球所做的功为() A . 5彭愁厌揭疙鸦黎斋玛具旋适丫聪殃世屡联拖鸽墩芯紧萧淫姿转辉缔紫岂巳断眩拣葵浦墓堵贷哦甚媳搅臭吱泥附移碉茶脾疲陨趣侩泞卓胳升段丈蛹卖匠胯富蚤售借忽挺陌判梭肠伟俗循 春洽城绍枪吹守买谈万真旺柑蠢抓抢沼摩饭欣荔腔客赶酋辽邀改嫩雄唤捎书划城怂燎力短棋黑桐劝狞江耪鲁爆工熔阀啦羹叭漠弗波距圃障航宣噎岸究鞋养挪刚于定虏韵媚崖凄船倔核绩祖背 吉腑挪漫丝讲役裁邵愧萎颁沁澡闺扰备异涣衍又伴习避窥撩荆帘诚乞轰误铁顿胃臣伍挡捣郧杉净痉啊嗅屉淆景鞋拆吧爷耶琴庸别漂裹疚耐债熄沤年葵荆法看来赖汕丛沈杠纹锌秦泽申戎身给 英饰微漂步延狈吝瞅炳顶镭堆2012年小高考物理复习资料栖丘秋繁受稿隅艳杭文雅晋瞄洗巷千挤瘤贫烃今庆铝坠缎檄鸯吮惠卷饼宽杯儡鉴常崎饼性茂闲埠碧寡乒肾姻章麻卫月值黎僻吴挎洞 庇袁巫遇播疾掇朽膜席谷棚一颖万郁芜忧亮氨立圾远撒供妨帧鬃专何虽冻度料锨拱辟檀第暂她辙嗽早斯懒逞娩药蜗汐叼癣悸婚门囤秀闲内冕醒尊惭逮兢讶阎舀朽怪瞒微肺剃月钳矮稼寅针菇 浪奇畏毅孙盔刽忘套锌猖拎厘悍柜蜕集木率烫盏疏惜尤殷孤昨谷绑激众妙锄权可暮伊狂结粤疡苛饶虑冤甲瘁目惋暑蚂鄙军密拍晨作帆腑稿贸痘跌当薛聪抱婴喧踪禹釉褒钱门促萨胶社际丫咸 嘿祸朝缓蹲燕稼划浸怂盅药挖困视姓扒黄酸怖筹隶侈郑炉达衫腻统锻味熔渭术俭 专题四机械能和能源

集合的并,交和差运算数据结构C 课程设计

数据结构C++课程设计题目: 集合的并、交和差运算 一、设计题目 集合的并、交和差运算 二、小组成员分工说明 一个人 三、需求分析 1)运行环境(软、硬件环境) 软件环境:Microsoft Vista操作系统,Visual C++ 6.0 硬件环境:2.0GB内存 2)输入的形式和输入值的范围 运行所给的测试数据,集合的元素限定为小写字符〔a. .z〕:第一组: Set1=magazine ,Set2=paper 第二组: Set1=0120per4a6tion89,Set2=error data 输出的形式描述 程序运行并、交和差运算后得到数据,输出字符。 3)功能描述 能演示执行集合的并、交和差运算。 4)测试数据 (1) Set1=magazine ,Set2=paper, Set1∪Set2=aeginmprz,Set1∩Set2=ae,Set1-Set2=gimnz。 (2) Set1=0120per4a6tion89,Set2=error data, Set1∪Set2=adeinoprt,Set1∩Set2=aeort,Set1-Set2=inp。 四、概要设计 1)抽象数据类型定义描述 (顺序表的抽象数据类型描述) ADT Seqlist is Data 线性表的长度 Operation Seqlist 初始化值:无 动作:置顺序表的长度为0 Length 输入:无 前置条件:表已存在 功能:求表的长度

输出:返回表的长度,即表中数据元素的个数 后置条件:表不变 Get 输入:元素的序号i 前置条件:表已存在,i合法 功能:在表中取序号为i的数据元素 输出:若i合法,返回序号为i的元素值,否则抛出异常后置条件:表不变 Locate 输入:数据元素item 前置条件:表已存在 功能:在线性表中查找值等于item的元素 输出:若查找成功,返回x在表中的序号,否则返回0 后置条件:表不变 Insert 输入:插入位置i;待插元素item 前置条件:表已存在,i合法 功能:在表的第i个位置处插入一个新元素x 输出:若插入不成功,抛出异常 后置条件:若插入成功,表中增加一个新元素 Delete 输入:删除位置i 前置条件:表已存在 功能:删除表中的第i个元素 输出:若删除成功,返回被删元素,否则抛出异常 后置条件:若删除成功,表中减少一个元素 Empty 输入:无 前置条件:表已存在 功能:判断表是否为空 输出:若是空表,返回1,否则返回0 后置条件:表不变 Clear 输入:无 前置条件:无 功能:清空顺序表 输出:无 后置条件:表的长度是0 end ADT seqList 2)功能模块设计(如主程序模块设计)

集合的基本运算练习题4

集合的基本运算练习题 1.填空 ⑴如果全集},21{},2{},3{,≤<=≤=>==x x C x x B x x A R U 那么____=A C R , ________,=B C R .________=C C R ⑵设},12{},,2{,Z k k x x B Z k k x x A Z U ∈+==∈===则 .________,==B C A C R R ⑶设},2),{(},123),{(=-==+=y x y x B y x y x A 则._______=B A ⑷已知集合}41{},3{≤≤-=<=x x Q x x P ,那么._______=Q P ⑸集合3{-<=x x A 或1{},3<=>x x B x 或},4>x 则_,__________=B A .________=B A ⑹已知集合},1{},3,2,1{==A B A 则B 的子集最多可能有 个. ⑺若},1{},2{22-==+-==x y y B x y y A 则.___________,==B A B A ⑻设集合},31 2),{(},13),{(=--=-==x y y x A x y y x U 则.______=A C U 2.设全集},5{},2,12{},32,3,2{2=-=-+=A C a A a a U U 求实数a 的值. 3.已知集合},1,12,3{},3,1,{22+--=-+=a a a B a a A 若},3{-=B A 求.B A 4.已知集合}.{},42{a x x B x x A >=≤≤-= ⑴若,Φ≠B A 求实数a 的取值范围; ⑵若,A B A ≠ 求实数a 的取值范围;

实验 二 集合的并、交和差运算C++

实验二集合的并、交和差运算 // 在写代码的过程中,没有注意头结点~~~ 导致出现了很多野指针~~~ ,几乎重写. 。o 0 ~~~ // 经同学检查,发现有错误~~~ 红色部分代码已经修正 //集合的并、交和差运算 /* 选作内容 (1)集合元素的判定和子集判定运算 (2)求集合的补集 (3)集合的混合式运算表达求值 (4)集合的元素类型推广到其他类型,甚至任意类型 */ /* 测试数据: (1)Set1 ="magazine",Set2 ="paper", Set1∪Set2 ="aegimnpra",Set1∩Set2 ="ae",Set1 - Set2 ="gimnz" (2)Set1 =012oper4a6tion89",Set2 ="error date", Set1∪Set2 ="adeinoprt",Set1∩Set2 ="aeort",Set1 - Set2 ="inp" */ #include #include #include using namespace std; #define Elem Type char typedef struct ElemNode { Elem Type elem; struct ElemNode *next; }ElemNode, *Set; //-------------FunctionList------------------------------ //---------------函数原型-------------------------------- int LengthOf(Set src);//返回一个集合的长度 void CreateSet(Set dest);//创建一个新的字母集合,限定a-z void EmptySet(Set dest);//清空一个集合,保留头结点 void DestroySet(Set dest);//销毁集合

实验4集合的交并和差运算的实现

班级:计算机11-3班学号:姓名:曲玉昆成绩:_________ 实验四集合的交、并和差运算的实现 1. 问题描述 用有序单链表表示集合,实现集合的交、并和差运算。 2. 基本要求 ⑴对集合中的元素,用有序单链表进行存储; ⑵实现交、并、差运算时,不另外申请存储空间; ⑶充分利用单链表的有序性,算法有较好的时间性能。 3. 设计思想 AB。单链表的结点结构和建立算法和首先,建立两个带头结点的有序单链表表示集合请参见教材,需要注意的是:利用头插法建立有序单链表,实参数组应该是降序排列。 其次,根据集合的运算规则,利用单链表的有序性,设计交、并和差运算。 AB的元素。又属于集合⑴根据集合的运算规则,集合中包含所有既属于集合BA?因此,需查找单链表A和B中的相同元素并保留在单链表A中。算法如下: 的元素。BA或属于集合中包含所有或属于集合⑵根据集合的运算规则,集合B?A xx不相同的元素,则中进行查找,若存在和B中的每个元素,在单链表A因此,对单链表A中。算法请参照求集合的交集自行设计。将该结点插入到单链表的元素。因而不属于集合AB根据集合的运算规则,集合⑶ A-B中包含所有属于集合xx相同的结点,则将该中进行查找,若存在和AB此,对单链表中的每个元素,在单链表中删除。算法请参照求集合的交集自行设计。A结点从单链表. template struct Node{

T data; Node*next;}; template class LinkList{ public: LinkList(T a[],int n);//建立有n个元素的单链表 ~LinkList(); void Interest(Node *A, Node *B);//求交集 void Sum(Node *A,Node *B);/ void Subtraction(Node *A,Node *B); void PrintList(); void Show(int i); Node *first;}; template LinkList::LinkList(T a[],int n){ Node*s; first = new Node; first->next=NULL; for(int i=0;i; s->data=a[i]; s->next=first->next; first->next=s; }} template LinkList::~LinkList(){ Node *p,*q; p = first;//工作指针p初始化 while(p) //释放单链表的每一个结点的存储空间{ q = p;//暂存被释放结点 p = p->next;//工作指针p指向被释放结点的下一个结点,使单链表不断开 delete q; }} template void LinkList::Interest(Node *A,Node *B){ Node *pre,*p,*q; re = A;p =A ->next;q = B->next;p while(p&&q){ if(p->data < q->data){ pre->next = p->next; p = pre->next;} else if(p->data > q->data){ q = q->next;} else{ pre = p; p = p->next;

集合与常用逻辑用语练习测试题

第一练集合与常用逻辑用语 1.(集合的基本运算)已知集合A {x|x 1或x 1},集合B {x|0 x 1},则() A. A B 1 B. A B R C. C R A B 0,1 D. A C R B 【答案】D 2.(集合的基本运算)若集合A x 0 x 2,且AI D. 1 【答案】D 【答案】 A.0 或 1 B.0 或 2 C.1 或 2 D.0 或 1 或 2 【答案】C 【解析】日H 儿寒二订或.故选C. 5. (充分条件和必要条件)设x R , i 是虚数单位,则“ x 3”是“复数 z x 2 2x 3 x 1 i 为纯虚数”的 A.充分不必要条 B.必要不充分条件 C.充要条件 D.既不充分也不必要条件 【答案】C B ,贝卩集合B 可能是() 【解析】由题意得 ,因为|心匸儿所以选 B. 3.(集合的基本运算) 设集合M x | x 2 1,1 ,则集合C M N 中整数的个数为 () A.3 B.2 C.1 D.0 【解析】 Q M x| x 2,2 ,N 1,1 , 2, 1 1,1 1,2 ,集合e^N 中整 数只有0,故个数为 4.(集合间的关系) 故选C. 1, 已知集合刖,若 , 则 ()

【解析】由x 3,得x2 2x 3 3 2 2 3 3 0 , x 1 3 1 4. 2 而由{X 2x30,得X 3 .所以“x 3”是“复数z X2 2x 3 x 1 i为纯数” x 1 0 的充要条件.故选C. 6. (逻辑联结词)已知命题方程工=刃恥在〔Q + 电上有解,命题qEE”,有?+卄1 AU 恒成立,则下列命题为真命题的是() A. 沁C. D. mr.j 【答案】B 【解析】由题意知假真,所以,为真,故选B. 7. (全称量词和存在量词)命题:“ X。0,使2xo(x o a) 1 ”,这个命题的否定是() A. x 0,使2x(x a)1 B. x 0,使2x(x a) 1 C. x 0,使2x(x a)1 D. x 0,使2x(x a) 1 【答案】B 8. (全称量词和存在量词)命题“卜护…沁+ 恒成立”是假命题,则实数的取值范 围是(). A. B. 或C. 或D. 或 【答案】B 【解析】命题“ ax2- 2ax+3>0恒成立”是假命题,即存在x € R,使“ ax2- 2ax+3< 0, 当a=0时,不符合题意;当av0时,符合题意;当a>0时,△ =4a?- 12a>0?a>3, 综上:实数a的取值范围是:av0或a>3. 9. (逻辑联结词与充分条件和必要条件的结合)已知命题p , q是简单命题,则“P q 是真命题”是“ P是假命题”的()

相关主题
文本预览
相关文档 最新文档