用单链表实现集合的并,交,差运算.急啊~~3号之前要.数据结构的实验1、用有序单链表表示集合,在建立单链表时,对于每一个新结点都要在现有的链表中判断它的插入位置,如此,即可建立一个有

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/04 04:37:57
用单链表实现集合的并,交,差运算.急啊~~3号之前要.数据结构的实验1、用有序单链表表示集合,在建立单链表时,对于每一个新结点都要在现有的链表中判断它的插入位置,如此,即可建立一个有

用单链表实现集合的并,交,差运算.急啊~~3号之前要.数据结构的实验1、用有序单链表表示集合,在建立单链表时,对于每一个新结点都要在现有的链表中判断它的插入位置,如此,即可建立一个有
用单链表实现集合的并,交,差运算.急啊~~3号之前要.
数据结构的实验
1、用有序单链表表示集合,在建立单链表时,对于每一个新结点都要在现有的链表中判断它的插入位置,如此,即可建立一个有序的单链表, 同时,舍去相同的字符.
2、集合的元素限定为小写字母字符[‘a’……’z’],
3、要求实现的算法:
1)两个集合的并运算
例如:text1=”space” , text2 = “status”
text1 ∪ text2 = “acepstu”
2)两个集合的交运算
例如:text1=”space” , text2 = “status”
text1 ∩ text2 = “as”
3)两个集合的差运算
例如:text1=”space” , text2 = “status”
text1 - text2 = “cep”
是用C语言的~

用单链表实现集合的并,交,差运算.急啊~~3号之前要.数据结构的实验1、用有序单链表表示集合,在建立单链表时,对于每一个新结点都要在现有的链表中判断它的插入位置,如此,即可建立一个有
#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);
newNode->data=p2->data;
p->next=newNode;
p=newNode;
p->next=NULL;
}
}
p1=p1->next;
p2=p2->next;
}
while(p1!=NULL)
{
if(Check(p1->data,Head)==TRUE)
{
Node *newNode=(Node*)malloc(SIZE);
newNode->data=p1->data;
p->next=newNode;
p=newNode;
p->next=NULL;
}
p1=p1->next;
}
while(p2!=NULL)
{
if(Check(p2->data,Head)==TRUE)
{
Node *newNode=(Node*)malloc(SIZE);
newNode->data=p2->data;
p->next=newNode;
p=newNode;
p->next=NULL;
}
p2=p2->next;
}
return Head;
}
//集合A中的元素,B中是否存在
int IsExist(char data,LinkList Head)
{
Node *p=Head->next;
int flag=FALSE;
while(p!=NULL)
{
if(p->data==data)
return flag=TRUE;
p=p->next;
}
return flag;
}
int IsExist2(char data,LinkList Head)
{
Node *p=Head->next;
int flag=FALSE;
while(p!=NULL)
{
if(p->data==data)
return flag;
p=p->next;
}
return flag=TRUE;
}
//两个集合的差集
LinkList Deprive(LinkList Head1,LinkList Head2)
{
LinkList Head=(Node*)malloc(SIZE);
Node *p=Head;
Node *p1=Head1->next;
while(p1!=NULL)
{
if(IsExist2(p1->data,Head2)==1)
{
Node *newNode=(Node*)malloc(SIZE);
newNode->data=p1->data;
p->next=newNode;
p=newNode;
p->next=NULL;
}
p1=p1->next;
}
return Head;
}
//两个集合交集
LinkList Insection(LinkList Head1,LinkList Head2)
{
Node *p1=Head1->next;
//Node *p2=Head2->next;
LinkList Head=(Node*)malloc(SIZE);
Head->data='\0';Head->next=NULL;
Node *p=Head;
while(p1!=NULL)
{
if(IsExist(p1->data,Head2)==1)
{
Node *newNode=(Node*)malloc(SIZE);
newNode->data=p1->data;
p->next=newNode;
p=newNode;
p->next=NULL;
}
p1=p1->next;
}
return Head;
}
//打印集合元素
void PrintLinkList(LinkList Head)
{
Node *p=Head->next;
while(p!=NULL)
{
coutnext;
}
cout

用单链表实现集合的并,交,差运算.急啊~~3号之前要.数据结构的实验1、用有序单链表表示集合,在建立单链表时,对于每一个新结点都要在现有的链表中判断它的插入位置,如此,即可建立一个有 “集合的交、并、差运算的作用” VC++编写 实现2个集合的并、交和差的运算介绍:A和B的并集:A和B的交集:A和B的差集:实现2个集合的并、交和差的运算.提示:集合的数据元素为整数,A、B集合最多允许25个数据元素.程序允 数据结构与算法实习题介绍:A和B的并集:A和B的交集:A和B的差集:实现2个集合的并、交和差的运算.提示:集合的数据元素为整数,A、B集合最多允许25个数据元素.分别用顺序结构和链式结 编写一个C++程序,让计算机来完成两个集合的交、并、差、笛卡儿积运算集合的运算:交运算:设A,B是两个集合,则A∩B={x|(xA)并且(xB)}并运算:设A,B是两个集合,则A∪B={x|(xA)或(xB)}差运算 怎样用C语言实现集合的并交呢? 借助什么求集合的运算的交,并,补 10.关系代数是以( )为基础的运算,其基本操作是并、交、差、笛卡儿积、选择和投影A.关系运算 B.谓词运算 C.集合运算 D.代数运算 数据结构 用c语言写的 集合的并、交和差运算的程序基本要求:(1)集合的元素限定为小写字母字符〔‘a’..'z'〕.(2)演示程序以用户和计算机的对话方式执行.实现提示:以有序链表表示 求高手解释一个概率论的小知识点!概率论中运算可以浓缩成两种运算:并与对立这是因为:交运算可以通过并与对立来实现差运算可以通过对立与交来实现请问这个是为什么呀?书上没有举 用顺序表和单链表分别实现求集合的并集、交集和差集. c语言 集合的差,交,并,笛卡尔积的运算.例如A={2,3,4,5,6,7,8}B={2,3,4,5,11,25}怎么算出A与B的交,并,差,笛卡尔积.主要是怎么么运算出结果的,假入结果的集合是C, 经典集合的并,交,补,运算与直积运算有什么关系,又有什么本质的区别?为什么要定义直积德运算?急呀,大师 关系代数的5种基本运算是:并 差 选择 投影 笛卡尔积 ,还是 并 差 交 选择 投影? 集合的补运算和差运算有什么区别 集合运算里面“~∪是并,∩是交,但是~ 关于集合差的运算编程中集合差的运算法则是什么? 本人碰见一道C语言难题,利用C语言实现:求任意两个集合的交集、并集、差集,