已知有两个按元素值递增有序的顺序表A和B,设计一个算法将表A和表B的全部元素归并为一个按元素值递增有序的顺序表C。

** 已知有两个按元素值递增有序的顺序表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);
	}
}


猜你喜欢

转载自blog.csdn.net/qq_43554335/article/details/105577348