数据结构中逻辑结构和存储结构对应有哪些

逻辑结构 (数据之间的抽象关系) + 存储结构(这些关系在计算机内存中的具体实现方式) = 数据结构

一、逻辑结构(完整分类)

注:集合结构有时单独列出,有时归入非线性结构。

类别 子类型 典型例子
线性结构 一般线性表 顺序表、链表
受限线性表 栈、队列
推广线性表 串(字符线性表)
非线性结构 树形结构 二叉树、二叉搜索树、堆、B树
图形结构 有向图、无向图
集合结构 哈希表(逻辑上可视为集合)、并查集
  1. 集合:数据元素间无特定关系(属于同一集合)。

  2. 线性结构:一对一关系(如线性表、栈、队列)。

  3. 树形结构:一对多关系(如树、堆)。

  4. 图形结构:多对多关系(如有向图、无向图)。

二、存储结构(计算机中的实现方式)

主要有四种基本方式(可组合使用):

存储结构 核心特点 对应的逻辑结构示例
顺序存储 用连续内存单元存储,逻辑相邻→物理相邻 线性结构(数组、栈、队列)、完全二叉树(堆)
链式存储 用附加指针连接结点,不要求物理连续 线性表(链表)、树(二叉链表)、图(邻接表)
索引存储 建立索引表,通过索引项访问数据 线性结构(索引顺序表)、树(B+树等)
哈希存储 通过哈希函数直接计算存储地址 集合、线性结构(哈希表)
"逻辑上相邻,物理上不一定相邻"
  • 顺序存储:逻辑相邻 → 物理相邻

  • 链式存储:逻辑相邻 → 物理不一定相邻(靠指针)

"存储密度"对比
  • 顺序存储:存储密度 ≈ 1(几乎没有额外开销)

  • 链式存储:存储密度 < 1(每个节点多一个/多个指针

三、逻辑结构与存储结构的完整对应表

逻辑结构 常用存储结构(组合)
线性表 顺序存储(顺序表) 链式存储(单/双/循环链表) 索引存储(索引顺序表)
顺序存储(顺序栈) 链式存储(链栈)
队列 顺序存储(循环队列) 链式存储(链队列)
顺序存储(定长/堆分配) 链式存储(块链)
树 / 二叉树 顺序存储(完全二叉树/堆) 链式存储(二叉/三叉链表) 索引存储(B/B+树)
顺序存储(邻接矩阵) 链式存储(邻接表、十字链表) 索引/散列(边集数组+索引)
集合(哈希表) 散列存储 + 顺序/链式(处理冲突)

四、逻辑结构的"操作特性"与存储结构的"实现约束"

不能只看对应关系,还要看约束

逻辑结构 隐含的操作特性 存储结构带来的限制
后进先出(LIFO) 顺序栈有最大容量限制;链栈无容量上限但需要额外指针空间
队列 先进先出(FIFO) 顺序队列容易"假溢出",所以常用循环队列;链队列则无此问题
树(二叉树) 父子关系、层次遍历 顺序存储只适合完全二叉树,普通二叉树会浪费大量空间
任意顶点间可达 邻接矩阵适合稠密图,邻接表适合稀疏图

关键点:逻辑结构定义"能做什么",存储结构决定"做得好不好"(时间/空间代价)。

五、不同存储结构的对比

存储结构 优点 缺点
顺序存储 随机访问快(O(1))、空间利用率高(无指针开销) 插入/删除慢(需移动元素)、需预先分配连续空间
链式存储 插入/删除快(O(1) 已知位置)、动态扩展 随机访问慢(O(n))、额外指针占用空间
索引存储 查找较快、支持范围查询 维护索引有额外开销、索引本身也占空间
散列存储 查找极快(O(1) 平均) 不支持顺序遍历、存在冲突问题、空间利用率不稳定
复杂度对比(同一逻辑结构,不同存储结构)
逻辑结构 存储结构 访问第i个 插入/删除(已知位置) 查找(按值) 空间占用
线性表 顺序表 O(1) O(n) O(n) 较省
线性表 链表 O(n) O(1) O(n) 额外指针
顺序栈 O(1)(仅栈顶) O(1) --- 固定容量
链栈 O(1)(仅栈顶) O(1) --- 动态扩展
队列 循环队列 O(1)(仅队首/队尾) O(1) --- 可能假溢出
队列 链队列 O(1)(仅队首/队尾) O(1) --- 无假溢出

六、容易被忽略的"混合存储结构"

实际中很多数据结构是混合使用多种存储方式的:

数据结构 实际存储方式 混合成分
哈希表(拉链法) 散列存储 + 链式存储 数组(顺序)+ 链表(链式)
B+树 索引存储 + 顺序存储 多级索引 + 叶子节点顺序链表
邻接表(图) 顺序存储 + 链式存储 顶点数组(顺序)+ 边链表(链式)
跳表 链式存储 + 索引存储 多级链表 + 前进指针(类似索引)

结论:不要认为一个数据结构只用一种存储方式,组合往往更强大。

相关推荐
磊 子2 小时前
八大排序之冒泡排序+选择排序
数据结构·算法·排序算法
潇洒畅想2 小时前
1.1 从∑到∫:用循环理解求和与累积
java·数据结构·python·算法
计算机安禾3 小时前
【数据结构与算法】第41篇:图论(五):拓扑排序与关键路径
c语言·数据结构·c++·算法·图论·visual studio
玉树临风ives4 小时前
atcoder ABC 453 题解
数据结构·c++·算法·图论·atcoder
琪伦的工具库5 小时前
批量PDF合并工具使用说明:批量合并与直接合并两种模式,拖拽排序/页面范围/遍历子目录/重名自动处理
数据结构·pdf·排序算法
山甫aa5 小时前
哈希集合-----从零开始的数据结构学习
数据结构·算法·哈希算法
say_fall5 小时前
有关算法的简单数学问题
数据结构·c++·算法·职场和发展·蓝桥杯
小杰帅气5 小时前
算法的时间和空间复杂度
数据结构
阿Y加油吧5 小时前
二分查找进阶:旋转排序数组的两道经典题深度解析
数据结构·算法