zoukankan      html  css  js  c++  java
  • 顺序存储结构与链式存储结构

    上一篇博客简单讲述了一下两种结构的概念这一篇博客主要想讲述一下他们之间的区别

    顺序存储结构与链式存储结构的优缺点

    1、顺序存储结构

    概念官方一点来说可以使用百度百科的介绍:顺序存储结构是存储结构类型中的一种,该结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。
    当然不得不说一般这种官方的解释都是不太适合我的,所以用小甲鱼的方式来说这个概念的话,简单来说就是,用一段连续的地址存放数据元素,数据间的逻辑关系和物理关系相同。

    优点1:存储密度大,空间利用度高,比链式存储节约空间
    优点2:存储操作上方便操作,顺序支持随机存取,查找会比较容易
    缺点1:插入或者删除元素时不方便,花费的时间更多

    往顺序线性表中插入数据

    见下图往B与C之间插入一个M,在插入之前我们需要将CD整体往后移一个位置,为M空出一个位置,再见M放入。

    往顺序线性表中删除元素

    与上面所说的插入其实挺像的,前者在插入位置后的元素都往后移,二一处则是向左移覆盖掉要删除的元素,需要注意的是,要将最后一个元素进行移除,可以参考下图

    2、链式存储结构

    概念:链式存储结构,又叫链接存储结构。在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的).它不要求逻辑上相邻的元素在物理位置上也相邻.因此它没有顺序存储结构所具有的弱点,但也同时失去了顺序表可随机存取的优点

    优点1:插入或删除时方便些,空间使用灵活
    缺点1:存储密度小,空间利用度低
    缺点2:查找会相较顺序存储方式复杂一些,花费的时间会更多

    往链式线性表中插入数据

    (1)往链表的后方添加元素

    这里我们先看图,其实就是将想要插入的元素往链表的尾部插入,然后更新一下为节点tail的位置即可。

    (2)往链表的头部插入元素

    今天我们的廖老师将这个内容的时候提到怎么一句话“谁想进来,谁就去找组织”看这个图我想你应该可以理解这句话,首先第一步需要我们的“C”去找组织中的A,第二步是头结点接到新元素C上。

    往链式线性表中删除数据

    要想移除单向链表中的一个元素,首先我们得找到被移除结点的前驱的位置,比如是pre“A”。当前移除的元素是remove“B”,让pre->next = remove->next, 然后再执行remove->next = nil。经过上面这些步骤,B就与链表脱离关系了。可参考我学习时看到的一篇博客

    但是在百度上面看到怎么一句话
    链式的要比顺序的方便(这句话是不能这么说的,因为插入的话顺序表也很方便,问题是顺序表的插入要执行更大的空间复杂度,包括一个从表头索引以及索引后的元素后移,而链表是索引后,插入就完成了)

  • 相关阅读:
    bzoj3295
    bzoj1135
    [luoguP1328] 生活大爆炸版石头剪刀布(模拟)
    考后总结
    [luoguP1970] 花匠(DP)
    [POJ3463] Sightseeing(次短路 Heap + Dijkstra)
    [luoguP2885] [USACO07NOV]电话线Telephone Wire(DP + 贪心)
    [luoguP2709] 小B的询问(莫队)
    [luoguP1972] [SDOI2009]HH的项链(莫队 || 树状数组 || 主席树)
    [luoguP2617] Dynamic Ranking(树状数组 套 主席树 + 离散化)
  • 原文地址:https://www.cnblogs.com/surenjiesu/p/11514312.html
Copyright © 2011-2022 走看看