问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...两个集合A,B(成员为整数),求两个集合的交集,并集,结果存 放于A中...

发布网友 发布时间:2024-10-04 03:52

我来回答

1个回答

热心网友 时间:2024-10-21 16:21

#include <stdio.h>
#include <malloc.h>

typedef struct node {
int num;
struct node *next;
}AGG;

AGG *CreateList() { // 创建单循环链表,返回链表头
AGG *head,*p;
int i,n;
printf("结点个数n = ");
scanf("%d",&n);
head = p = (AGG *)malloc(sizeof(AGG)); // 专用头结点
head->num = 0;
printf("输入 %d 整数(空格隔开):\n",n);
for(i = 0; i < n; ++i) {
p->next = (AGG *)malloc(sizeof(AGG));
scanf("%d",&p->next->num);
p = p->next;
}
p->next = head;
return head;
}

void RiseSort(AGG *head) { // 上升排序
AGG *p,*s,*pt; 
p = head;
s = p->next;
while(p->next != head) {
while(s->next != head) {
if(p->next->num > s->next->num) {
pt = p->next;
p->next = s->next;
s->next = p->next->next;
p->next->next = pt;
}
else s = s->next;
}
p = p->next;
s = p->next;
}
}

void Simplification(AGG *head) { // 去除相同的集合元素
AGG *p,*q,*s;
p = head->next;
q = p->next;
while(q != head) {
if(p->num == q->num) {
p->next = q->next;
s = q;
q = q->next;
delete s;
}
else {
p = p->next;
q = q->next;
}
}
}

AGG *CreateAgg() {
AGG *head;
head = CreateList();
RiseSort(head);;
Simplification(head);
return head;
}

void InsertNode(AGG *head,int num) {
AGG *t,*p = head;
while(p->next != head) {
if(p->next->num == num) return; 
if(p->next->num < num) p = p->next;
else {
t = (AGG *)malloc(sizeof(AGG));
t->num = num;
t->next = p->next;
p->next = t;
return;
}
}
t =(AGG *)malloc(sizeof(AGG));
t->num = num;
p->next = t; 
t->next = head;     // 插入在链表尾的处理
}

AGG *MergeAgg(AGG *A,AGG *B) {  // A∪B
AGG *head,*pa,*pb,*pc,*qc;
head = pc = (AGG *)malloc(sizeof(AGG));
pa = A->next;
while(pa != A) {
qc = (AGG *)malloc(sizeof(AGG));
qc->num = pa->num;
pc->next = qc;
pc = qc;
pa = pa->next;
}
pc->next = head;
pb = B->next;
while(pb != B) {
InsertNode(head,pb->num);
pb = pb->next;
}
return head;
}

AGG *MutualAgg(AGG *A,AGG *B) {  // A∩B
AGG *C,*pa,*pb,*pc,*qc;
C = pc = (AGG *)malloc(sizeof(AGG));
pc->num = 0;
pa = A->next;
pb = B;
while(pa != A) {
pb = B->next;
while(pb != B) {
if(pb->num == pa->num) {
qc = (AGG *)malloc(sizeof(AGG));
qc->num = pb->num;
pc->next = qc;
pc = qc;
}
pb = pb->next;
}
pa = pa->next;
}
pc->next = C;
return C;
}

AGG *DifferAgg(AGG *A,AGG *B) { // 返回A、B的差集 A-B
AGG *head,*p,*q,*r;
int tag;
head = r = (AGG *)malloc(sizeof(AGG));
for(p = A->next; p != A; p = p->next) {
tag = 1;
for(q = B->next; q != B && tag; q = q->next)
tag = p->num != q->num;
if(tag) {
r->next = (AGG *)malloc(sizeof(AGG));
r = r->next;
r->num = p->num;
}
}
for(p = B->next; p != B; p = p->next) {
tag = 1;
for(q = A->next; q != A && tag; q = q->next)
tag = p->num != q->num;
if(tag) {
r->next = (AGG *)malloc(sizeof(AGG));
r = r->next;
r->num = p->num;
}
}
r->next = head;
RiseSort(head);
return head;
}

void PrintList(AGG *head) {
AGG *p = head->next;
short counter = 0;
while(p != head) {
if(counter && counter%10 == 0) printf("\n");
printf("%5d",p->num);
counter++;
p = p->next;
}
if(counter % 10) printf("\n");
}

void freeheap(AGG *head) {
AGG *p,*q;
p = head;
q = p->next;
while(q != head) {
p = q;
q = p->next;
free(p);
}
free(head);
}

int main() {
AGG *A,*B,*C,*D,*E;
printf("创建集合 A:\n");
A = CreateAgg();
printf("创建集合 B:\n");
B = CreateAgg();
printf("集合A的元素有:\n");
PrintList(A);
printf("集合B的元素有:\n");
PrintList(B);
C = MutualAgg(A,B);
printf("交集 C = A∩B:\n");
PrintList(C);
printf("并集 D = A∪B :\n");
D = MergeAgg(A,B);
PrintList(D);
printf("差集 D = A-B :\n");
E = DifferAgg(A,B);
PrintList(E);
freeheap(A);
freeheap(B);
freeheap(C);
freeheap(D);
freeheap(E);
printf("\n\n");
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 为什么在修改密码的时候每次都会有一个安全证书过期或无效的对话框呢... 中国科学技术馆啥时间开放 手机的麦克风可以录声音,但是把耳机插上就说不了话了,用什么耳机都不行... 古得奶是什么意思 ...分,农历6月13日,父亲姓丁,母亲姓陈请高人帮忙起个名字, ...data BUFFER[1]={0}是什么意思? 可以举例说下吗? ...a[i]+='0';//a[i]==15;15+1+80 = 96呀//啥意思?! c#二进制文件的输出.Console.Write("{0,7:x}",data[i]);什么意思 二次函数顶点坐标式二次函数的顶点坐标的公式的介绍 ...求指教。例子:uint8 data temp_str[8]=0,FE1_flag=0,i=0;_百度知... 演员郑恺有多高郑凯最后为什么选择与苗苗走到一起 郑凯女友程晓明身高 C语言输出出现次数最多的单词 数据结构——如何解决删除顺序表的偶数项问题? 猫在客厅电脑在卧室,不走明线怎么办? 发现少给客厅留有线电视线和插座。大家给想想办法呀~急呀· 三个卧室有必要都留网线吗-客厅网线怎么拉到卧室不想走明线_百度... c语言有道题不明白,为什么结果得5.5,麻烦讲解一下 想给客厅装上5.1的音箱(家庭影院),但是装修时没有预留布线槽怎么办呢... ...没搞懂为什么不可以 详细解释一下 求教 回答满意 一定增加悬赏_百度... C# List集合Linq取交集、并集、差集、去重 ...集合a集合b和全集 求两个集合的交集 并集 补集 差集 C语言,选择结构。输入两个闭区间,求他们的交集。 我在QQ中心修改密码时,出现安全警报说证书已过期或无效,验证码没内容... 我在QQ修改密码,然后就出现什么安全证书有问题,然后出现该站点安全证书... ...火零 线进第一个插座再返上方线槽然后进入第二个插座.……_百度知 ... 水电增加了一点插座,居然要1钱块!合理嘛? 强电如何分出插座 出租车司机没有服务证,发生事故,保险公司是否理赔 四川哪个火锅底料好 拼多多直通车作图(拼多多直通车自定义图片) 出租车司机没有上岗证,商业险是否能理赔 出租车司机不等上完客就开走造成的乘客受伤20天后才报保险公司理赔能受... 关于新申请的淘宝APPkey的问题,诚请资深淘客前辈作答。 出租车由没有出租车驾驶资格的司机驾驶出的全责事故,保险公司可以拒赔吗... 冰箱工作正常就是不制冷 为什么好多淘客软件都不需要输入appkey 淘客帝国的产品调用不出来怎么办 冰箱突然开机了不制冷 ...九二, 九三,九四,六五(变爻),上六恒卦,变卦为姤卦非常感谢