當前位置:首頁 » 編程語言 » c語言集合交集並集
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言集合交集並集

發布時間: 2022-10-30 13:42:43

㈠ 怎樣用語言c語言實現集合的合並,交集

通過你描述的問題,正確的交集代碼如下:
void
bing(char
a[],char
b[],int
m,int
n)
{
char
d[400];
int
i=0,j=0,s=m;
for(i=0;i<m;i++)
d[i]=a[i];
for(i=0;i<n;i++){
for(j=0;j<m;j++)
{
if(b[i]==a[j])
break;
}
if(j==m)
d[s++]=b[i];
}
cout<<"集合並集是:";
for(i=0;i<s;i++)
cout<<d[i]<<"
";
}

㈡ 求集合的交集並集。。用C語言數組實現。要求效率高點的。。最好有注釋。。謝謝啦。。超高分。。

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

typedefstructnode{
intnum;
structnode*next;
}AGG;

AGG*CreateList(){//創建單循環鏈表,返回鏈表頭
AGG*head,*p;
inti,n;
printf("結點個數n=");
scanf("%d",&n);
head=p=(AGG*)malloc(sizeof(AGG));//專用頭結點
head->num=0;
printf("輸入%d整數(空格隔開): ",n);
for(i=0;i<n;++i){
p->next=(AGG*)malloc(sizeof(AGG));
scanf("%d",&p->next->num);
p=p->next;
}
p->next=head;
returnhead;
}

voidRiseSort(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;
}
elses=s->next;
}
p=p->next;
s=p->next;
}
}

voidSimplification(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;
deletes;
}
else{
p=p->next;
q=q->next;
}
}
}

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

voidInsertNode(AGG*head,intnum){
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;
}
returnhead;
}

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;
returnC;
}

AGG*DifferAgg(AGG*A,AGG*B){//返回A、B的差集A-B
AGG*head,*p,*q,*r;
inttag;
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);
returnhead;
}

voidPrintList(AGG*head){
AGG*p=head->next;
shortcounter=0;
while(p!=head){
if(counter&&counter%10==0)printf(" ");
printf("%d",p->num);
counter++;
p=p->next;
}
if(counter%10)printf(" ");
}

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

intmain(){
AGG*A,*B,*C,*D,*E;
printf("創建集合A: ");
A=CreateAgg();
printf("創建集合B: ");
B=CreateAgg();
printf("集合A的元素有: ");
PrintList(A);
printf("集合B的元素有: ");
PrintList(B);
C=MutualAgg(A,B);
printf("交集C=A∩B: ");
PrintList(C);
printf("並集D=A∪B: ");
D=MergeAgg(A,B);
PrintList(D);
printf("差集D=A-B: ");
E=DifferAgg(A,B);
PrintList(E);
freeheap(A);
freeheap(B);
freeheap(C);
freeheap(D);
freeheap(E);
printf(" ");
return0;
}

㈢ 關於集合的交集並集差集的C語言程序

#include <algorithm>
#include <iostream>
#include <iterator>
#include <list>
using namespace std;

int main()
{
int a[]={1,5,8,12,5,-5,32};
int b[]={3,5,1,-3,10};

list< int > set1(a,a+sizeof(a)/sizeof(int));
list< int > set2(b,b+sizeof(b)/sizeof(int));
list< int > result;

set1.sort();
set2.sort();

//交集
set_intersection(set1.begin(),set1.end(),set2.begin(),set2.end(),back_inserter(result));
(result.begin(),result.end(),ostream_iterator< int >(cout," "));
cout<<endl;
result.clear();

//並集
set_union(set1.begin(),set1.end(),set2.begin(),set2.end(),back_inserter(result));
(result.begin(),result.end(),ostream_iterator< int >(cout," "));
cout<<endl;
result.clear();

//差集
set_difference(set1.begin(),set1.end(),set2.begin(),set2.end(),back_inserter(result));
(result.begin(),result.end(),ostream_iterator< int >(cout," "));

return 0;
}

㈣ 實驗、集合的交、並差 用c語言

#include"stdio.h"

intinput(intd[],intn)
{
inti;
//n=0;
do
{
scanf("%d",d+n);
n+=1;
}while(d[n-1]>=0);
d[n-1]='';
returnn-1;
}
voidsort(intd[],int*n)
{
inti,j,t,k;
for(i=0;i<*n-1;i++)
{
for(j=*n-1;j>i;j--)
{ if(d[j]==d[j-1])
{
*n-=1;
for(k=j;k<*n;k++)
d[k]=d[k+1];
}
if(d[j]<d[j-1])
{
t=d[j];d[j]=d[j-1];d[j-1]=t;
}

}
}
}
intfn(intd1[],intnum1,intd2[],intnum2)
{
inti,j,m;

for(i=0;i<num1;i++)
{
m=0;
for(j=0;j<num2;j++)
{
if(d1[i]==d2[j])
{
m=1;
break;
}
}
if(m==0)
printf("%d,",d1[i]);
}
}
intmain()
{
intA[100],B[100],C[200];
intnuma,numb,n;
inti,j;
//輸入
printf("inputsortA:");
numa=input(A,0);
sort(A,&numa);
printf("inputsortB:");
numb=input(B,0);
sort(B,&numb);
//交集
printf("集合交集A∩B={");
for(i=0;i<numa;i++)
{
for(j=0;j<numb;j++)
{
if(A[i]==B[j])
{
printf("%d,",A[i]);
}

}
}
printf("} ");
//並集
n=numa+numb;
printf("集合並集A∪B={");
for(i=0;i<numa;i++)
{
C[i]=A[i];
}
for(i=numa;i<n;i++)
{
C[i]=B[i-numa];
}
sort(C,&n);
for(i=0;i<n;i++)
printf("%d,",C[i]);
printf("} ");
//集合差
printf("A-B={");
fn(A,numa,B,numb);
printf("} ");
}

㈤ c語言求並集和交集的關鍵代碼,謝謝

參考代碼如下:
#include<stdio.h>
#define N 20
int A[N]={0};
int B[N]={0};
int C[N]={0};
int main()
{
int a[N]={4,6,1,11,3},na=5;
int b[N]={6,7,4,1,9,12,10,15},nb=8;
int i,j,n;
//初始化
printf("A=");
for(i=0;i<na;++i)
A[a[i]]=1;
for(i=0;i<nb;++i)
B[b[i]]=1;
for(i=0;i<N;++i)
printf("%d",A[i]);
printf("\n");
printf("B=");
for(i=0;i<N;++i)
printf("%d",B[i]);
printf("\n");
//求交集
printf("A與B的交集:\n");
for(i=0;i<N;++i)
C[i]=A[i]&&B[i];
for(i=0;i<N;++i)
if(C[i])printf("%d ",i);
printf("\n");
//求並集
printf("A與B的並集:\n");
for(i=0;i<N;++i)
C[i]=A[i]||B[i];
for(i=0;i<N;++i)
if(C[i])printf("%d ",i);

return 0;
}

㈥ C語言用函數指針和數組指針求兩個集合的交、並集

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define NUMBER1 7
#define NUMBER2 5
void createCollect(int [],int);
void display(int [],int);
int main()
{
int collection1[NUMBER1];
int collection2[NUMBER2];
int collection3[NUMBER1+NUMBER2];
int i,j,label=0;
createCollect(collection1,NUMBER1);

for(j = 0;j < NUMBER2;j++)
{
collection2[j]=j*2;
}

printf("集合1:");
display(collection1,NUMBER1);

printf("集合2:");
display(collection2,NUMBER2);

for(i = 0; i < NUMBER1;i++)
{
//從集合1中取出元素,去遍歷集合2中的所有元素
for(j = 0;j < NUMBER2;j++)
{
//如果相同則跳出遍歷
if(collection1[i]==collection2[j])
break;
}
//判斷:此時存在兩種情況1) 當前集合1的元素與集合2的元素相同
//2)遍歷完了集合2的數組後不存在相同的元素
if(j == NUMBER2)
{
collection3[label]=collection1[i];
label++;
}

}

//把集合2的所有元素存進collection3中
for(j = 0;j < NUMBER2;j++)
{
collection3[label++]=collection2[j];
}

printf("集合1與集合2的並集為:\n");
display(collection3,label);

return 0;
}
//隨機生成一個不含重復元素的數組
void createCollect(int num[],int count)
{
//randValue:臨時隨機數存放變數
//condition:循環生成不重復的條件
int i,j,randValue,condition;
srand(time(NULL));
for(i=0;i<count;i++)
{
condition=1;
while(condition){
randValue=1+(int)rand()%10;
for(j = 0;j <= i;j++){
if(i==0){//第一個數不可能存在重復數,可以直接賦值
condition=0;
break;
}
if(randValue==num[j])
break;
if(randValue!=num[j]&&j==i-1)//當生成的隨機數與當前數組最後一位不同並且下標相等時
{
condition=0;
break;
}
}
}
num[i]=randValue;
}
}
//列印數組
void display(int num[],int count)
{
int i;
for(i=0;i<count;i++)
{
printf("%d\t",num[i]);
}
printf("\n");
}