#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int num;
struct node *next;
}AGD;
AGD *createlist()
{
AGD*head,*p;
int i,n;
printf("結點個數n=");
scanf("%d",&n);
head=p=(AGD*)malloc(sizeof(AGD));
head->num=0;
printf("輸入%d整數:\n",n);
for(i=0;i<n;i++)
{
p->next=(AGD*)malloc(sizeof(AGD));
scanf("%d",&p->next->num);
p=p->next;
}
p->next=head;
return head;
}
AGD*mutualagg(AGD*A,AGD*B) //交集
{
AGD*C,*pa,*pb,*pc,*qc;
C=pc=(AGD*)malloc(sizeof(AGD));
pc->num=0;
pa=A->next;
pb=B;
while(pa!=A)
{
pb=B->next;
while(pb!=B)
{
if(pb->num==pa->num)
{
qc=(AGD*)malloc(sizeof(AGD));
qc->num=pb->num;
pc->next=qc;
pc=qc;
}
pb=pb->next;
}
pa=pa->next;
}
pc->next=C;
return C;
}
AGD*bingagg(AGD*A,AGD*B) //并集
{
AGD*C,*pa,*pb,*pc,*qc;
C=pc=(AGD*)malloc(sizeof(AGD));
pc->num=0;
pa=A->next;
pb=B;
while(pa!=A)
{
pb=B->next;
while(pb!=B)
{
if(pb->num==pa->num&&pb->num>pa->num)
{
qc=(AGD*)malloc(sizeof(AGD));
qc->num=pb->num;
pc->next=qc;
pc=qc;
}
else
{
qc=(AGD*)malloc(sizeof(AGD));
qc->num=pa->num;
pc->next=qc;
pc=qc;
}
pb=pb->next;
}
pa=pa->next;
}
pc->next=C;
return C;
}
AGD*chaagg(AGD*A,AGD*B) //差集(屬于陣列a但不屬于陣列b)
{
AGD*C,*pa,*pb,*pc,*qc;
C=pc=(AGD*)malloc(sizeof(AGD));
pc->num=0;
pa=A->next;
pb=B;
while(pa!=A)
{
pb=B->next;
while(pb!=B)
{
if(pb->num!=pa->num)
{
qc=(AGD*)malloc(sizeof(AGD));
qc->num=pa->num;
pc->next=qc;
pc=qc;
}
pb=pb->next;
}
pa=pa->next;
}
pc->next=C;
return C;
/*
AGD*C,*pa,*pb,*pc,*qc;
C=pc=(AGD*)malloc(sizeof(AGD));
pc->num=0;
pa=A->next;
pb=B;
while(pa!=A)
{
pb=B->next;
while(pb!=B)
{
if(pb->num==pa->num)
{
continue;
}
else
{
qc=(AGD*)malloc(sizeof(AGD));
qc->num=pa->num;
pc->next=qc;
pc=qc;
}
pb=pb->next;
}
pa=pa->next;
}
pc->next=C;
return C;
*/
}
void printlist(AGD*head)
{
AGD*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(AGD*head)
{
AGD*p,*q;
p=head;
q=p->next;
while(q!=head)
{
p=q;
q=p->next;
free(p);
}
free(head);
}
int main()
{
AGD*A,*B,*C,*D,*E;
printf("創建集合A:\n");
A=createlist();
printf("創建集合B:\n");
B=createlist();
printf("集合A的元素有:\n");
printlist(A);
printf("集合B的元素有:\n");
printlist(B);
C=mutualagg(A,B);
printf("交集C=:\n");
printlist(C);
printf("并集c=:\n");
C=bingagg(A,B);
printlist(C);
printf("\n");
printf("差集c=:\n");
C=chaagg(A,B);
printlist(C);
freeheap(A);
freeheap(B);
freeheap(C);
printf("\n\n");
return 0;
}
這個怎么實作不了
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/131070.html
標籤:疑難問題
上一篇:數十年前,國內流行一股研究明史的風氣,其實研究斷代史,以明史最難研究,如果以明代開國皇帝朱元璋為研究物件的中心,那就要注意一般編史書的人不大采用、而是朱元璋親自
