顺序表专题(1)——顺序表

博客介绍了顺序表相关知识。顺序表是线性表的一种,可将一组元素视为序列管理。按存储元素方式分两类,实现方式有一体式和分离式。还讲解了元素存储区的替换和扩充操作,不同结构在操作时有不同特点和成本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

需求:将一组(通常是同一类型)的几个数据元素作为一个整体管理和使用,需要创建这种元素的组,并用变量对他们进行记录。这样一组数据的元素个数可能发生变化(因为增删改查等操作)。

对于这种需求,最简单的解决方式是将这组元素视为一个序列,可以将这个结构抽象为线性表。一个线性表是某类元素的集合,还记录着元素之间的一种顺序关系。线性表是最基本的数据结构之一,在实际的项目中应用广泛。同时线性表也是更复杂的结构的实现基础。

根据线性表存储方式的不同,分为两种实现模型

模型说明
顺序表将元素按顺序存放在一块连续的内存区域中
链表将元素存放在通过链接(指针)构造起来的一系列存储块中。

本节笔记只讲解顺序表,链表见后续笔记。

基本形式

按照存储元素的方式将顺序表分为两类,分别对应下图的a和b,
在这里插入图片描述

顺序表基本布局

如图a所示,数据元素本身连续存储,每个元素所占的存储单元大小都是固定相同的。元素的下标是其逻辑地址,而元素存储的物理地址可以通过存储区的起始地址 Loc(e0)推断得到。

元素外置的顺序表基本布局

主要是针对元素大小不统一的情况。将实际数据存放在内存的某处,而将其地址按顺序存放在顺序表中。存放地址所需的内存很小,所以这种顺序表占用的内存空间并不大。

图解

在这里插入图片描述
上图即是两种形式顺序表的展示。左图是基本布局的顺序表,右图是元素外置的顺序表。

顺序表的实现

顺序表的实现也分为两种方式,一体式和分离式
在这里插入图片描述
max和num是顺序表的信息存放区域。

参数说明
max指定该顺序表最多存放的元素数目;
num指定的是当前顺序表中存放了多少元素。

一体式实现

存储顺序表结构的信息与元素存储区以连续的方式被存放于一块存储区中。两部分数据形成一个完整的顺序表对象。这种结构的整体性强,易于管理,但是由于数据存储区是顺序表的一部分,所以顺序表创建后,元素存储区也就固定了。

分离式结构

表对象中仅存储顺序表相关的信息(对应上面的max和num),实际的数据元素存放在另一个独立的内存区域中,表结构中有一个区域专用于引用元素存储区的地址。

图解

在这里插入图片描述
上图展示的是同一个数据以不同的结构实现的形式。左边是一体式顺序表;右边是分离式顺序表。

元素存储区操作

元素存储区替换

一体式结构由于顺序表的信息区和数据区相连,所以如果想对数据区域进行更换,只能整体搬迁,即整个顺序表对象改变。

分离式结构如果想更换数据区,仅需将顺序表的信息区引用的数据区的地址更新即可,顺序表对象并没有改变。

元素存储区扩充

采用分离式结构的顺序表如果想将其数据区进行扩充,仅需要对表信息的元素值进行改变,如改变max和num相应的值,并更新引用的数据区的地址即可。而一体式结构的顺序表则需要使用更大的表格将其整体替换,当数据量很大的时候,这种替换方式的成本很高。

扩充数据的两种策略,

策略说明特点
线性增长每次扩充固定数目的位置,比如一次扩充10个元素位置节省空间,但是在数据量较大的时候,扩充操作会很频繁,操作次数很多从而影响效率。
倍数增长每次扩容采取加倍的形式,如每次扩充都增加一倍的存储空间在数据量较大时减少了操作次数,但是容易造成空间的浪费。是一种以空间换时间的策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值