关于数据结构顺序表求集合交集并集的问题
解决时间 2021-01-28 03:24
- 提问者网友:姑娘长的好罪过
- 2021-01-27 11:49
#include
#define list_init_size 100
#define listincrement 10
typedef struct
{
char elem[80];
int length;
}sqlist;
void creatsq (sqlist *l,char c[],int n)
{
int i;
for(i=0;i<=n;i++)
{
l->elem[i]=c[i];
}
l->length=n;
}
void printsq (sqlist l)
{
int i;
for(i=0;i{
printf("%c",l.elem[i]);
}
}
void bing(sqlist l1,sqlist l2,sqlist *l3)
{
int i,j,k=0;
l3->length=l1.length;
for(i=0;i{
l3->elem[i]=l1.elem[i];
}
for(j=0;j{
while(l2.elem[j]!=l1.elem[k])
{
k++;
if(k>=l3->length)
{
break;
l3->elem[l3->length]=l2.elem[j];
l3->length++;
}
}
k=0;
}
}
void jiao(sqlist l1,sqlist l2,sqlist *l3)
{
int i,j=0,k=0;
for(i=0;i{
while( (jj++;
if(jl3->elem[k++]=l1.elem[i];
}
l3->length=k;
}
void main()
{
sqlist l1,l2,l3;
char c1[80],c2[80];
int i,j,k,n,m;
//输入集合1
printf("请输入集合1的元素个数:\n");
scanf("%d",&i);
printf("请输入集合1的元素:\n");
for (j=0; j{
scanf("%c",&c1[j]);
}
creatsq(&l1,c1,i);
//输入集合2
printf("请输入集合2的元素个数:\n");
scanf("%d",&k);
printf("请输入集合2的元素:\n");
for (n=0; n{
scanf("%c",&c2[n]) ;
}
creatsq(&l2,c2,k);
while(1)
{
printf("请选择需要的功能:1-求交集;2-求并集\n");
scanf("%d",&m);
switch(m)
{
case 1:
{
jiao(l1,l2,&l3);
printsq(l3);
break;
}
case 2:
{
bing(l1,l2,&l3);
printsq(l3);
break;
}
default:printf("error\n");
}
}
}
以上程序,运行的时候总是输出不了结果,不解,真心求助,跪求大神帮忙
最佳答案
- 五星知识达人网友:琴狂剑也妄
- 2021-01-27 12:55
#include
#define list_init_size 100
#define listincrement 10
typedef struct
{
char elem[80];
int length;
}sqlist;
//
void creatsq (sqlist *l,char c[],int n)
{
int i;
for(i=0;i<=n;i++)
{
l->elem[i]=c[i];
}
l->length=n;
}
//输出集合的元素
void printsq (sqlist l)
{
int i;
printf("该集合的元素为\n");
for(i=0;i
{
printf("%c ",l.elem[i]);
}
printf("\n");
}
void bing(sqlist l1,sqlist l2,sqlist *l3)
{
int i,j,k=0;
l3->length=l1.length;
for(i=0;i
{
l3->elem[i]=l1.elem[i];
}
for(i=0;i
{
for(j=0;j
{
if(l2.elem [i]==l1.elem [j])
break;
}
if(j==l1.length )
l3->elem [l3->length ++]=l2.elem [i];
}
}
void jiao(sqlist l1,sqlist l2,sqlist *l3)
{
int i,j=0,k=0;//
for(i=0;i
{
j=0;/////////////////////
while( (j
j++;
if(j
l3->elem[k++]=l1.elem[i];
}
l3->length=k;
}
////////////
void main()
{
sqlist l1,l2,l3;
char c1[80],c2[80];
int i,j,k,n,m;
//输入集合1
printf("请输入集合1的元素个数:\n");
scanf("%d",&i);
getchar();////////////
for (j=0; j
{
printf("请输入集合1的第%d个元素:",j+1);
scanf("%c",&c1[j]);
getchar();//////////////////////////
}
creatsq(&l1,c1,i);
printsq(l1);
//输入集合2
printf("请输入集合2的元素个数:\n");
scanf("%d",&k);
getchar();
for (n=0; n
{
printf("请输入集合2的第%d个元素:",n+1);
scanf("%c",&c2[n]) ;
getchar();
}
creatsq(&l2,c2,k);
printsq(l2);
//功能
while(1)
{
printf("请选择需要的功能:1-求交集;2-求并集\n");
scanf("%d",&m);
switch(m)
{
case 1:
{
printf("交集的结果:");
jiao(l1,l2,&l3);
printsq(l3);
break;
}
case 2:
{
printf("并集的结果:");
bing(l1,l2,&l3);
printsq(l3);
break;
}
default:printf("error\n");
}
}
}
全部回答
- 1楼网友:低音帝王
- 2021-01-27 13:41
#include
#define maxsize 50
typedef struct node
{
int data[maxsize];
int length;
}seqlink;
int len1;
int len2;
int arr[maxsize];
void seqlinkinit(seqlink *l)//初始化
{
l->length = -1;
}
int creatseqlink(seqlink *l)//创建顺序表
{
while (1)
{
if (maxsize-1 < ++l->length)
{
printf("表满!\n");
return 0;
}
scanf("%d", &l->data[l->length]);
if (0 == l->data[l->length])
{
break;
}
}
return l->length;
}
void a(seqlink *l1, seqlink *l2)//求交集
{
int i, j;
int count = 0;
for (i=0; idata[i] == l2->data[j])
{
arr[count++] = l1->data[i];
break;
}
}
}
}
void b(seqlink *l1, seqlink *l2)//求并集
{
int i, j;
int num;
int flag;
int count = 0;
for (i=0; idata[i];
}
num = count;
for (i=0; idata[i])
{
flag = 0;
break;
}
}
if (1 == flag)
{
arr[count++] = l2->data[i];
}
}
}
void output(void)//输出
{
int i;
for (i=0; arr[i]!=0; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void main(void)
{
seqlink l1;
seqlink l2;
seqlinkinit(&l1);
seqlinkinit(&l2);
printf("请输入集合a:(按0结束输入)\n");
len1 = creatseqlink(&l1);
printf("请输入集合b:(按0结束输入)\n");
len2 = creatseqlink(&l2);
a(&l1, &l2);
printf("a与b交集为:\n");
output();
b(&l1, &l2);
printf("a与b并集为:\n");
output();
}
我要举报
大家都在看
推荐资讯