题目
我们借助数组实现,以下是例子分析。
#include<stdio.h>
struct node //定义结构体,名为node,包含一个整型数组a,一个整型变量length
{
int a[100];
int length;
};
//定义两个指针LA,LB
void Function(struct node *LA,struct node *LB) //实现两表元素比较的函数
{
struct node Lc; //定义结构体变量Lc
struct node *LC=&Lc;
int i=0,j=0,k=0;
while(i<LA->length&&j<LB->length) //循环从这开始,进行A表与B表内元素大小比较,从0号元素开始
{
if(LA->a[i]<LB->a[j])
{
LC->a[k]=LA->a[i];
i++;
k++;
}
else if(LA->a[i]==LB->a[j])
{
LC->a[k]=LB->a[j];
j++;
k++;
LC->a[k]=LA->a[i];
i++;
k++;
}
else
{
LC->a[k]=LB->a[j];
j++;
k++;
}
}
while(i<LA->length)
{
LC->a[k]=LA->a[i];
i++;
k++;
}
while(j<LB->length)
{
LC->a[k]=LB->a[j];
j++;
k++;
}
LC->length=LA->length+LB->length; //由于表合并,两表长相加,得到新表的表长
for(k=0;k<LC->length;k++) //逐个输出新表内元素
{
printf("%d ",LC->a[k]);
}
}
int main()
{
struct node La,Lb; //定义两个结构体La,Lb
struct node *LA=&La,*LB=&Lb; //通过指针传递给函数Function()处理
int m,n; //m为输入a表长,n为输入b表长
int i=0;
scanf("%d",&m);
LA->length=m;
for(i=0;i<m;i++)
{
scanf("%d",&LA->a[i]);
}
scanf("%d",&n);
LB->length=n;
for(i=0;i<n;i++)
{
scanf("%d",&LB->a[i]);
}
Function(LA,LB);
return 0;
}
这是OJ数据结构第一道题,思路是比较简单的,关键在于定义结构体、通过指针传递参数、分析比较时出现的各种情况。