#include<iostream>
using namespace std;
//双指针法
#define InitSize 10
typedef int ElemType;
typedef struct
{
ElemType* data;
ElemType length;
ElemType MaxSize;
}SqList;
bool InitList(SqList& L)
{
L.data = new ElemType[InitSize];
if (L.data == NULL)
return false;
L.length = 0;
L.MaxSize = InitSize;
return true;
}
bool Input(SqList& L,int n)
{
if (n<1 || n>InitSize)
return false;
cout << "请输入" << n << "个数据" << endl;
for (int i = 0; i < n; i++)
{
cin>> L.data[i];
}
L.length = n;
return true;
}
void Show(SqList& L)
{
cout << "线性表数据为" << endl;
for (int i = 0; i < L.length; i++)
{
cout << L.data[i] << " ";
}
cout << endl;
}
void IncreaList(SqList& L, ElemType len)
{
ElemType* p = L.data;
L.data = new ElemType[InitSize + len];
for (int i = 0; i < L.length; i++)
{
L.data[i] = p[i];
}
L.MaxSize = L.MaxSize + len;
delete p;
}
bool MergeList(SqList& L1, SqList& L2)
{
SqList L;
InitList(L);
L.length = L1.length + L2.length;
IncreaList(L,L.length);
int i = 0, j = 0, k = 0;
while (i < L1.length && j < L2.length)
{
if (L1.data[i] <= L2.data[j])
L.data[k++] = L1.data[i++];
else
L.data[k++] = L2.data[j++];
}
while (i < L1.length) L.data[k++] = L1.data[i++];
while (j < L2.length) L.data[k++] = L2.data[j++];
L.length = k;
Show(L);
return true;
}
int main()
{
SqList L1, L2;
InitList(L1);
Input(L1, 4);
InitList(L2);
Input(L2, 7);
Show(L1);
Show(L2);
MergeList(L1, L2);
system("pause");
return 0;
}
C++实现两个顺序表的有序合并
最新推荐文章于 2024-04-05 16:54:53 发布