注:本文是采用和并为另一个新的有序表,并且如果有相同的元素只保留一个。
Description |
将两个不同有序表合并成一个新的有序表,并输出。 例如: 输入: 第一行和第二行分别为第一个有序表的元素数和元素的值 第三行和第四行分别为 第二个有序表的元素数和元素值 输出:为合并后的有序表各元素的值 |
Sample Input |
5 10 24 36 52 86 8 12 16 26 50 52 56 58 78 |
Sample Output |
10 12 16 24 26 36 50 52 56 58 78 86 |
Hint |
输出有换行 |
#include <iostream>
#include <stdio.h>
#define Max_size 105
using namespace std;
typedef struct
{ // 定义存储结构
int *elem;
int length;
} Sqlist;
void initL(Sqlist &L)
{ // 初始化
L.elem = new int[Max_size];
L.length = Max_size;
for (int i = 0; i < L.length; i++)
{
L.elem[i] = 0;
}
}
void creatL(Sqlist &L)
{
int n;
cin >> n;
L.length = n;
for (int i = 0; i < n; i++)
{
cin >> L.elem[i];
}
}
void ADD(Sqlist L, Sqlist T, Sqlist &S)
{
S.length = L.length + T.length;
int i = 0, j = 0, k = 0;
while (i < L.length && j < T.length)
{ // 每次记录小的,如果相同则只记录一个,长度要减一
if (L.elem[i] < T.elem[j])
{
S.elem[k] = L.elem[i];
i++;
k++;
}
else if (L.elem[i] > T.elem[j])
{
S.elem[k] = T.elem[j];
j++;
k++;
}
else
{
S.elem[k] = L.elem[i];
i++;
j++;
k++;
S.length--;
}
}
// 遍历剩余的有序表
while (i < L.length)
{
S.elem[k] = L.elem[i];
k++;
i++;
}
while (j < T.length)
{
S.elem[k] = T.elem[j];
k++;
j++;
}
}
void Print(Sqlist L)
{ // 输出
int m = 0;
for (int j = 0; j < L.length; j++)
{
cout << L.elem[j];
if (m != L.length - 1)
{
cout << " ";
}
m++;
}
cout << "\n";
}
int main()
{
Sqlist L, T, S;
initL(L);
initL(T);
initL(S);
creatL(L);
creatL(T);
ADD(L, T, S);
Print(S);
return 0;
}