求高手用c语言编写两个程序(数据结构)

1:假设利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A∪B。
算法描述:
void union(List &La,List Lb){
//将所有在线性表Lb中但不在Lb中的数据元素插入到La中
La_len = ListLength(La);Lb_len = ListLength(Lb);//求线性表的长度
for(i = 1;i<=Lb_len;i++){
GetElem(Lb,i,e);//取Lb中第i个元素赋给e
if(!LocateElem(La,e,equal))ListInsert(La,++La_len,e);
//La中不存在和e相同的数据元素,则插入
}
}//union

要求:用顺序存储结构实现动态申请和事发内存,要用到增容realloc语句,main函数看里的语句尽量的少,最好加注释,能让我应付得了老师,我是初学数据结构的。不要写那么好,老师会看穿的。

2:已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC中的元素仍按值非递减有序排列。例如:LA=(3,5,8,11) LB=(2,6,8,9,11,15,20)则 LC=(2,3,5,6,8,8,9,11,11,15,20)
算法描述:
void MergeList(List La,List Lb,List &LC){
//已知线性表La和Lb中的数据元素按值非递减排列
//归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列
InitList(Lc)
i=j=1;k=0;
La_len = ListLength(La);Lb_len = ListLength(Lb);
while((i<=La_len)&&(j<=Lb_len)){//La和Lb均非空
GetElem(La,i,ai);GetElem(Lb,j,bj);
if(ai<=bj){ListInsert(Lc,++k,ai);++i;}
else{ListInsert(Lc,++k,bj);++j;}
}
while(i<=La_len){
GetElem(La,i++,ai);ListInsert(Lc,++k,ai);
}
while(j<=Lb_len){
GetElem(Lb,j++,bj);ListInsert(Lc,++k,bj);
}
}//MergeList

我的邮箱:[email protected]
明天就要交了 速求
第二题要用链式存储结构实现 其他要求同上

#include"stdio.h"
typedef struct la
{
int *data;
int l;
}La;
typedef struct lb
{
int *data;
int l;
}Lb;
typedef struct lc
{
int *data;
int l;
}Lc;

void chushihua(La &a,Lb &b,Lc &c)
{
int i=0;
a.data=new int[100];a.l=0;
b.data=new int[100];b.l=0;
c.data=new int[100];c.l=0;
printf("请输入集合La中的元素个数和元素:");
scanf("%d",&a.l);
for(i=0;i<a.l;i++)
scanf("%d",&a.data[i]);
printf("请输入集合Lb中的元素个数和元素:");
scanf("%d",&b.l);
for(i=0;i<b.l;i++)
scanf("%d",&b.data[i]);
}
void qiujie(La &a,Lb &b,Lc &c)
{
int i,j;
for(i=0;i<a.l;i++)
c.data[i]=a.data[i];
c.l=a.l;
for(i=0;i<b.l;i++)
{
for(j=0;j<a.l;j++)
if(b.data[i]==a.data[j])break;
if(j>=a.l)c.data[c.l++]=b.data[i];
else continue;
}

}
void xianshi(Lc c)
{
int i;
for(i=0;i<c.l;i++)
printf("%d ",c.data[i]);
}
void main()
{
La a;
Lb b;
Lc c;
chushihua(a,b,c);
qiujie(a,b,c);
xianshi(c);
}
对C中的元素我没有排序,你自己看看吧!
温馨提示:答案为网友推荐,仅供参考
相似回答