C语言实现集合的交与差(C语言用单个链表实现集合的交与差)

本文讲述了用C语言实现的集合的交与差,以及用C语言实现的集合的交与差中使用的单链表所对应的知识点。希望对你有帮助,也别忘了收藏这个站点。

这篇文章的列表: 1.用C语言写的集合的并与交 2.数据结构是用C语言编写的集合的并、交、差运算的程序。 3.如何用C语言写一个集合的交和差的程序? 4.求C语言中两个集合的交、并、差。 5、实验,在C语言中设置交集,和差。 6.C语言数据结构线性表集合的并与交。 用C语言写的集合的平行交 我不知道这是不是你想要的,

如果有,不明白的可以继续探讨。

#包含stdio.h

#包含字符串. h

int main(void)

{

Char str1数据结构是用C语言编写的集合并、交、差运算的程序。 您可以使用两个一维数组,

然后用两个for循环来判断结果:交集、并集、差集。

在for循环中,用一个if判断是否是a[0]==b[j],只要有等式就放在c[0]中。

这是十字路口!!

只要要求联盟,

就让c[i]=a[i]吧,然后另一个就是c[i j 1]=b[j](因为我这里开始考虑j=0,然后交上来的时候只需要改一下,只要是a[0]!=b[j],放在c[] ~!!!!

1.结合的过程。

求集合LA和集合LB的并集

#定义NULL 0

结构JD

{ int数据;

struct JD * next

};

int find(int number,struct JD *h)

{ while(h数据)

{ if(h-data!=数字)

{ h = h-next;

继续;

}

其他

返回0;

}

返回1;

}

struct JD * make()

{ struct JD *h=NULL,* p = NULL

int数,TF;

h =(struct JD *)malloc(sizeof(struct JD));

scanf("%d ",h数据);

p = h;

白色(p数据)

{ p-next =(struct JD *)malloc(sizeof(struct JD));

p = p-next;

p-data = 0;

scanf("%d ",数字);

tf=find(数字,h);

如果(tf)

p-data =数字;

其他

继续;

}

返回h;

}

无效打印(结构JD *h)

{ while(h数据)

{ printf("%d ",h-data);

h = h-next;

}

}

结构JD * change(结构JD *la,结构JD *lb)

{ struct JD *h、*p、*s、* q;

int数,TF;

p = lb

白色(p数据)

{ number = p-data;

tf=find(数字,la);

p = p-next;

如果(tf)

{ s =(struct JD *)malloc(sizeof(struct JD));

s-data =数字;

s-next = la;

la = s;

}

其他

继续;

}

返回la;

}

void del(结构JD *h)

{ struct JD * p = h-next;

白色(h数据)

{免费(h);

h = p;

p = p-next;

}

免费(h);

}

主()

{ struct JD *la,* lb

printf(" \ n \ n将号码给LA:\ n \ n ");

la = make();

printf("\nLA是:");

打印(la);

printf(" \ n \ n将数字给LB:\ n \ n ");

lb = make();

printf("\nLB是:");

打印(磅);

la=change(la,lb);

printf(" \ n \ n \ n新的LA=LA||LB是:");

打印(la);

德尔(拉);

del(磅);

printf(" \ n \ n \ n按任意键退出...!\ n ");

getch();

}

* * * * * * * *程序运行结果* * * * * * * * * * *

把号码给洛杉矶:

1↓

2↓

3↓

5↓

0↓

洛杉矶是:1 2 3 5

把号码给LB:

6↓

7↓

3↓

2↓

9↓

0↓

磅是:6 7 3 2 9

新的LA=LA||LB是:9 7 6 1 2 3 5

-

按任意键退出...!

如何用C语言写一个计算集合交差的程序? /*第一,你这个问题的意思不清楚。我只能进两套。[投入保证相互性] */

# includestdio.h

#includestring.h

void main()

{

char temp[60]= " ",str1[30]= " ",str2[30]= " ",I,j,l1,l2,ch;

printf(" str 1:");

gets(str 1);

printf(" str 2:");

gets(str 2);

L1 = strlen(str 1);

L2 = strlen(str 2);

//交集

printf(" \ n intersection:\ n { ");

for(I = 0;il1我)

for(j = 0;jl2j)

if(str1[i]==str2[j]) printf("%c,",str 1[I]);

printf(" \ b } \ n ");

//懒联合的算法:合并-排序-删除是一样的。

printf(" \ n年号:\ n { ");

/* merge */sprintf (temp," %s% s ",str 1,str 2);

/*排序*/

for(I = 0;il1 L2-1;我)

for(j = I ^ 1;jl1 l2j)

if(temp[i]temp[j])

{

char ch

ch = temp[I];

temp[I]= temp[j];

temp[j]= ch;

}

/*删除相同的字符*/

for(I = j = 1;il1 l2我)

if(temp[i]!= temp[j-1])temp[j]= temp[I];

temp[j]= ' \ 0 ';

for(I = 0;ij;我)

printf("%c,",temp[I]);

printf(" \ b } \ n ");

//CuA

printf(" \ nCuA:\ n { ");

for(ch = ' a ';ch = ' zch)

{

for(I = 0;il1我)

if(ch = = str 1[I])goto NOT;

printf("%c ",ch);

NOT:if(0);

}

printf(" \ b } \ n ");

//幼崽

printf(" \ nCuB:\ n { ");

for(ch = ' a ';ch = ' zch)

{

for(I = 0;il2我)

if(ch = = str 2[I])goto not 2;

printf("%c ",ch);

not 2:if(0);

}

printf(" \ b } \ n ");

}

用C语言求两个集合的交、并、差集 #包含stdio.h

#包含字符串. h

#包含conio.h

# define arr _ len255/*数组长度上限*/

# defineelementtype char/*集合元素数据类型*/

/*集合数据结构*/

typedef结构集{

elemType数据[ARR _ LEN];

int长度;

}设置;

/*初始化集合*/

void initSet (set *S) {

s-长度= 0;

}

/*交集*/

/* A和B的交(A∩B):同时属于A和B的元素的集合*/

int setIntersection(集合A,集合B,集合*dest) {

int i = 0,j = 0,k = 0;

目标长度= 0;

for(I = 0;iA .长度;I) {/*外部循环遍历A */

for(j = 0;jB.lengthJ) {/*内部循环遍历B */

If (A.data[i] == B.data[j]) {/*同时属于A和B的元素存储在dest */

dest-data[k]= a . data[I];

k;

}

}

}

dest长度= k;

if(目标长度)

返回1;

其他

返回0;

}

/*联合*/

/* A和B的并(A∪B):A和B的所有元素的集合*/

int setUnion(集合A,集合B,集合*dest) {

int i = 0,j = 0,k = 0;

目标长度= 0;

for(I = 0;iA .长度;I) {/*外部循环遍历A */

for(j = 0;jB.lengthJ) {/*内部循环遍历B */

If (A.data[i] == B.data[j]) /*同时属于A和B的元素,skip */

打破;

}

If (j == B.length) {/*属于A但不属于B的元素存储在dest */

dest-data[k]= a . data[I];

k;

}

}

for(j = 0;jB.lengthj){/* b的所有元素,存储在dest */

dest-data[k]= b . data[j];

k;

}

dest长度= k;

if(目标长度)

返回1;

其他

返回0;

}

/*补集*/

/* B在A (A \ b)中的相对补集:属于A但不属于B的元素的集合*/

int setComplement(集合A,集合B,集合*dest) {

int i = 0,j = 0,k = 0;

目标长度= 0;

for(I = 0;iA .长度;I) {/*外部循环遍历A */

for(j = 0;jB.lengthJ) {/*内部循环遍历B */

If (A.data[i] == B.data[j]) /*同时属于A和B的元素,skip */

打破;

}

If (j == B.length) {/*属于A但不属于B的元素存储在dest */

dest-data[k]= a . data[I];

k;

}

}

dest长度= k;

if(目标长度)

返回1;

其他

返回0;

}

/*打印收藏内容*/

int printSet(集合){

int I;

if (S.length == 0) {

puts("集合是空的!");

返回0;

}

for(I = 0;iS.length我)

printf ("%c ",s . data[I]);

putchar(' \ n ');

返回1;

}

int main (void) {

设置A、B;

集AIB、AUB、ACB;/*交、并和补*/

initSet(A);initSet(B);

initSet(AIB);initSet(AUB);initSet(ACB);

strcpy (A.data," 123 ");

a . length = strlen(a . data);

strcpy (B.data," 4532 ");

b . length = strlen(b . data);

printf(" A:\ t ");

printSet(A);

printf(" B:\ t ");

printSet(B);

putchar(' \ n ');

printf(" A∩B:\ t ");

setIntersection (A,B,AIB);

printSet(AIB);

printf(" A∪B:\ t ");

setUnion(甲、乙、AUB);

printSet(AUB);

printf(" A \ B:\ t ");

setComplement (A、B、ACB);

printSet(ACB);

getch();/*屏幕持久性*/

返回0;

}

c语言用于实验和集合的交集和并集。 #包含“stdio.h”

int输入(int d[],int n)

{

int I;

//n = 0;

{

scanf("%d ",d n);

n = 1;

} while(d[n-1]= 0);

d[n-1]= ' \ 0 ';

返回n-1;

}

void sort(int d[],int *n)

{

int i,j,t,k;

for(I = 0;I * n-1;我)

{

for(j = * n-1;纪;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;

}

}

}

}

int fn(int d1[],int num1,int d2[],int num2)

{

int i,j,m;

for(I = 0;inum1我)

{

m = 0;

for(j = 0;jnum2j)

{

if(d1[i]==d2[j])

{

m = 1;

打破;

}

}

如果(m==0)

printf("%d ",D1[I]);

}

}

int main()

{

int A[100],B[100],C[200];

int numa,num,n;

int i,j;

//输入

printf("输入排序A:");

numa=input(A,0);

sort(A,numa);

printf("输入排序B:");

number = input(B,0);

sort(B,number);

//交集

Printf("设置交集A∩B = { ";

for(I = 0;inuma我)

{

for(j = 0;jnumbj)

{

if(A[i]==B[j])

{

printf("%d ",A[I]);

}

}

}

printf(" \ b } \ n \ n ");

//联合

n=numa号;

printf(" set union A∪B = { ";

for(I = 0;inuma我)

{

c[I]= A[I];

}

for(I = numa;在;我)

{

c[I]= B[I-numa];

}

sort(C,n);

for(I = 0;在;我)

printf("%d ",C[I]);

printf(" \ b } \ n \ n ");

//设置差异

printf(" A-B = { ");

fn(A,numa,B,num);

printf(" \ b } \ n \ n ");

}

C语言数据结构线性表集合的并与交 # includestdio.h

#includestdlib.h

#定义编号1024

void排序(char * pt);

void bingji();

void吉焦();

void chaji();

char str1[N],str 2[N];

int main()

{

Printf("请输入两个全部由小写字母组成的字符串,每行一个:\ n ");

gets(str 1);

gets(str 2);

丙吉();

吉焦();

chaji();

系统(“暂停”);

返回EXIT _ SUCCESS

}

空排序(字符*点)

{

int i,j;

char c;

for(I = 0;istrlen(pt)-1;我)

{

for(j = strlen(pt)-1;纪;j -)

{

if(pt[j]pt[j-1])

{

c = pt[j-1];

pt[j-1]= pt[j];

pt[j]= c;

}

}

}

}

int iscontain(char a[],int len,char c)

{

int I;

for(I = 0;ilen我)

{

if(c==a[i])

{

返回1;

}

}

返回0;

}

虚空冰姬()

{

int i,j,len,len1=strlen(str1),len 2 = strlen(str 2);

char * buf =(char *)calloc(len 1 len 2 1,sizeof(char));

for(i=0,j=0,len = 0;ilen1 | | jlen2)

{

if(ilen1)

{

如果(!iscontain(buf,len,str1[i])

{

buf[len]= str 1[I];

}

我;

}

if(jlen2)

{

如果(!iscontain(buf,len,str2[j])

{

buf[len]= str 2[j];

}

j;

}

}

buf[len]= ' \ 0 ';

sort(buf);

printf("%s\n ",buf);

免费(buf);

}

无效吉焦()

{

int i,len,len1=strlen(str1),len 2 = strlen(str 2);

char buf[N];

for(i=0,len = 0;istrlen(str 1);我)

{

如果(!iscontain(buf,len,str1[i]) iscontain(str2,len2,str1[i])

{

buf[len]= str 1[I];

}

}

buf[len]= ' \ 0 ';

sort(buf);

printf("%s\n ",buf);

}

void chaji()

{

int i,len,len1=strlen(str1),len 2 = strlen(str 2);

char buf[N];

for(i=0,len = 0;ilen1我)

{

如果(!iscontain(buf,len,str1[i])!iscontain(str2,len2,str1[i])

{

buf[len]= str 1[I];

}

}

buf[len]= ' \ 0 ';

sort(buf);

printf("%s\n ",buf);

}

对于C语言中集合的交集和差集的介绍就到此为止吧。感谢您花时间阅读本网站的内容。别忘了多找找C语言中集合与单链表和C语言的交集和区别。

相关文章

发表新评论