通过数组、循环、scanf语句实现输入两个有序的初始线性表LA和LB。将LB中的元素依次插入到LA有序表中去,完成线性表合并,合并后的线性表依然是有序的,并且要求两个线性表中相同的数据只保留一个即可。例如:执行结果大致如下:
请输入线性表LA:1 3 5 7 9
请输入线性表LB:1 2 3 4 5
合并后的有序线性表LA为:1 2 3 4 5 7 9
解答如下,有问题请回复
#include <stdio.h>
#define MAXSIZE 100
typedef int DataType;
typedef struct{
DataType data[MAXSIZE];
int last;
}Seqlist;
/**********************************/
/*函数名称:initseqlist() */
/*函数功能:初始化顺序表 */
/**********************************/
void initseqlist(Seqlist *L)
{ L->last=0;
}
/**********************************/
/*函数名称:input() */
/*函数功能:输入顺序表 */
/**********************************/
void input(Seqlist *L)
{
DataType x;
initseqlist(L);
char flag=0;
do
{
scanf("%d",&x);
L->data[L->last++]=x;
flag=getchar();
}while(flag!='\n');
}
/**********************************/
/*函数名称:print() */
/*函数功能:输出顺序表 */
/**********************************/
void print(Seqlist *L)
{
int i;
if(L->last==0)
printf("顺序表为空\n");
else
for(i=0;i<L->last;i++)
{ printf("%5d",L->data[i]);
if((i+1)%10==0) printf("\n");
}
printf("\n");
}
void insert(Seqlist *L,int x)
{
int i,j;
for(i=0;i<L->last;i++)
{
if(L->data[i]>x)
{
if(L->data[i-1]!=x)
{
for(j=L->last;j>i;j--)
{
L->data[j]=L->data[j-1];
}
L->data[i]=x;
L->last++;
}
break;
}
}
}
void merge(Seqlist *LA,Seqlist *LB)
{
int i,j,k;
for(i=0;i<LB->last;i++)
{
insert(LA,LB->data[i]);
}
}
int main()
{
Seqlist LA,LB,LC;
printf("请输入线性表LA:");
input(&LA);
printf("请输入线性表LB:");
input(&LB);
printf("合并后的有序线性表LA为:");
merge(&LA,&LB);
print(&LA);
return 0;
}