Math Dash的求两个集合的交集,就是把两个集合的交集存放在第一个集合中的程序
程序员文章站
2024-02-04 08:18:16
...
代码如下:
#include <stdio.h>
#include <stdlib.h>
struct LNode
{
int data;
struct LNode *next;
};
struct LNode *a0()
{
struct LNode *a;
a=(struct LNode*)malloc(sizeof(struct LNode));//*分配内存
a->next=NULL;
return a;
}
struct LNode *a1(int i)
{
int *b,c;
b=(int*)malloc(i*sizeof(int));//*分配内存
for(c=0;c<i;c++)
{
b[c]=rand()%10;//*为b[c]赋值
}
for(;;)
{
for(c=0;c<i-1;c++)
{
if(b[c]>b[c+1])//*如果一个数大于下一个数
{
int d;//*交换数
d=b[c];
b[c]=b[c+1];
b[c+1]=d;
}
if(b[c]==b[c+1])//*如果一个数等于下一个数
{
int d;
for(d=c;d<i;d++)//*删除
{
b[d]=b[d+1];
}
i--;
}
}
for(c=0;c<i-1;c++)
{
if(b[c]>=b[c+1])//*如果有一个数大于等于下一个数
{
break;
}
}
if(c==i-1)//*如果到达末尾
{
break;
}
}
struct LNode *a,*e;//*创建一个链表
a=a0();//*初始化
e=a;
for(c=0;c<i;c++)
{
struct LNode *d;
d=(struct LNode*)malloc(sizeof(struct LNode));//*创建一个新结点
d->data=b[c];//*为新结点的数据域赋值
d->next=NULL;//*指针域指向空
e->next=d;//*e指针域指向新结点
e=d;//*因为e=e->next表示指向下一个结点,且e->next=d,所以e=d表示指向下一个结点
}
return a;
}
void jiance_datas(struct LNode *a,struct LNode *b)
{
struct LNode *e,*f;
e=a->next;
f=b->next;
struct LNode *h,*j;
j=a0();
h=j;
while(e)
{
struct LNode *g;
g=f;
while(g)
{
if(e->data==g->data)
{
h->next=g;
h=h->next;
}
g=g->next;
}
e=e->next;
}
h->next=NULL;
struct LNode *i;
i=a;
while(i->next)
{
i=i->next;
}
i->next=j->next;
}
void jie_mian_system()
{
char o[]="Math Dash的求两个集合的交集,就是把两个集合的交集存放在第一个集合中的程序";
char p[strlen(o)+6];
sprintf(p,"title %s",o);
system(p);
puts(o);
srand((unsigned)time(NULL));
struct LNode *a,*b;
b=a1(10);//*创建一个集合
a=b->next;
while(a)
{
printf("%d\n",a->data);
a=a->next;
}
printf("\n");
struct LNode *c,*d;
d=a1(7);
c=d->next;
while(c)
{
printf("%d\n",c->data);
c=c->next;
}
printf("\n");
jiance_datas(&(*b),&(*d));
struct LNode *e;
e=b->next;
while(e)
{
printf("%d\n",e->data);
e=e->next;
}
system("pause");
}
main()
{
jie_mian_system();
return 0;
}
程序运行如下:
Math Dash的求两个集合的交集,就是把两个集合的交集存放在第一个集合中的程序
0
2
3
4
7
90
1
4
6
80
2
3
4
7
9
0
4
6
8
请按任意键继续. . .