从头开始学习->java数据结构(一):物理上的存储结构

前言

我们都知道,所谓的数据结构,都是我们在为了更好的对数据的增删改查而创造出来的对数据的结构设计,但是我们要知道的是,这些数据结构都是抽象的逻辑结构,并不是真实的物理上的存储结构,大部分时候,我们对数据结构的讨论,也都是讨论的是逻辑上的数据结构,并不是对真实的存储在硬盘中的数据的存储结构的讨论。

真实的物理上的数据,存储到我们的硬盘上的或者是在内存上的时候,都是有着确切的存储结构的,而不是我们想象中的类似b树,二叉树这种抽象的逻辑结构。

那么,在我们的硬盘上,数据是如何存储的呢?这个问题,是我们去研究逻辑上的数据结构之前,需要搞清楚的问题,也是我们本篇文章的主题。

正文

物理存储结构,是数据的逻辑结构在计算机中的存储形式。

但是在理解物理上的数据存储结构之前,我们要先对硬盘有一个足够的了解。

硬盘是一个实际存在的物品,那么也就是说,这个硬盘不可能如我们想象出的逻辑设计那样,去存储我们的数据。想象一下,如果存一百万条数据,我们在硬盘中随意存储,不按照客观的物理规则来存储,那么我们会发现,硬盘的空间会被很大的浪费掉。

也因此,在硬盘中存储数据的时候,我们必须按照一定的客观规律来。而这种客观规律,在计算机发展的过程中,逐渐形成了现在比较常见的两种规律。

1.顺序存储结构

顺序存储结构,是将我们逻辑上的数据结构中相邻的数据,在物理位置上,也存储在相邻的位置。数据结构中的节点关系由存储单元的邻接关系来体现。

也就是说,数据间的逻辑关系和物理关系是一致的。

一般来说,在我们java语言中,描述这种物理存储结构的话,都是借助我们的 数组 来阐述的。如图所示:

image

这种存储结构,还是很好理解的,说白了,就是排队而已,每一条数据都是占一小段空间,按照顺序站好,占据着连续的存储空间。

1.1 优点

顺序存储结构的优点还是比较明显的,由于是按照物理上的存储空间的顺序存储数据,那么对存储空间的利用率就会非常高,存储密度比较大。

而且因为是顺序存储数据,那么也就是说,我们的数据,存储在这里的时候,天然在硬盘中的平均寻道时间中,就会快很多。

那么,什么是寻道时间呢? 先看一张关于磁盘的图片,如下:

image

我们发现,这种传统的硬盘,数据是存储到磁盘中的磁道(磁盘盘片)中,通过磁头(读写磁头)来查找数据。而平均寻道时间就是指磁头移动到数据所在的磁道所使用的时间的平均值。

如果硬盘的寻道速度变快,那么就意味着我们的查找数据能力也在变快。

而在我们的顺序存储结构中,我们的数据是按照磁道的轮转顺序存储到磁道上的,也就是说,当我们进行数据查找的时候,会更快的定位到实际的数据所在,这也就是意味着我们的数据查找速度变快。
<table><tr><td>
小知识;

在现代的计算机进化过程中,数据的存储有了很大的变化,比如说我们现在比较常见的固态硬盘,由于SSD固态硬盘没有磁头,所以几乎不存在寻道时间这一概念,当系统发出指令时,不需要磁头和盘片,而是直接从Flash颗粒上读取,相对传统的机械硬盘的寻道时间来说要快多了。
</td></tr></table>

顺序存储结构的优点总结如下:

  1. 数据存储密度大,存储空间的利用率要大。
  2. 查找速度比较快。

1.2 缺点

首先我们知道的是,顺序存储结构,存储的数据,在存储空间中,是连续的,如下图所示;


image

那么当我们要插入一条数据的时候,会怎么样呢?如图所示:

image

从图所示的插入过程中,我们发现,自插入位置起,后面的所有数据元素都往后面移动了一位,想一想,如果数据量上去了,那么等于大量的数据都要移动,而且实际的情况,远远比这个更糟糕,所以这样的插入效率,可想而知。

而删除的过程,虽然和插入恰恰相反,但是造成的后果,都是一样的,都是会导致大量的数据移动位置。

也因此,我们知道的是,顺序存储结构的缺点,就是在插入或者是删除的时候,效率会比较低。

2. 链式存储结构

在实际的数据操作过程中,有的数据结构需要的是查找的时候速度快一点,那么我们的顺序存储结构是符合这种需求的,但是也有很多时候,我们的数据会被多次删除也会被多次的插入,这就引发了一个问题,顺序存储结构不能满足这种需求场景,于是就出现了链式存储结构。

链式存储结构是将数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。

也就是说,在链式存储结构中,数据是可以放到这个存储空间的任意位置,也因此,数据与数据之间物理位置的关系,不能表达出数据之间的逻辑关系。

那么,要如何解决这种逻辑关系呢?

于是在链式存储结构中,会将一个数据单元,分为两个区域,一个数据域,一个指针域。

数据域存储的就是我们实际的数据,而指针域则存储的是关联的其他数据的位置的指针,如果要通过链式存储结构存储数据 [A , B , C , D , E] ,存储的大概模型如图所示:


image

在这张图的基础上,经过转变后,将图变为如下的样子:


image

这样可以看的出来,指针域指向了下一个数据节点,也就是说,在连式存储结构中,数据之间的关系,是通过指针域的指向关系来表现的,和数据实际存储的位置没有关系。

2.1 优点

链式存储结构的优点是很好理解的,先看链式存储结构的插入图:


image

由于链式存储结构中,数据的关系不是由数据的实际存储位置表示的,而是由各个数据节点的指针域来表示的,那么也就是说,在数据插入或者删除的时候,不需要将插入数据后面的数据移动,只需要修改一下指针域的指向性就可以了。


image

也就是说,链式存储结构的插入或者删除元素很方便,比较灵活。而且我们看到的是,链式存储结构不需要连续的内存来存储,也就是说,对碎片型的内存的利用效率还是相对比较高的。

2.2 缺点

在顺序存储结构中,数据的存储就只需要存储这个数据就行。但是在链式存储结构中,数据的存储,除了存储的是这个数据外,还需要存储和这个数据相关的指针域。


image

这样,就相比于顺序存储结构外,链式存储结构多存储了一部分其他的数据,所以对存储空间的利用率就会降低。

而且要注意的是,链式存储结构,在物理逻辑上讲,因为实际存储的位置不是顺序的,那么读取的时候,效率会比较低。

总结

3.1 顺序存储结构

优点:

  1. 数据存储密度大,存储空间的利用率要大。
  2. 查找速度比较快。
    缺点:
  3. 插入或者是删除的时候,效率会比较低

3.2 链式存储结构

优点:

  1. 插入或者删除的时候,效率比较高
  2. 对碎片型的内存利用率高。
    缺点:
  3. 额外新增了指针域的数据,对内存的消耗大
  4. 在读取的时候效率比较低。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容