c语言1-1 2.算法,算法2-1:集合union-题解(C语言代码)

**解题思路:**

- 输入表A,B

- 在B中获取每个数据依次比较是否在A中

- 无就插入到A表之后输出

- 最后记得换行

**代码部分**

# include# define MAXSIZE 1000

# include# define LEN sizeof(SequenList)

typedef struct

{

int data[MAXSIZE];

int last;

} SequenList;

SequenList *Init_SequenList( )//初始化

{

SequenList *L;

L=(SequenList *)malloc(LEN);

if(L!=NULL)

{

L->last=-1;

}

return L;

}

void Creat_SequenList(SequenList *L,int n)//创建顺序表

{

int Print_SequenList(SequenList *L);//声明

int i;

if(L!=NULL)

{

for(i=0;idata[i]);

L->last++;

}

}

Print_SequenList(L);//创建表完时就把表输出

}

int Insert_SequenList(SequenList *L,int x,int i)//插入

{

int j;

if(L->last+1>=MAXSIZE)//判断顺序表是否满

return 0;

if(i<1||i>L->last+2)//判断插入的位置上

return -1;

for(j=L->last;j>=i-1;j--)//此处是插入操作

L->data[j+1]=L->data[j];

L->data[i-1]=x;

L->last++;

return 1;

}

int Length_SequenList(SequenList *L)//表长

{

return L->last+1;

}

int Getdata_SequenList(SequenList *L,int i)

{

if(i<1||i>L->last+1)

return 0;

return L->data[i-1];

}

int Search_SequenList(SequenList *L,int data)

{

int i;

for(i=0;i<=L->last;i++)

if(data==L->data[i])

return 1;

return 0;

}

int Print_SequenList(SequenList *L)//遍历

{

int i;

for(i=0;ilast;i++)

printf("%d ",L->data[i]);//输出后需要换行 因此分两步

printf("%d\n",L->data[L->last]);//输出最后元素后换行

}

int Union(SequenList *A,SequenList *B)

{

int len_a,key,i,k;//

len_a=Length_SequenList(A);

for(i=0;i<=B->last;i++)//=忘记 出错 (遍历表B)

{

key=Getdata_SequenList(B,i+1);

k=Search_SequenList(A,key);

if(k==0)

{

Insert_SequenList(A,key,len_a+1);

len_a=Length_SequenList(A);

}

Print_SequenList(A);

}

}

int main()

{

SequenList *A,*B;

int a,b;

while(scanf("%d",&a)!=EOF)

{

A=Init_SequenList();//每次的初始化很重要

B=Init_SequenList();//A!!!写错A

Creat_SequenList(A,a);

scanf("%d",&b);

Creat_SequenList(B,b);

Union(A,B);

printf("\n");

}

return 0;

}

感jio不错记得点赞~

0.0分

5 人评分

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值