考研数据结构之线性表(1.7)——练习题之编写一个算法将m各有序(从小到大)顺序表合并成一个有序顺序表,假设所有顺序表存储在一个m行maxSize列的二维数组中(C表示)

题目

编写一个算法,将m(m≥2)个有序(从小到大)顺序表合并成个有序顺序表, 假设所有顺序表存储在一个m行maxSie (maxSize 足够大)列的二维数组lists[m][maxSize]中,要求把1~m-1行所在的顺序表合并在0行所在的顺序表中,各表的长度存储在数组lens[m]中,合并过程中不另设新的顺序表存储空间。

分析

可以将m各顺序表的合并先处理为两个顺序表的合并,参考:将两个有序(非递减有序)顺序表合并成为一个顺序表,合并后的结果放到A[]中不另设新的顺序表存储空间,将lists中的1~m-1行上的顺序表逐个合并到第0行上的顺序表中,返回-1表示合并失败,返回最终表的长度表示成功。

代码

核心代码:

/* 合并A表和B表到A表中 */ 
int comb(int A[],int &na,int B[],int nb) { // 合并后na发生变化,因此使用引用型
	if(na+nb>maxSize) { // 假设maxSize是已经定义好的常量
		return -1;
	}
	int i=na,j=nb;
	while(j>0) {
		if(i==0||A[i-1]

完整代码:

#include
 
#define maxSize 30
 
/* 打印数组 */ 
void print(int nums[],int n) {
	printf("\n");
	for(int i=0; imaxSize) { // 假设maxSize是已经定义好的常量
		return -1;
	}
	int i=na,j=nb;
	while(j>0) {
		if(i==0||A[i-1]

运行结果:

考研数据结构之线性表(1.7)——练习题之编写一个算法将m各有序(从小到大)顺序表合并成一个有序顺序表,假设所有顺序表存储在一个m行maxSize列的二维数组中(C表示)_第1张图片

你可能感兴趣的:(数据结构)