给定两个顺序表L1,L2,顺序表结构如下
struct SqList
{
int data[MAX];
int length;
}
假设L1中元素递增,L2中元素递减。设计一个算法,将L1和L2合并为一个新的顺序表L3,且L3中的元素递增
#include <iostream>
#define MAX 100
using namespace std;
struct SqList
{
int data[MAX];
int length;
};
void createList(SqList *&L,int a[],int n)
{
int i = 0, k = 0;
L = (SqList*)malloc(sizeof(SqList));
for (i = 0; i < n; i++)
{
L->data[k] = a[i];
k++;
}
L->length = k;
}
void dispList(SqList *L)
{
for (int i = 0; i <L->length; i++)
{
cout << L->data[i] << "\t";
}
}
void InitList(SqList *&L)
{
L = (SqList*)malloc(sizeof(SqList));
L->length = 0;
}
//L1递增,L2递减,合成后递增
void addarray(SqList *&L1,SqList *&L2,SqList *&L3)
{
int i, j, n, k;
i = L1->length - 1;
j = 0;
n = 0;
L3->length = L1->length + L2->length;
while(true)
{
if (L2->data[j] >= L1->data[i])
{
L3->data[L3->length - n-1] = L2->data[j];
if(j!=L2->length)
j++;
else
{
for (k = 0; k < L3->length - n ; k++)
{
L3->data[k] = L1->data[k];
}
break;
}
}
else
{
L3->data[L3->length - n - 1] = L1->data[i];
if (i > 0)
{
i--;
}
else
{
for (k=0; k< L3->length - n - 1; k++)
{
L3->data[k] = L2->data[L2->length - k - 1];
}
break;
}
}
n++;
}
}
int main()
{
int a[MAX];
int n, i;
SqList *L1, *L2;
cout << "请输入L1的长度" << endl;
cin >> n;
cout << "请输入L1" << endl;
for (i = 0; i < n; i++)
{
cin >> a[i];
}
createList(L1, a, n);
cout << "请输入L2的长度" << endl;
cin >> n;
cout << "请输入L1" << endl;
for (i = 0; i < n; i++)
{
cin >> a[i];
}
createList(L2, a, n);
SqList *L3;
InitList(L3);
addarray(L1, L2, L3);
dispList(L3);
return 0;
}