一、定义顺序表结构
#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