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语言的交集和区别。
最后更新于 2023-10-06 12:15:50 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章
- c语言一点一点pdf下载(c语言教程pdf电子书)
- 学习C语言的Oj系统(ojc语言完整答案)
- 用类C语言实现(采用C语言)
- c语言求常数e的近似值(写程序求常数e的近似值)
- 底层C语言的编程标准(底层编程语言都是C语言)