将两个有序顺序表合并为一个新的顺序表,并由函数返回结果顺序表(非常典型的算法方法)

题目:将两个有序顺序表合并为一个新的顺序表,并由函数返回结果顺序表
(非常典型的算法方法)

算法思想:
第一步:按顺序不断取下两个顺序表中表头较小的结点,存到新的顺序表中
第二步:看哪个顺序表有剩余,将剩余结点加到新的顺序表后面
代码:

bool Merge(SqList A.SqList B, SqList &C)
{
	if (A.length + B.length > C.MaxSize)//大于新的顺序表的最大长度
		return false;					//显示错误信息false,并返回

	int i = 0, j = 0, k = 0;		//分别对应顺序表A,B,C的下标
	while (i < A.length && j < B.length)//循环,两两比较,小的存入结果表
		if (A.data[i] <= B.data[j])
			C.data[k++] = A.data[i++];
		else
			C.data[k++] = B.data[j++];

	//还有一个顺序表还有剩余部分
	while (i < A.length)
		C.data[k++] = A.data[i++];
	while (j < B.length)
		C.data[k++] = B.data[j++];

	C.length = k;
	return true;
}

注:
(1)区分顺序表的位序和顺序表的下标:
顺序表的位序:从1开始(第1位,第2位,第3位,…)
顺序表的下标:即数组的下标,从0开始
(2)为什么要考虑C.maxSize?
(与一个顺序表的存储结构定义有关)
静态分配一维数组:

#define MaxSize 50			//定义顺序表的最大长度
typedef struct{
	ElemType data[MaxSize];			//顺序表的元素
	int length;		//顺序表的当前长度
}SqList;			//顺序表的结构定义

动态分配一维数组:

#define InitSize 100			//表长度的初始定义
typedef struct{
	ElemType *data;			//指示动态分配数组的指针
	int MaxSize,length;		//数组的最大容量和当前个数
}SeqList;			//动态分配数组顺序表的结构定义
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值