2.3线性表顺序结构应用举例及小结

2.3线性表顺序结构应用举例及小结

【顺序表应用举例】有序表合并问题

下面来看合并算法的要求。有两个顺序表 LA 和 LB,其元素均为递
增有序排列,编写一个算法,将它们合并成一个递增有序顺序表 LC。
例如一个表是(1, 3, 5), 另一个表是(2,4,6)将他们合并成表(1, 2, 3, 4, 5,
6)。
算法思想

  • 初始化:LC 为空表,设 LC 表的指示器 k=0 设两个指示器 i,j 分别指向表 LA 和 LB 的当前位置,初值均为 0。
  • 比较循环:LA 表和 LB 表的当前元素比较,小的元素进 LC 表,且该表的指示器和 LC 表的指示器 k 均加 1移向下一个位置。如此下去,直到 LA 或 LB 表中一个表处理完毕为止。
  • 复制循环:将未处理完的表中剩余元素通过循环逐一复制到 LC 表中。

算法描述

void merge(SeqList *LA, SeqList *LB, SeqList *LC)
{
	int i,j,k,l;
	i=0;j=0;k=0;
	while(i<=LA->last&&j<=LB->last)
	if(LA->elem[i]<=LB->elem[j])
 	{	
		LC->elem[k]= LA->elem[i];
		i++; k++;
 	}
	else
 	{
		LC->elem[k]=LB->elem[j];
		j++; k++;
 	}
	while(i<=LA->last) /*当表 LA 有剩余元素时,则将表 LA 余下的元素赋给表 LC*/
 	{
		LC->elem[k]= LA->elem[i];
 		i++; k++;
 	}
 	while(j<=LB->last) /*当表 LB 有剩余元素时,则将表 LB 余下的元素赋给表 	LC*/
 	{
		LC->elem[k]= LB->elem[j];
		j++; k++;
 	}
	LC->last=LA->last+LB->last+1;
}

算法分析】由于两个待归并的表 LA、LB 本身就是有序表,且表 LC 的建立采用的是尾插法建表,插入时不需要移动元素,所以算法的时间复杂度 O(LA->last+LB->last)。

有序表合并算法包括了对线性表的定位、比较、移动等线性表基本运算的组合。只要掌握了基本操作就可以应对实际问题的变化需求。

【顺序存储结构的优缺点分析】

线性表顺序表示的优点是:

  • 无需为表示结点间的逻辑关系而增加额外的存储空间。
  • 可方便的随机存取表中的任一元素。
    缺点
  • 插入或删除运算需要移动大量的结点,效率低下。
  • 由于顺序表存储分配静态分配。当表长变化较大难以确定合适的存储规模。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值