线性表顺序存储の介绍、应用 与 实践(第二章: 线性表 )

(一)线性表的介绍

线性表:线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…

线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

(1)逻辑上是线性结构,物理结构连续——顺序表。

(2)逻辑上是线性结构,物理结构不连续——链表。


(二) 顺序表基本运算的实现

链接: 顺序表基本运算的实现(第二章:线性表)


(三) 线性表顺序存储的应用:

问题: 已知长度为n的线性表A采用顺序存储结构,设计算法,删除线性表中所有值为x的数据元素。

要求: 时间复杂度为O(n)、空间复杂度为O(1)的算法

一般解法: 用基本运算实现

void delnode1(SqList *&L,ElemType x)

{
int i; ElemType e;

查找第1个值域与x相等的元 素的逻辑位序。若这样的元 素不存在,则返回值为0

while((i=LocateElem(L,x))>0)
{
ListDelete(L, i, e);
}	//删除顺序表L的第i个元素
}

这样的解法会消耗大量的时间,假设数组的长度为n,要删除第一个值为x下标为 i 的元素,就要把整体的位置向前移动 n-i 个位置,删除其它一个值为x的元素,也是需要移动所被删除元素之后的那些元素的位置!
举个🌰栗子吧,就像排队买东西,第一个买完东西的人走掉了,后面的每个人都要向前移动一个位置。每走掉一个人就要向前移动。

高级解法: 复制要保留的元素,新的空间存在于内存中,是暂时的,结束后会释放。
在这里插入图片描述
算法

void delnode1(SqList *&L,ElemType x)
{
int k=0,i; //k记录非x的元素个数 for (i=0; i<L->length; i++)
if (L->data[i]!=x)
{
	L->data[k]=L->data[i]; k++;
}
	L->length=k;
}

算法思想:

  • 逐个复制要保留的元素。
  • 要点:L1 和 L 共用空间,即不需要额外空间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值