对于第二章 线性数据结构概念性的补充

线性数据结构

是一个更广泛的概念,它指的是数据元素以线性方式组织的任何数据结构。在这种结构中,元素之间具有序列关系,每个元素有零个或多个前驱元素,以及零个或多个后继元素,但每个元素最多只有一个前驱和一个后继。线性数据结构的例子包括数组、链表、栈和队列。

线性表

是线性数据结构的一种,通常指的是具有相同数据类型的元素的有序序列。线性表强调元素之间按照一定的顺序排列,每个元素都有一个前驱和一个后继(除了第一个和最后一个元素)。线性表可以用数组或链表等结构实现。它是一个抽象的概念,定义了元素线性排列的数据结构,以及在这些元素上可以执行的操作(如插入、删除、访问等)。
线性表的实现方式根据内存分配方式划分分为顺序表和链表,即顺序存储方式和链式存储方式。

所以说,线性表的两种实现方式确实是基于内存分配方式来划分的,分别为顺序存储方式(顺序表)和链式存储方式(链表)。

  1. 顺序存储方式(顺序表)

    • 该方式使用一块连续的内存空间来存储线性表中的元素。
    • 元素在内存中的位置可以通过起始地址和元素的索引计算得到(即通过数组的下标访问)。
    • 这种方式的优点是可以快速通过下标访问任何一个元素(随机访问)。
    • 缺点是插入和删除操作可能需要移动大量元素来维持元素的连续性,特别是在表的开始或中间位置进行这些操作时。
  2. 链式存储方式(链表)

    • 该方式由一系列不必在内存中连续存储的节点组成,每个节点至少包含两部分:一个是存储元素值的数据域,另一个是一个或两个指向其他节点的指针域。
    • 这种方式又可划分成单链表和双向链表,其中单链表中的每个节点包含一个指向下一个节点的指针,双向链表的节点则包含指向前一个和下一个节点的指针。
    • 这种方式的优点是插入和删除操作不需要移动除了操作点以外的其他节点,可以实现更高效的插入和删除。
    • 缺点是不能直接通过下标快速访问元素,访问元素通常需要从头开始遍历链表。

是线性表的一种特殊形式,遵循先进后出(Last In First Out, LIFO)的原则。栈只允许在一端(通常称为栈顶)进行插入和删除操作。栈可以使用数组或链表来实现,但无论使用哪种物理结构,栈的操作和特性都遵循LIFO原则。

队列

也是线性表的一种特殊形式,它遵循先进先出(First In First Out, FIFO)的原则。队列的插入操作发生在一端(队尾),而删除操作发生在另一端(队头)。队列同样可以用数组或链表实现,但操作总是遵循FIFO原则。

顺序表(数组)

是实现线性表的一种方式,通过连续的内存空间来存储元素,支持通过索引快速访问元素。但数组的大小在初始化时就被确定,之后不易改变。
顺序表(数组)也有实现方式,根据内存分配方式划分分为静态数组和动态数组,即内存静态分配和动态分配。

链表

是另一种实现线性表的方式,它通过节点的集合来存储元素,每个节点包含数据部分和一个或多个指向其他节点的指针(链接)。链表的大小可以动态变化,容易插入和删除元素,但链表在随机访问方面不如数组高效,因为它需要从头结点开始逐个遍历节点直到达到所需位置。

总结

线性数据结构是按照一定顺序连接的数据元素的集合,其中每个元素都有唯一的前驱和后继(除了第一个和最后一个元素)。线性数据结构是数据结构中最基础、最广泛使用的一类,因为它们简单、直观,并且在很多情况下非常高效。

在这个宽泛的类别中,我们会找到多种特定类型的线性结构,包括:

  1. 线性表:这是线性数据结构的一个子集,强调数据元素的线性顺序。线性表表示元素是一对一关系,每个元素(除了第一个和最后一个)都有一个前驱和一个后继。线性表中的操作包括插入、删除、查找、遍历等。

  2. (Stack)和队列(Queue):这些都是线性表,但是它们有特定的操作限制。栈是遵循后进先出(LIFO)原则的线性表,而队列遵循先进先出(FIFO)原则。

数组和链表通常被视为实现线性表的两种方式,而不是作为独立的线性数据结构类别。线性表可以通过不同的物理结构来实现,最常见的就是数组和链表。

  • 数组作为线性表的实现方式之一,特点是分配连续的内存空间来存储数据元素,支持快速的随机访问。
  • 链表作为另一种实现方式,是由一系列节点组成,每个节点包含数据和一个或多个指向其他节点的链接,不需要连续的内存空间,允许更灵活的内存使用。

数组和链表本身更准确地描述为线性表的存储结构或实现方式,而线性数据结构是一个更广泛的概念,包括了具有特定访问模式的结构如栈和队列、线性表等。

05-02 06:50