顺序表应用5:有序顺序表归并
Time Limit: 100ms Memory limit: 800K 有疑问?点这里^_^
题目描述
已知顺序表A与B是两个有序的顺序表,其中存放的数据元素皆为普通整型,将A与B表归并为C表,要求C表包含了A、B表里所有元素,并且C表仍然保持有序。
输入
输入分为三行:
第一行输入m、n(1<=m,n<=10000)的值,即为表A、B的元素个数;
第二行输入m个有序的整数,即为表A的每一个元素;
第三行输入n个有序的整数,即为表B的每一个元素;
第一行输入m、n(1<=m,n<=10000)的值,即为表A、B的元素个数;
第二行输入m个有序的整数,即为表A的每一个元素;
第三行输入n个有序的整数,即为表B的每一个元素;
输出
输出为一行,即将表A、B合并为表C后,依次输出表C所存放的元素。
示例输入
5 3 1 3 5 6 9 2 4 10
示例输出
1 2 3 4 5 6 9 10
提示
来源
示例程序
顺序表:
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
#define maxsize 20010
typedef int element;
typedef struct
{
element * elem;
int length;
int listsize;
}sq;
int Inlist(sq & l)
{
l.elem = (element * )malloc(maxsize * sizeof(element));
if(!l.elem)
return -1;
l.length = 0;
l.listsize = maxsize;
return 0;
}
void creat(sq & l, int n)
{
for(int i = 0; i < n; i++)
cin >> l.elem[i];
l.length = n;
}
void merge(sq & l1, sq & l2, sq & l)
{
int i = 0, j = 0, k = 0;
while(i < l1.length && j < l2.length)
{
if(l1.elem[i] < l2.elem[j])
{
l.elem[k++] = l1.elem[i];
i++;
}
else
{
l.elem[k++] = l2.elem[j];
j++;
}
}
while(i < l1.length) //当一组数据输入新的表中,另一组没有输入完的时候,继续输入
{
l.elem[k++] = l1.elem[i];
i++;
}
while(j < l2.length)
{
l.elem[k++] = l2.elem[j];
j++;
}
l.length = k;
}
void show(sq & l)
{
for(int i = 0; i < l.length - 1; i++)
cout << l.elem[i] << " ";
cout << l.elem[l.length - 1] << endl;
}
int main()
{
sq l1, l2, l;
int m, n;
cin >> m >> n;
Inlist(l1);
creat(l1, m);
Inlist(l2);
creat(l2, n);
Inlist(l);
merge(l1, l2, l);
show(l);
return 0;
}
数组水
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
int main()
{
int a[10010], b[10010], c[20010];
int n, m, c1 = 0, c2 = 0, k = 0;
cin >> m >> n;
for(int i = 0; i < m; i++)
cin >> a[i];
for(int i = 0; i < n; i++)
cin >> b[i];
while(c1 < m && c2 < n)
{
if(a[c1] < b[c2])
{
c[k++] = a[c1];
c1++;
}
else
{
c[k++] = b[c2];
c2++;
}
}
while(c1 < m)
c[k++] = a[c1++];
while(c2 < n)
c[k++] = b[c2++];
for(int i = 0; i < k - 1; i++)
cout << c[i] << " ";
cout << c[k - 1] << endl;
return 0;
}