首页 > 其他分享 >kx-顺序表:合并顺序表

kx-顺序表:合并顺序表

时间:2023-02-15 21:45:19浏览次数:32  
标签:pbase 顺序 capacity 合并 pb pc seqType kx

一、定义顺序表结构

#define INIT_SIZE 10	///< 顺序表初始容量
typedef int seqType;	///< 定义顺序表元素类型
/// @brief 顺序表结构定义
typedef struct t_sqList
{
	seqType* pbase;	///< 表基址
	int capacity;	///< 表容量
	int size;	///< 表长度
}mySList;

二、合并2个非递减顺序表

1、题目要求

  • 给定2个非递减顺序表:a,b
  • 现给定一个空表c,用于存放合并结果
  • 要求按元素值由小大到合并

1、思路

2、代码

/// @brief 合并2顺序表,结果存放于第3顺序表
/// @param pc:合并结果存放于pc表
/// @param pa:顺序表a
/// @param pb:顺序表b
/// @return status:返回是否成功合并标志
/// @retval ERROR(0):顺序表不存在,不可操作
/// @retval ERR_OVERFLOW(-2):空间不足,开辟新空间失败,合并失败
/// @retval OK(1):合并成功
status sList_merge1(mySList* pc, const mySList* pa, const mySList* pb)
{
	if (NULL == pa || NULL == pb || NULL == pc)
	{
		return ERROR;
	}
	
	if (NULL == pa->pbase || NULL == pb->pbase || NULL == pc->pbase)
	{
		return ERROR;
	}
	/// 构建表pc的容量,使其可以容纳pa,pb所有元素
	int capacity = pa->capacity + pb->capacity;
	if (pc->capacity < capacity)
	{
		pc->capacity = capacity;
		if (pc->pbase != NULL)
		{
			free(pc->pbase);
		}
		pc->pbase = (seqType*)malloc(sizeof(seqType) * (capacity));
		if (NULL == pc->pbase)
		{
			return ERR_OVERFLOW;
		}
	}
	/// 指针指向表基地
	seqType* p1 = pa->pbase;
	seqType* p2 = pb->pbase;
	seqType* p3 = pc->pbase;
	/// 指针指向表尾元素
	seqType* p1_last = pa->pbase + pa->size - 1;	
	seqType* p2_last = pb->pbase + pb->size - 1;
	/// 比较2表元素,将较小元素拷贝至pc表。至少其中一表遍历完,循环退出
	while (p1 <= p1_last && p2 <= p2_last)
	{
		if (*p1 <= *p2)
		{
			*p3++ = *p1++;
		}
		else
		{
			*p3++ = *p2++;
		}
	}
	/// 合并a表剩余部分
	while (p1<=p1_last)
	{
		*p3++ = *p1++;
	}
	/// 合并b表剩余部分
	while (p2 <= p2_last)
	{
		*p3++ = *p2++;
	}
	pc->size = capacity;
	return OK;
}

标签:pbase,顺序,capacity,合并,pb,pc,seqType,kx
From: https://www.cnblogs.com/kxwslmsps/p/17124811.html

相关文章

  • 47-代码块,构造器顺序问题
    基本介绍代码化块又称为初始化块,属于类中的成员[即是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过{}包围起来。但和方法不同,没有方法名,没有返回,没有参数,只有方法......
  • kx-顺序表:在顺序表首部插入元素
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......
  • kx-顺序表:删除顺序表首元素
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......
  • kx-顺序表:删除顺序表中下标为index的元素
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......
  • kx-顺序表:顺序表表尾追加元素
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......
  • kx-顺序表:打印顺序表
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......
  • kx-顺序表:查找元素x在表中下标
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......
  • kx-顺序表:查找元素是否在表中
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......
  • kx-顺序表:顺序表扩容
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......
  • kx-顺序表:顺序表结构定义
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......