8577 合并顺序表
若线性表中数据元素相互之间可以比较,且数据元素在表中按值递增或递减,则称该表为有序表。
编写算法,将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表C。
输入格式
第一行:顺序表A的元素个数
第二行:顺序表A的各元素(非递减),用空格分开
第三行:顺序表B的元素个数
第四行:顺序表B的各元素(非递减),用空格分开
输出格式 第一行:顺序表A的元素列表
第二行:顺序表B的元素列表
第三行:合并后顺序表C的元素列表
输入样例
5
1 3 5 7 9
5
2 4 6 8 10
输出样例
List A:1 3 5 7 9
List B:2 4 6 8 10
List C:1 2 3 4 5 6 7 8 9 10
#include
#include
using namespace std;
int main(){
// setbuf(stdout, NULL);
int n,m; //n为数组a的长度,m为数组b的长度
int i=0,j=0,k=0;
int a[10000];
int b[10000];
int c[100000];
//输入A数组
scanf("%d",&n);
for (int l = 0; l < n; ++l) {
cin>>a[l];
}
//输入B数组
scanf("%d",&m);
for (int l = 0; l < m; ++l) {
cin>>b[l];
}
//对AB数组排序
while(i
}
#include
#include
#include
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int
typedef struct
{
int *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的容量(以sizeof(ElemType)为单位)
}SqList;
int InitList_Sq(SqList &L)
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//返回首地址
if(!L.elem) return ERROR; //分配存储失败
L.length=0; //空表长度为0
L.listsize=LIST_INIT_SIZE; //初始存储容量
return OK;
}
int intput_Sq(SqList &L,int n)
{
int i,x;
for(i=0;i
scanf(“%d”,&x);
L.elem[i]=x;
L.length++;
}
return OK;
}
void MergeList_Sq(SqList LA,SqList LB,SqList &LC)
{
int *pa,*pb,*pc,*pa_last,*pb_last;
pa=LA.elem; pb=LB.elem; //指针pa和pb的初值分别指向两个表的第一个元素
LC.length=LA.length+LB.length; //新表长度为待合并两表的长度之和
LC.elem=new ElemType[LC.length]; //为合并后的新表分配一个数组空间
pc=LC.elem; //指针pc指向新表的第一个元素
pa_last=LA.elem+LA.length-1; //指针pa_last指向LA表的最后一个元素
pb_last=LB.elem+LB.length-1; //指针pb_last指向LB表的最后一个元素
while(pa<=pa_last && pb<=pb_last)
{ //两个表都非空
if(*pa<=*pb) *pc++=*pa++; //依次“摘取”两表中值较小的结点
else *pc++=*pb++;
}
while(pa<=pa_last) *pc++=*pa++; //LB表已到达表尾
while(pb<=pb_last) *pc++=*pb++; //LA表已到达表尾
}
void output_Sq(SqList L)//输出
{
int i;
for(i=0;i
printf("%d ",L.elem[i]);
}
}
int main()
{
SqList LA,LB,LC;
int a,b;
scanf(“%d”,&a);//输入LA表的元素个数;
InitList_Sq(LA);//创建LA表
intput_Sq(LA,a);//输入LA表元素
scanf("%d",&b);//输入LB表的元素个数;
InitList_Sq(LB);//创建LB表
intput_Sq(LB,b);//输入LB表元素
InitList_Sq(LC);
printf("List A:");
output_Sq(LA);
printf("\n");
printf("List B:");
output_Sq(LB);
printf("\n");
printf("List C:");
MergeList_Sq(LA,LB,LC);//合并两表
output_Sq(LC);
return 0;
}