线性表的顺序存储结构和链式存储结构

印前 印前     2022-08-03     551

关键词:

前言

上一篇《栈》中提到了栈的顺序存储结构和链式存储结构,现在就对此做个简单的比较。因为栈是线性表的一种,顺序存储结构和链式存储结构实际是线性表的两种存储方式。而栈和队列都是两种重要的线性表结构。所以本文标题直接为线性表的顺序存储结构和链式存储结构。

开始比较两种不同的存储方式

一、顺序存储结构(也可称为顺序表)

顺序表的特点是逻辑上相邻的数据元素,物理存储位置也相邻,并且,顺序表的存储空间需要预先分配。

  • 优点:

         (1)方法简单,各种高级语言中都有数组,容易实现。

      (2)不用为表示节点间的逻辑关系而增加额外的存储开销。

      (3)顺序表具有按元素序号随机访问的特点。

  • 缺点:

         (1)在顺序表中做插入、删除操作时,平均移动表中的一半元素,因此对n较大的顺序表效率低。

      (2)需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置;预先分配过小,又会造成溢出。

二、链式存储结构(也可以称为链表)

在链表中逻辑上相邻的数据元素,物理存储位置不一定相邻,它使用指针实现元素之间的逻辑关系。并且,链表的存储空间是动态分配的。

  • 优点:

  插入、删除运算方便。

  • 缺点:

      (1)要占用额外的存储空间存储元素之间的关系,存储密度降低。存储密度是指一个节点中数据元素所占的存储单元和整个节点所占的存储单元之比。

      (2)链表不是一种随机存储结构,不能随机存取元素。(同一时间随意访问一组序列中的任意组件称为随机存取亦称为直接访问)

三、如何应用

    (1)顺序表的存储空间是静态分配的,在程序执行之前必须明确规定它的存储规模,也就是说事先对“MaxSize”要有合适的设定,设定过大会造成存储空间的浪费,过小造成溢出。因此,当对线性表的长度或存储规模难以估计时,不宜采用顺序表。然而,链表的动态分配则可以克服这个缺点。链表不需要预留存储空间,也不需要知道表长如何变化,只要内存空间尚有空闲,就可以再程序运行时随时地动态分配空间,不需要时还可以动态回收。因此,当线性表的长度变化较大或者难以估计其存储规模时,宜采用动态链表作为存储结构。

  但在链表中,除数据域外海需要在每个节点上附加指针。如果节点的数据占据的空间小,则链表的结构性开销就占去了整个存储空间的大部分。当顺序表被填满时,则没有结构开销。在这种情况下,顺序表的空间效率更高。由于设置指针域额外地开销了一定的存储空间,从存储密度的角度来讲,链表的存储密度小于1.因此,当线性表的长度变化不大而且事先容易确定其大小时,为节省存储空间,则采用顺序表作为存储结构比较适宜。

  (2)基于运算的考虑(时间)

  顺序存储是一种随机存取的结构,而链表则是一种顺序存取结构,因此它们对各种操作有完全不同的算法和时间复杂度。例如,要查找线性表中的第i个元素,对于顺序表可以直接计算出a(i)的的地址,不用去查找,其时间复杂度为0(1).而链表必须从链表头开始,依次向后查找,平均需要0(n)的时间。所以,如果经常做的运算是按序号访问数据元素,显然顺表优于链表。

  反之,在顺序表中做插入,删除时平均移动表中一半的元素,当数据元素的信息量较大而且表比较长时,这一点是不应忽视的;在链表中作插入、删除,虽然要找插入位置,但操作是比较操作,从这个角度考虑显然后者优于前者。

  (3)基于环境的考虑(语言)

  顺序表容易实现,任何高级语言中都有数组类型;链表的操作是基于指针的。相对来讲前者简单些,也用户考虑的一个因素。

  总之,两种存储结构各有长短,选择哪一种由实际问题中的主要因素决定。通常“较稳定”的线性表,即主要操作是查找操作的线性表,适于选择顺序存储;而频繁做插入删除运算的(即动态性比较强)的线性表适宜选择链式存储。

 

资料转自于http://www.cnblogs.com/super-d2/archive/2012/08/10/2632064.html

 

线性表的顺序存储结构和链式存储结构的比较

一:顺序表的特点是逻辑上相邻的数据元素,物理存储位置也相邻,并且,顺序表的存储空间需要预先分配。它的优点是:  (1)方法简单,各种高级语言中都有数组,容易实现。  (2)不用为表示节点间的逻辑关系而增... 查看详情

数据结构学习笔记线性表的顺序存储和链式存储

线性表:由同类型数据元素构成有序序列的线性结构  --》表中元素的个数称为线性表的长度  --》没有元素时,成为空表  --》表起始位置称表头,表结束位置称表尾顺序存储:  1packagetest;23/**4*线性表(数组)5*6*/7publ... 查看详情

线性表的链式存储结构(链表)(代码片段)

目录线性表的链式存储结构1.相比于线性表的顺序存储结构的优缺点2.线性表的单链表储存结构3.单链表的整表创建(尾插法)4.单链表的整表输出3.单链表元素的获取4.单链表的插入5.//单链表的删除完整代码详解线性表的链式存储结... 查看详情

线性表的链式存储——线性表的链式存储结构

1,基于顺序存储结构插入或删除元素时候会涉及大量元素移动,非常影响效率,本文着手解决这个问题; 2,链式存储结构为了弥补顺序存储结构效率上的问题; 3,链式存储的定义:       1,... 查看详情

数据结构主要学啥内容

...理数据元素之间的关系。个人的一点见解参考技术A一、线性表(一)线性表的定义和基本操作(二)线性表的实现1.顺序存储结构2.链式存储结构3.线性表的应用二、栈、队列和数组(一)栈和队列的基本概念(二)栈和队列的... 查看详情

数据结构开发:线性表的链式存储结构(代码片段)

0.目录1.线性表的链式存储结构2.单链表的具体实现3.顺序表和单链表的对比分析4.小结1.线性表的链式存储结构顺序存储结构线性表的最大问题是:插入和删除需要移动大量的元素!如何解决?链式存储的定义:为了表示每个数据... 查看详情

线性表的链式存储结构

上一篇博文我对数据结构中线性表的顺序存储结构顺序表(http://12172969.blog.51cto.com/12162969/1916336)按照我的理解做了总结,今天我继续对顺序表的另一种存储结构,链表谈一下我看法。  链表为什么会出现?按照我的理解... 查看详情

线性表的链式存储(c代码实现)(代码片段)

线性表的链式存储结构线性表的实现分顺序存储结构和链式存储结构。上一节我们学学习了线性表的实现分顺序存储结构,并实现解顺序存储的基本操作。这一节我们来学习线性表链式存储结构,那我们再想象一下我为什么我们... 查看详情

线性表中的顺序存储与链式存储(代码片段)

本文你将了解数据结构中线性表的顺序存储与链式存储的基本操作.文章目录线性表顺序存储本代码用到的头文件线性表顺序存储的结构线性表顺序存储的初始化获取任意元素线性表顺序存储的插入线性表顺序存储的遍历线性表... 查看详情

[数据结构]-线性表

什么是线性表线性表是其组成元素间具有线性关系的一种线性结构,对线性表的基本操作主要有获得元素,设置元素值,遍历,插入,删除,查找,替换,和排序等,在线性表任意位置都可以插入和删除,可以采用顺序存储结构... 查看详情

计算机二级java语言卷005

选择题公共知识【1】下列叙述中正确的是()。〖A〗线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的〖B〗线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构〖C〗线性表的链式存储结构所需要的存... 查看详情

线性表

线性表是最简单的线性结构,线性表的主要操作特点是可以在任意位置插入和删除一个数据元素。线性表可以用顺序存储结构和链式存储结构存储。用顺序存储结构事先的线性表称为顺序表,用链式存储结构存储的称为链表。&nb... 查看详情

线性表的链式存储

  查找:线性表的顺序结构常数阶 链式线性阶插入和删除:线性表的顺序结构线性阶 链式常数阶 #include"stdio.h"#include"string.h"#include"ctype.h"#include"stdlib.h"#include"io.h"#include"math.h"#include"time.h"#defineOK1#de 查看详情

七线性表的链式存储结构(代码片段)

...开发数组类模板的原因在于:在创建基于顺序存储结构的线性表时,发现这样的线性表可能被误用,因为重载了数组访问操作符,使用时跟数组类似,但是线性表和数组有很大的区别,所以激发了新的需求:开发数组类替换C++原... 查看详情

线性表的顺序存储结构

  线性表从物理结构上分,有两种存储结构,一种是顺序存储结构,另一种是链式存储。这里呢,先讲一下顺序存储,毕竟,这种存储方式比较简单。  那么什么是顺序存储结构呢?以下,是书中关于线性表顺序存... 查看详情

第21课线性表的链式存储结构

...需要存储其直接后继的信息。(3)避免了顺序存储结构线性表在插入和删除元素时需要移动大量元素的问题。 2.链式存储逻辑结构(1)数据域:存储数据元素本身(2)指针域:存储相邻结点地址 3.链表中的基本概念(1... 查看详情

图解线性表

跟了几节王道课,发现在解决线性表问题时我们只需要形象地画出该线性表即可更好、更快地解决问题,对于考研者和数据结构初学小白来说很适用!1、认识线性表线性表:由n个数据元素组成的有限序列线性表由存储结构分为... 查看详情

栈的顺序存储和链式存储(代码片段)

...要的数据结构。从栈与队列的逻辑结构上来说,它们也是线性结构,与线性表不同的是它们所支持的基本操作是受到限制的,它们是操作受限的线性表,是一种限定性的数据结构。  栈(stack)又称堆栈,它是运算受限的线性... 查看详情