1,存储结构:顺序存储结构。
2,代码如下:
#include "stdafx.h"
#include<stdio.h>
#define MAXSIZE 40
struct SqList{
int list[MAXSIZE+1];
int length;
};
void merge(SqList&L,SqList D,SqList R)
{
int i=0,j=0;
L.length=0;
while(i<D.length&&j<R.length)
{
if(D.list[i]<=R.list[j])
{
L.list[L.length]=D.list[i];
i++;
L.length++;
}
else
{
L.list[L.length]=R.list[j];
j++;
L.length++;
}
}
while(i<D.length)
{
L.list[L.length]=D.list[i];
i++;
L.length++;
}
while(j<R.length)
{
L.list[L.length]=R.list[j];
j++;
L.length++;
}
}
void main()
{
SqList St,L1,L2;
printf("***********************************************\n");
printf(" 将两个有序表合并成一个非递减的有序表算法 \n");
printf("***********************************************\n");
printf("请输入有序表L1关键字个数N (N<%d):",MAXSIZE);
scanf("%d",&L1.length);
printf("\n");
printf("请输入有序表L2关键字个数N (N<%d):",MAXSIZE);
scanf("%d",&L2.length);
printf("\n");
printf("在有序表L1中,请输入%d个关键字值:\n",L1.length);
for (int i=0;i<L1.length;i++)
scanf("%d",&L1.list[i]);
printf("\n");
printf("在有序表L2中,请输入%d个关键字值:\n",L2.length);
for (int i=0;i<L2.length;i++)
scanf("%d",&L2.list[i]);
merge(St,L1,L2);
printf("\n");
printf("输出排序结果:");
for(int j=0;j<St.length;j++)
printf("%d ",St.list[j]);
printf("\n");
printf("\n");
}
3,运行结果示意图: