| 数据结构 | 类 |
|---|---|
| 栈 | MyStack.java |
| 队列 | MyQueue.java |
| 单链表 | Node.java |
| 循环链表 | LoopNode.java |
| 双向链表 | DoubleNode.java |
| 排序方法 | 类 |
|---|---|
| 冒泡排序 | BubbleSort.java |
| 快速排序 | QuickSort.java |
| 插入排序 | InsertSort.java |
| 希尔排序 | ShellSort.java |
| 选择排序 | SelectSort.java |
| 归并排序 | MergeSort.java |
| 基数排序 | RadixSort.java |
| 堆排序 | HeapSort.java |
类BinaryTree.java
结点类TreeNode.java
| 链式二叉树的操作 | 方法 |
|---|---|
| 前序遍历 | frontShow() |
| 中序遍历 | midShow() |
| 后序遍历 | afterShow() |
| 前序查找 | frontSearch(i) |
| 删除子树 | delete(i) |
只适用于完全二叉树
类ArrayBinaryTree.java
应用:堆排序
| 顺序存储二叉树的操作 | 方法 |
|---|---|
| 前序遍历 | frontShow(i) |
遍历高效
类ThreadedBinaryTree.java
结点类ThreadedNode.java
| 线索二叉树的操作 | 方法 |
|---|---|
| 中序线索化 | threadNodes(node) |
| 中序遍历 | mi'dShow() |
带权路径最小,可用于压缩编码。
类HuffmanTree.java
有序的顺序存储查找方便,插入困难;
无序的顺序存储查找困难,插入简单;
链式存储插入和查找都困难;
二叉排序树插入和查找性能都不会太差。
类BinarySortTree.java
结点类Node.java
| 二叉排序树的操作 | 方法 |
|---|---|
| 插入结点 | add(node) |
| 查找结点 | search(value) |
| 删除结点 | delete(value) |
二叉排序树如果不平衡效率低下,AVL保证任何一个结点的左右子树高度差不超过1。
操作:在BST树插入结点平衡破坏时对结点进行旋转

| AVL树的操作 | 方法 |
|---|---|
| 结点的平衡因子 | BF() |
| 添加结点 | add(node) |
| 左旋转 | leftRotate() |
| 右旋转 | rightRotate() |
具体见 算法第四版 的2-3树和左倾红黑树。
自己编的小口决:左黑右红即左旋,红左连续即右旋,左右全红变全黑,根节点总为黑。
通过计算键值对中健的散列函数得到索引,通过索引值来进行查找和插入删除。
散列表的关键在于处理碰撞冲突,因而可以分为两种实现:基于拉链法和基于开发地址的散列表。
类NodeHashST.java
链表符号表NodeST
| 操作 | 方法 |
|---|---|
| 计算键的散列函数 | hash(key) |
| 获取健的值 | get(key) |
| 插入新的键值对 | put(key,value) |
线性探测要求探测表的利用率要小于1/2,所以需要动态调整容量。
类LinearHashST.java
| 操作 | 方法 |
|---|---|
| 调整容量 | resize(cap) |
| 计算键的散列函数 | hash(key) |
| 插入新的键值对 | put(key,value) |
| 获取键的值 | get(key) |
| 删除 | delete(key) |