This commit is contained in:
krahets
2023-12-02 06:24:05 +08:00
parent a4a23e2488
commit a7f5434009
93 changed files with 1463 additions and 1484 deletions

View File

@@ -8,18 +8,18 @@ comments: true
## 3.1.1   逻辑结构:线性与非线性
**逻辑结构揭示了数据元素之间的逻辑关系**。在数组和链表中,数据按照顺序依次排列,体现了数据之间的线性关系;而在树中,数据从顶部向下按层次排列,表现出祖先后代之间的派生关系;图则由节点和边构成,反映了复杂的网络关系。
**逻辑结构揭示了数据元素之间的逻辑关系**。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线性关系;而在树中,数据从顶部向下按层次排列,表现出祖先”与“后代之间的派生关系;图则由节点和边构成,反映了复杂的网络关系。
如图 3-1 所示,逻辑结构可分为“线性”和“非线性”两大类。线性结构比较直观,指数据在逻辑关系上呈线性排列;非线性结构则相反,呈非线性排列。
如图 3-1 所示,逻辑结构可分为“线性”和“非线性”两大类。线性结构比较直观,指数据在逻辑关系上呈线性排列;非线性结构则相反,呈非线性排列。
- **线性数据结构**:数组、链表、栈、队列、哈希表。
- **非线性数据结构**:树、堆、图、哈希表。
![线性与非线性数据结构](classification_of_data_structure.assets/classification_logic_structure.png){ class="animation-figure" }
![线性数据结构与非线性数据结构](classification_of_data_structure.assets/classification_logic_structure.png){ class="animation-figure" }
<p align="center"> 图 3-1 &nbsp; 线性与非线性数据结构 </p>
<p align="center"> 图 3-1 &nbsp; 线性数据结构与非线性数据结构 </p>
非线性数据结构可以进一步划分为树形结构和网状结构。
非线性数据结构可以进一步划分为树形结构和网状结构。
- **线性结构**:数组、链表、队列、栈、哈希表,元素之间是一对一的顺序关系。
- **树形结构**:树、堆、哈希表,元素之间是一对多的关系。
@@ -35,13 +35,13 @@ comments: true
<p align="center"> 图 3-2 &nbsp; 内存条、内存空间、内存地址 </p>
!!! note
!!! tip
值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉及到地址空间、内存管理、缓存机制、虚拟和物理内存等概念。
内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。**因此在数据结构与算法的设计中,内存资源是一个重要的考虑因素**。比如,算法所占用的内存峰值不应超过系统剩余空闲内存;如果缺少连续大块的内存空间,那么所选用的数据结构必须能够存储在分散的内存空间内。
如图 3-3 所示,**物理结构反映了数据在计算机内存中的存储方式**,可分为连续空间存储(数组)和分散空间存储(链表)。物理结构从底层决定了数据的访问、更新、增删等操作方法,在时间效率和空间效率方面呈现出互补的特点。
如图 3-3 所示,**物理结构反映了数据在计算机内存中的存储方式**,可分为连续空间存储(数组)和分散空间存储(链表)。物理结构从底层决定了数据的访问、更新、增删等操作方法,两种物理结构在时间效率和空间效率方面呈现出互补的特点。
![连续空间存储与分散空间存储](classification_of_data_structure.assets/classification_phisical_structure.png){ class="animation-figure" }
@@ -52,8 +52,8 @@ comments: true
- **基于数组可实现**:栈、队列、哈希表、树、堆、图、矩阵、张量(维度 $\geq 3$ 的数组)等。
- **基于链表可实现**:栈、队列、哈希表、树、堆、图等。
基于数组实现的数据结构也被称为“静态数据结构”,这意味着此类数据结构在初始化后长度不可变。相对应地,基于链表实现的数据结构被称为“动态数据结构”,这类数据结构在初始化后,仍可以在程序运行过程中对其长度进行调整。
基于数组实现的数据结构也“静态数据结构”,这意味着此类数据结构在初始化后长度不可变。相对应地,基于链表实现的数据结构“动态数据结构”,这类数据结构在初始化后,仍可以在程序运行过程中对其长度进行调整。
!!! tip
如果你感觉物理结构理解起来有困难,建议先阅读下一章“数组与链表”,然后再回顾本节内容。
如果你感觉物理结构理解起来有困难,建议先阅读下一章,然后再回顾本节内容。