数据结构可视化
OVERVIEW

数据间的逻辑关系

💡

什么是数据结构?

数据结构(Data Structure)是数据的表示法,用于存储和组织数据。编写程序就像盖房子一样,要先规划出房子的结构图。

数据结构 + 算法 = 有效率的可执行程序
📂

数据结构分类

LINEAR

线性数据结构

数据项按顺序或线性排序,每个成员都附加到其前一个和下一个相邻元素。

  • 数组 (Array)
  • 堆栈 (Stack)
  • 队列 (Queue)
  • 链表 (Linked List)
NON-LINEAR

非线性数据结构

数据项不是按顺序排列的,每个成员可以通过多条路径连接到其他成员。

  • 树 (Tree)
  • 图 (Graph)
🚀

开始探索

点击左侧菜单,开始探索各种数据结构的可视化操作!

LINEAR

数组 (Array)

数组是存储在连续内存位置的相同数据类型集合,支持通过索引直接访问任意元素。

生活中的例子:教室座位排号、超市货架编号、停车场车位

执行流程图

操作说明

  • 插入:输入元素值和索引位置,在指定位置插入新元素
  • 删除:输入索引位置,删除该位置的元素
  • 查找:只输入值则遍历查找;同时输入值和索引则直接访问该位置比对

时间复杂度

  • 访问(按索引):O(1)
  • 查找(按值):O(n)
  • 插入/删除:O(n)

应用场景

  • 存储固定大小的数据集合
  • 实现其他数据结构(如栈、队列)的底层
  • 矩阵运算、图像处理
LINEAR

堆栈 (Stack)

堆栈是一组相同数据类型的线性组合,所有的操作均在堆栈顶端进行,具有"后进先出"(LIFO)的特性。

生活中的例子:糖果分配器、手枪弹夹、只有一个出入口的直梯

栈顶 TOP
栈底
执行流程图

操作说明

  • Push:输入元素值,将其压入栈顶
  • Pop:弹出并返回栈顶元素
  • Peek:查看栈顶元素但不弹出
  • 设置容量:输入1-20的数字设置栈的最大容量

时间复杂度

  • 所有操作:O(1)

应用场景

  • 反转单词
  • 计算后缀表达式
  • 浏览器后退按钮
LINEAR

队列 (Queue)

队列遵循"先进先出" (FIFO)规则。类似于电影售票队列,第一个进入队列的人就是第一个拿到票的人。

生活中的例子:扶梯、在食堂打饭时

FRONT (队首)
REAR (队尾)
执行流程图

操作说明

  • Enqueue:输入元素值,将其添加到队尾
  • Dequeue:移除并返回队首元素
  • Peek:查看队首元素但不移除
  • 设置容量:输入1-20的数字设置队列的最大容量

时间复杂度

  • 所有操作:O(1)

应用场景

  • CPU调度
  • 网络设备队列
  • IO缓冲
LINEAR

链表 (Linked List)

链表是包含一系列连接节点的线性数据结构。其各个数据项在计算机内存中的位置是不连续且随机存放的,优点是数据的插入或删除都相当方便。

生活中的例子:火车,有多少人就挂多少节车厢

执行流程图

操作说明

  • 头部插入:输入元素值,在链表头部添加新节点
  • 尾部插入:输入元素值,在链表尾部添加新节点
  • 指定位置插入:输入元素值和位置,在指定位置添加新节点
  • 删除指定值:输入元素值,删除第一个匹配的节点
  • 查找:输入元素值,从头遍历查找该元素的位置

时间复杂度

  • 头部插入/删除:O(1)
  • 尾部插入/查找/删除:O(n)
NON-LINEAR

二叉树 (Binary Tree)

二叉树是一种树状数据结构,其中每个节点最多可以有两个子节点。二叉搜索树中,左子树的值都小于根节点,右子树的值都大于根节点。

生活中的例子:公司组织架构、文件目录结构、族谱

执行流程图

操作说明

  • 插入节点:输入数值,按二叉搜索树规则插入新节点
  • 搜索节点:输入数值,在树中查找该节点并显示路径

遍历方式

  • 前序遍历:根节点 → 左子树 → 右子树
  • 中序遍历:左子树 → 根节点 → 右子树(输出有序序列)
  • 后序遍历:左子树 → 右子树 → 根节点

时间复杂度

  • 搜索/插入/删除:O(h),h为树高
  • 遍历:O(n)
NON-LINEAR

图 (Graph)

图是由顶点(Vertices)和边(Edges)组成的非线性数据结构。图将信息中的实体以及实体之间的关系,分别抽象表达成为顶点以及顶点间的边。

生活中的例子:交通路网、计算机网络、社交网络

执行流程图

操作说明

  • 添加顶点:输入顶点名称(如A、B),添加到图中
  • 添加边:输入起点和终点,建立两个顶点之间的连接
  • BFS/DFS:从第一个顶点开始遍历所有可达顶点

图的表示

  • 邻接矩阵:用二维数组表示顶点之间的关联关系
  • 邻接表:将图表示为链表数组,存储效率高

遍历方式

  • BFS:广度优先,按层次遍历
  • DFS:深度优先,沿一条路径深入到底