当前位置: 首页 > news >正文

顺序存储结构与链式存储结构

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

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

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

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

往顺序线性表中插入数据

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

往顺序线性表中删除元素

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

1581679-20190912180344717-1171728140.png

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

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

往链式线性表中插入数据

(1)往链表的后方添加元素
1581679-20190912180808362-1749329821.png
这里我们先看图,其实就是将想要插入的元素往链表的尾部插入,然后更新一下为节点tail的位置即可。

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

往链式线性表中删除数据

1581679-20190912182709333-1518099807.png

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

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

转载于:https://www.cnblogs.com/surenjiesu/p/11514312.html

相关文章:

  • Apache Kafka(九)- Kafka Consumer 消费行为
  • xray写POC踩坑
  • 对 Watchbog Botnet 渗透过程和 Payload 的分析
  • c++ 初学者 慢慢成长中
  • max pool实现
  • Kafka Stream 以及其他流处理框架对比
  • cpp 面向对象初步探索
  • cpp 实现简易String类
  • Apache Kafka(十)Partitions与Replication Factor 调整准则
  • 蒜头君的购物袋1、蒜头君的购物袋2-(01背包)
  • vue页面传参
  • SSM框架-Spring
  • 端口扫描
  • js 条件方法、数组方法
  • 利用Python原始库完成一个端口扫描的功能
  • 《剑指offer》分解让复杂问题更简单
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【RocksDB】TransactionDB源码分析
  • Android Volley源码解析
  • Angular Elements 及其运作原理
  • CSS相对定位
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • js中forEach回调同异步问题
  • Rancher-k8s加速安装文档
  • SpingCloudBus整合RabbitMQ
  • spring + angular 实现导出excel
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 你不可错过的前端面试题(一)
  • 前端工程化(Gulp、Webpack)-webpack
  • 前端之React实战:创建跨平台的项目架构
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 阿里云ACE认证之理解CDN技术
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • # .NET Framework中使用命名管道进行进程间通信
  • #pragma 指令
  • (1)常见O(n^2)排序算法解析
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • ***检测工具之RKHunter AIDE
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET 分布式技术比较
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .net6 webapi log4net完整配置使用流程
  • .NET构架之我见
  • .NET使用存储过程实现对数据库的增删改查
  • [ C++ ] STL_list 使用及其模拟实现
  • [145] 二叉树的后序遍历 js
  • [APIO2015]巴厘岛的雕塑
  • [Assignment] C++1
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • [C\C++]读入优化【技巧】