一、逻辑结构(Logical Structure)
逻辑结构描述数据元素之间的抽象关系,与数据的存储方式无关,是用户视角的数据组织形式。主要分为四类:
-
集合结构
- 数据元素之间除了“同属一个集合”外,无其他关系。
- 示例:互不相同的元素组成的集合。
-
线性结构
- 数据元素存在一对一的序列关系。
- 特点:除首尾元素外,每个元素有唯一前驱和后继。
- 示例:数组、链表、栈、队列。
-
树形结构
- 数据元素存在一对多的层次关系。
- 特点:有且仅有一个根节点,节点间具有父子关系。
- 示例:二叉树、B树、家谱。
-
图状/网状结构
- 数据元素存在多对多的任意关系。
- 特点:节点间可任意连接,无层次限制。
- 示例:社交网络、地图路径。
二、存储结构(Storage Structure / Physical Structure)
存储结构描述数据在计算机内存中的实际存储方式,是逻辑结构的物理实现。常见类型如下:
-
顺序存储结构
- 特点:用连续的存储单元存放数据,逻辑上相邻的元素物理位置也相邻。
- 优点:随机访问快(通过下标直接定位)。
- 缺点:插入/删除需移动大量元素;存储空间需预先分配。
- 示例:数组(Array)。
-
链式存储结构
- 特点:通过指针链接节点,逻辑上相邻的元素物理位置可随意。
- 优点:动态分配内存;插入/删除效率高。
- 缺点:无法随机访问;指针占用额外空间。
- 示例:链表(Linked List)、二叉树指针表示。
-
索引存储结构
- 特点:建立索引表(如键值对),通过索引快速定位数据。
- 优点:检索速度快(尤其对大数据集)。
- 缺点:索引表占用额外空间;增删需维护索引。
- 示例:数据库索引、字典(Dictionary)。
-
散列存储结构(哈希存储)
- 特点:通过哈希函数直接计算数据存储位置。
- 优点:查询/插入/删除速度快(理想情况下 O(1))。
- 缺点:哈希冲突需处理;不适合范围查询。
- 示例:哈希表(Hash Table)。
三、逻辑结构与存储结构的关系
1. 依赖与分离
-
逻辑结构是设计目标:定义数据元素间的抽象关系(如线性、树形)。
-
存储结构是实现手段:决定如何在内存中物理存放数据(如数组、链表)。
-
同一逻辑结构可用不同存储结构实现:
-
例如“线性表”逻辑结构:
- 可用顺序存储(数组)
- 也可用链式存储(链表)。
-
2. 选择影响效率
-
不同存储结构适用于不同操作:
操作 顺序存储(数组) 链式存储(链表) 随机访问 ✅ O(1) ❌ O(n) 插入/删除元素 ❌ O(n) ✅ O(1)
3. 抽象与具体的桥梁
-
逻辑结构 → 定义“数据是什么关系”(What)。
-
存储结构 → 解决“如何存储和访问”(How)。
-
示例:
-
树形逻辑结构(如二叉树):
- 可用链式存储(节点含左右指针)
- 也可用顺序存储(数组模拟堆结构)。
-
四、关键总结
| 概念 | 核心说明 | 常见类型 |
|---|---|---|
| 逻辑结构 | 数据元素的抽象关系 | 集合、线性、树形、图状 |
| 存储结构 | 数据在内存的物理实现方式 | 顺序、链式、索引、散列 |
| 关系 | 逻辑结构决定“做什么”,存储结构决定“怎么做” | 同一逻辑结构可对应多种存储结构实现 |
💡 重要提示:
设计数据结构时,先根据问题需求确定逻辑结构(如需要快速查找选树形),再根据操作频率选择存储结构(如频繁插入删除选链表)。理解二者的区别与联系是优化程序性能的基础!