** 已知有两个按元素值递增有序的顺序表A和B,设计一个算法将表A和表B的全部元素归并为一个按元素值递增有序的顺序表C。
要求: 从键盘输入顺序表A和B的各元素,编程实现上述算法,输出顺序表A、顺序表B和顺序表C 的所有元素值 。
**
*算法思路:
先设C为空表,然后比较A和B中的数据元素,将A或B中较小的元素插入到C中。当其中一个顺序表的数据元素均已插入到C中时,另一顺序表中的剩余元素依次插入即可。
*
//算法与数据结构 实验一:顺序表的应用---递增合并 VS2019
#include<iostream>
#include<stdio.h>
#include<iomanip>
using namespace std;
#define MAXSIZE 100
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int len;
}SqList;
void merge(SqList A, SqList B, SqList& C)//合并算法
{
int i=0, j=0, k=0;
while (i < A.len && j < B.len)
{
if(A.data[i]<B.data[j])
{
C.data[k] = A.data[i];
i++; k++;
}
else if (A.data[i] >B.data[j])
{
C.data[k] = B.data[j];
j++; k++;
}
else
{
C.data[k] = B.data[j];
j++; k++;
C.data[k] = A.data[i];
i++; k++;
}
}
while(i<A.len)
{
C.data[k] = A.data[i];
i++; k++;
}
while (j < B.len)
{
C.data[k] = B.data[j];
j++; k++;
}
C.len = k;
}
void main()
{
SqList sqA, sqB,sqC;
int Adata,Bdata;
cout << "请输入顺序表A中的元素个数(不超过100个)";
cin>>Adata;
cout << "下面请按元素值递增顺序输入元素" << endl;
for (int i = 0; i < Adata; i++)
{
cout << "顺序表中A第" << i << "个元素是:";
cin >> sqA.data[i];
}
sqA.len = Adata;
cout << "顺序表A的长度为:" << sqA.len << endl;
cout << "请输入顺序表B中的元素个数(不超过100个)";
cin >> Bdata;
for (int i = 0; i < Bdata; i++)
{
cout << "顺序表B中第" << i << "个元素是:";
cin >> sqB.data[i];
}
sqB.len = Bdata;
cout << "顺序表B的长度为:" << sqB.len << endl;
merge(sqA, sqB, sqC);
cout << "顺序表C的长度为:" << sqC.len << endl;
cout << "顺序表C中的元素依次为:";
for (int i = 0; i < sqC.len; i++)
{
cout <<sqC.data[i]<<setw(6);
}
}