第三篇、数据结构中存储结构

数据结构除了按照逻辑结构来分,还可以按照存储结构来分。
存储结构反应的是数据元素在计算机中的存储形式,如何在计算机中正确的描述数据元素之间的逻辑关系,才是数据结构的关键和重点。

常用的存储结构有

1、顺序存储结构

2、链式存储结构

3、索引存储结构

4、散列表

4种,接下来分别介绍一下

顺序存储结构

顺序存储结构是把逻辑上相邻的结点存储在

地址连续

的存储单元里,数据元素之间的关系由存储单元是否相邻来体现。
顺序存储结构通常用高级语言上的

数组

来描述,数据的逻辑关系与物理关系是一致的。
以数组 int a[5]={100,20,3,,56,266}为例,其中的元素a[0]到a[4]逻辑上是连接的,在存储器中的物理地址也是连续的,正如下图所示

 

顺序存储结构.png

解释一下,上图中的地址间隔4个,是因为int类型占用的字节数是4个字节


使用顺序存储结构存储数据时,系统为数据元素分配一段连续的地址空间。

优点

顺序存储结构可以提高空间利用率,而且对于随机访问元素,其效率非常高,因为逻辑上相邻的数据元素,其存储地址也是紧邻的,所以可以按照元素序号快速查找到某一个元素。

缺点

但是,也正因为如此,如果想要对顺序存储结构实现元素的插入和删除,其效率则非常低。因为如果要插入一个元素,需要将这个位置之后的所有元素都向后移动一个位置;同样,如果想要删除一个元素,需要将这个位置之后的所有元素都向前移动一个位置。

需要注意的地方

顺序存储结构在使用时有空间限制,当需要存取元素的个数多于预先分配的空间时,会出现“溢出”的问题;
而当元素个数小于预先分配的空间时,又会造成空间浪费。

2、链式存储结构

链式存储结构在空间上是一些不连续的存储单元,这些存储单元的逻辑关系通过附加的指针字段来表示,如C或者C++语言中的指针类型,通过这些指针的指向来表明结点之间的联系。

如下图所展示的就是链式存储结构的示意图
下方这张图展示的是指向后继元素的链式存储结构图

 

指向后继元素的链式存储结构.png

指向后继元素的链式存储结构.png

上图中,我们看到,前一个元素可以通过当前结点来找到后边的元素
下方这张图展示的是指向前驱和后继元素的链式存储结构图

 

指向前驱和后继元素的链式存储结构.png

指向前驱和后继元素的链式存储结构.png

上图中,发现可以通过前边的元素查找后边的元素,也可以通过后边的元素查找前边的元素

上面的两张图展示的存储结构 分别是单向链表、双向链表

一般而言,连式存储在内存中分配的单元是不连续的,就像散落的珠子,需要用丝线(指针)串起来,这种结构更有利于元素的插入和删除。当要在某一位置插入一个新元素,比如将上图“指向后继元素的链式存储结构”的E、C之间插入一个元素T,只需断开E、C之间的连接,然后将E的指针指向T,将T的指针指向C即可,插入完成后的序列如下图所示:

插入元素T.png

插入元素T.png

这样在插入元素时不必移动任何一个元素,高效简洁。
同理,在删除某一个元素时,只需要将其前后两个元素连接起来即可,无须移动其他元素。

缺点

链式存储结构无法进行元素的随机访问
对于连式存储结构而言,控件利用率也比较低,因为分配的内存单元有一部分被用来存储结点之间的逻辑关系。
但是链式存储在存储元素时没有空间限制,顺序存储与链式存储都是按需分配,只是链式存储由于其特性(元素的内存地址可以不连续 ),所以可以在需要的时候方便的分配空间,不会造成空间不足或者浪费。

3、索引存储结构

这种存储结构主要是为了方便查找数据,它通常是在存储结点信息的同时,还建立附加的索引表。
索引表中的每一项称为“索引项”,它由两个字段组成:

关键字

地址

其中”关键字“唯一标识一个结点,地址是指向结点的指针。这种结构类似于人们常用的字典,该结构如下图所示

 

索引存储结构.png

索引存储结构.png

这种索引表”一个索引项对应一个结点“,叫做”稠密索引“。
如果索引表中”一个索引项对应一组结点“,则叫做”稀疏索引”,稀疏索引如下图所示

 

稀疏索引.png

稀疏索引.png

索引表可以快速的对数据进行随机访问,又因为在进行数据的插入和删除时,只需要更改索引表中的地址值,不必移动结点,所以在数据更改方面也具有较高的效率。
但是索引存储结构在建立结点时会额外分配空间来建立一个索引表,因此降低了空间利用率。

4、散列存储结构

散列(hash)存储又称为哈希存储,是一种力图将数据元素的存储位置与关键字之间建立确定对应关系的查找技术。他的基本思想是通过一定的函数关系(散列函数,也称为哈希函数)计算出一个值,将这个值作为元素的存储地址。
散列存储的访问速度是非常迅速的,只需要给出相应的结点的关键字,他会立即计算出该结点的存储地址,因此它是一种非常重要的存储方法。

结束语

数据存储的几种方式各有其特点,也各有其用途,不能说哪一种存储结构就比另一种更好,在使用时,他们既可以单独使用,也可以结合起来使用,具体要根据操作和实际情况来决定采取哪一种方式,或者哪几种方式结合使用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值