数据结构 用c语言写的 集合的并、交和差运算的程序基本要求:(1)集合的元素限定为小写字母字符〔‘a’..'z'〕.(2)演示程序以用户和计算机的对话方式执行.实现提示:以有序链表表示
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/21 07:35:04
![数据结构 用c语言写的 集合的并、交和差运算的程序基本要求:(1)集合的元素限定为小写字母字符〔‘a’..'z'〕.(2)演示程序以用户和计算机的对话方式执行.实现提示:以有序链表表示](/uploads/image/z/1622851-43-1.jpg?t=%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84+%E7%94%A8c%E8%AF%AD%E8%A8%80%E5%86%99%E7%9A%84+%E9%9B%86%E5%90%88%E7%9A%84%E5%B9%B6%E3%80%81%E4%BA%A4%E5%92%8C%E5%B7%AE%E8%BF%90%E7%AE%97%E7%9A%84%E7%A8%8B%E5%BA%8F%E5%9F%BA%E6%9C%AC%E8%A6%81%E6%B1%82%EF%BC%9A%EF%BC%881%EF%BC%89%E9%9B%86%E5%90%88%E7%9A%84%E5%85%83%E7%B4%A0%E9%99%90%E5%AE%9A%E4%B8%BA%E5%B0%8F%E5%86%99%E5%AD%97%E6%AF%8D%E5%AD%97%E7%AC%A6%E3%80%94%E2%80%98a%E2%80%99..%27z%27%E3%80%95.%EF%BC%882%EF%BC%89%E6%BC%94%E7%A4%BA%E7%A8%8B%E5%BA%8F%E4%BB%A5%E7%94%A8%E6%88%B7%E5%92%8C%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%9A%84%E5%AF%B9%E8%AF%9D%E6%96%B9%E5%BC%8F%E6%89%A7%E8%A1%8C.%E5%AE%9E%E7%8E%B0%E6%8F%90%E7%A4%BA%EF%BC%9A%E4%BB%A5%E6%9C%89%E5%BA%8F%E9%93%BE%E8%A1%A8%E8%A1%A8%E7%A4%BA)
数据结构 用c语言写的 集合的并、交和差运算的程序基本要求:(1)集合的元素限定为小写字母字符〔‘a’..'z'〕.(2)演示程序以用户和计算机的对话方式执行.实现提示:以有序链表表示
数据结构 用c语言写的 集合的并、交和差运算的程序
基本要求:(1)集合的元素限定为小写字母字符〔‘a’..'z'〕.
(2)演示程序以用户和计算机的对话方式执行.
实现提示:
以有序链表表示集合.
数据结构 用c语言写的 集合的并、交和差运算的程序基本要求:(1)集合的元素限定为小写字母字符〔‘a’..'z'〕.(2)演示程序以用户和计算机的对话方式执行.实现提示:以有序链表表示
以下程序由标准C实现,并经严格测试.程序通过单链表存储集合
#include
#include
typedef struct pointer{
char dat;
struct pointer *link;
} pointer;
void readdata(pointer *head){ //读集合
pointer *p;
char tmp;
printf("input data ('0' for end):");
scanf("%c",&tmp);
while(tmp!='0')
{
if((tmp'z'))
{
printf("输入错误!必须为小写字母!\n");
return;
}
p=(pointer *)malloc(sizeof(struct pointer));
p->dat=tmp;
p->link=head->link;
head->link=p;
scanf("%c",&tmp);
}
}
void disp(pointer *head){ //显示集合数据
pointer *p;
p=head->link;
while(p!=NULL)
{
printf("%c ",p->dat);
p=p->link;
}
printf("\n");
}
void bing(pointer *head1,pointer *head2, pointer *head3){ //计算集合1与集合2的并
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p1->dat;
p3->link=head3->link;
head3->link=p3;
p1=p1->link;
}
p2=head2->link;
while(p2!=NULL)
{
p1=head1->link;
while((p1!=NULL)&&(p1->dat!=p2->dat))
p1=p1->link;
if(p1==NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p2->dat;
p3->link=head3->link;
head3->link=p3;
}
p2=p2->link;
}
}
void jiao(pointer *head1,pointer *head2, pointer *head3){ //计算集合1与集合2的交
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p2=head2->link;
while((p2!=NULL)&&(p2->dat!=p1->dat))
p2=p2->link;
if((p2!=NULL)&&(p2->dat=p1->dat))
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p1->dat;
p3->link=head3->link;
head3->link=p3;
}
p1=p1->link;
}
}
void cha(pointer *head1,pointer *head2, pointer *head3){ //计算集合1与集合2的差
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p2=head2->link;
while((p2!=NULL)&&(p2->dat!=p1->dat))
p2=p2->link;
if(p2==NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p1->dat;
p3->link=head3->link;
head3->link=p3;
}
p1=p1->link;
}
}
main(){
pointer *head1,*head2,*head3;
head1=(pointer *)malloc(sizeof(struct pointer));
head1->link=NULL;
head2=(pointer *)malloc(sizeof(struct pointer));
head2->link=NULL;
head3=(pointer *)malloc(sizeof(struct pointer));
head3->link=NULL;
printf("输入集合1:\n");
readdata(head1);
printf("输入集合2:\n");
readdata(head2);
printf("集合1为:\n");
disp(head1);
printf("集合2为:\n");
disp(head2);
printf("集合1与集合2的并为:\n");
bing(head1,head2,head3);
disp(head3);
head3->link=NULL;
printf("集合1与集合2的交为:\n");
jiao(head1,head2,head3);
disp(head3);
head3->link=NULL;
printf("集合1与集合2的差为:\n");
cha(head1,head2,head3);
disp(head3);
}
测试用例为(0表示集合输入结束):
fdsa0
savc0