线性表


数组和链表得到区别

数组链表 之间的主要区别在于它们的结构。数组是基于索引的数据结构,其中每个元素与索引相关联。另一方面,链表 依赖于引用,其中每个节点由数据和对前一个和下一个元素的引用组成。

随机存取和非随机存取

1.随机存取就是直接存取,可以通过下标直接访问的那种数据结构,与存储位置无关,例如数组。非随机存取就是顺序存取了,不能通过下标访问了,只能按照存储顺序存取,与存储位置有关,例如链表。

2.顺序存取就是存取第N个数据时,必须先访问前(N-1)个数据 (list),随机存取就是存取第N个数据时不需要访问前(N-1)个数据,直接就可以对第N个数据操作 (array)。

顺序存储和随机存储

顺序存储结构在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构。顺序存储结构是存储结构类型中的一种,该结构是把逻辑上相邻的节点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。由此得到的储结构为顺序存储结构,通常顺序存储结构是借助于计算机程序设计语言(例如c/c++)的数组来描述的。顺序存储结构的主要优点是节省存储空间,因为分配给数据的存储单元全用存放结点的数据

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

链式存储结构特点

  1、比顺序存储结构的存储密度小 (每个节点都由数据域和指针域组成,所以相同空间内假设全存满的话顺序比链式存储更多)。

  2、逻辑上相邻的节点物理上不必相邻。

  3、插入、删除灵活 (不必移动节点,只要改变节点中的指针)。

  4、查找结点时链式存储要比顺序存储慢。

  5、每个结点是由数据域和指针域组成。

链表

链表分为单链表,循环链表,双向链表,二叉链表,十字链表,邻接表,邻接多重表

首元节点,头节点,头指针

头结点:有时,在链表的第一个节点之前会额外增设一个节点,该节点的数据域一般不存放数据(有些情况下也可以存放链表的长度等信息),此节点被称为头节点。若链表中存在头节点,且头节点的指针域为空(NULL),表明链表是空表。头节点对于链表来说,不是必须的,换句话说,一个完整的链表中可以不设有头节点。那么,可能有人会问:既然头节点无关紧要,那它有什么作用?在处理某些问题时,给链表添加头节点会使问题变得简单。

首元节点:链表中第一个元素所在的节点,它是头节点后边的第一个节点。其实,首元节点和链表中存放数据的其他节点没什么不同,只是因为该节点位于链表的头部,所以被称为首元节点。

头指针:链表的头指针永远指向链表中第一个节点的位置,换句话说,如果链表有头节点,头指针指向头节点;否则,头指针指向首元节点。一个链表可以头节点,但不能没有头指针。

头节点和头指针的区别是:

  • 头指针是一个指针,头指针指向链表的头节点或者首元节点;

  • 头节点是一个实际存在的节点,它包含有数据域和指针域。

头节点和头指针的区别在程序中的直接体现是:头指针只声明而没有分配存储空间,头节点需要声明并分配一个节点的实际物理内存。

循环链表,双向链表

循环链表是表中最后一个节点的指针域指向头节点。整个链表形成一个环。

双向链表就是每个节点都有两个指针域,一个指向前驱,一个指向后继


文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录