# algorithms-visualizer
**Repository Path**: huang_weisheng/algorithms-visualizer
## Basic Information
- **Project Name**: algorithms-visualizer
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-03-11
- **Last Updated**: 2025-03-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Data structure & algorithms visualizer
线上演示地址:[Unity WebGL Player | Data Structure And Algorithms Visualizer (zichengcao.github.io)](https://zichengcao.github.io/algorithms-visualizer/)
使用 unity 实现的常见数据结构与算法可视化系统,支持常见的算法与数据结构:
具体而言支持的演示功能:
- 排序算法【冒泡排序,选择排序,插入排序,希尔排序,快速排序,归并排序】
- 支持单步(**正向与反向**)、自动演示、动画速度调节
- 支持设定数组长度、数据类型
- 支持多种算法同步对比
- 搜索算法【线性查找,二分查找】
- 支持单步(**正向与反向**)、自动演示、动画速度调节
- 支持设定数组长度
- 链表【单链表,双向链表】
- 支持单步、自动、**代码同步**演示
- 支持头插、尾插、搜索、删除结点
- 支持动态输入创建链表
- 栈 / 队列【链式栈,数组栈】
- 支持单步、自动、**代码同步**演示
- 支持入栈、出栈 / 入队、出队
- 支持动态输入创建栈、队列
- 二叉树【普通二叉树、二叉排序树】
- 支持单步、自动、**代码同步**演示
- 支持二叉树的先序、中序、后序遍历
- 支持二叉搜索树的查找、插入、删除结点
**练习模式**:提供排序算法的练习测试功能,测试对于算法的掌握程度,在预设定的框架下进行随机出题,用户进行作答,系统判断正误,并演示题目所描述的算法过程。
**编程模式**:基于数组的用户自定义算法演示功能,设计了一种类似汇编指令的特殊编程方式,具有相应的规范,接收用户输入的指令序列,系统对指令序列逐句进行解释,对执行结果进行展示。语法参见 `软件使用帮助.CHM`
## 运行实例
### 主界面
### 演示模式
以排序算法为例展示界面
**示例**:设定数组长度、数据类型
**示例**:多算法对比
### 练习模式
### 编程模式
**示例**:将 0~9 依次赋值给数组
## 系统设计
### 算法演示引擎设计
BasicModel 是算法(数据结构同理)演示引擎接口,声明了算法演示功能所必须实现的三个方法和成员
- nodes:结点接口,具有子类 ArrayNode,LinkedNode 等
- Event:定义为一个算法演示动作(代码与动画演示状态之间的映射关系),例如,在排序算法中很常见的交换两个结点的操作,对应动画为两个结点相互移动到对方位置。
- eventQueue:算法(正向)演示队列
- eventStack:算法(逆向)演示队列
- `playForward()`:正向演示一步
- `playBackward()`:逆向演示一步
- `recordProce()`:生成算法演示步骤,赋值给 eventQueue
当用户选择一个算法开始演示时,系统内部会执行 recordProce方法,相当于模拟执行一遍算法,并将所有算法演示动作都存储在队列 eventQueue 中。
- 正向演示时,依次取出 eventQueue 队首的 event,判断具体的 event,执行相应的动画操作,同时将出队的 event 存入 eventStack 中;
- 逆向演示时,依次弹出 eventStack 栈顶的 event,并将 event 的参数相应“取反”,例如:MoveEvent 表示移动一个结点,正向演示时存储的移动方向是左,在逆向演示时,则应该向右移动。
### 编程演示引擎设计
编程演示引擎设计了一组类似汇编指令的特殊编程方式,实现了一个用于翻译指令的解释器,指令表如下:
| 名称 | 使用示例 | 含义 |
| ------------- | ------------------ | ---------------------- |
| int | int a 2 | 定义值为2的int变量 |
| move | move a b | 赋值语句,将b赋值给a |
| swap | swap arr[i] arr[j] | 交换数组的第i与j个元素 |
| if & else | if expression | 分支语句 |
| while & break | while expression | 循环语句 |
| inc | inc a | 自增语句,a = a+1 |
| dec | dec a | 自减语句,a = a-1 |
符合一般编程常识,例如:
- 索引从 0 开始
- 标识符不应该由数字开头
- ……
实现自动将用户输入的指令序列解释成动画演示状态,调用算法演示引擎提供的动画演示接口进行演示:
解释器模型如下,首先,对用户输入的指令序列进行解析;然后,对解析得到的 commandQueue 进行分析,得到一组动画演示动作 存入 eventQueue;最后,送入算法演示引擎部分的动画演示器进行演示。
错误判断则贯穿在解析输入(词法错误)和分析指令(语法错误)的整个执行过程。