大家好, 欢迎大家来到我数据结构代码仓。这个代码仓将不仅仅包含源代码,还将发布即将更新的相关内容[ ToDoList ]等等等等。使用Java语言实现.
大家可以下载、运行、测试、修改。如果你发现了任何bug,或者有意见或建议,欢迎和我联系:)
-
逐步完善
有任何问题欢迎在QAF进行交流。
XXXX, 代码仓: XXX
XXXX, 代码仓: XXX
XXXX, 代码仓: XXX
XXXX, 代码仓: XXX
XXXX, 代码仓: XXX
我的LeetCode题解代码仓:Play Leetcode
(注:以 Java 实现为主)
①代码整理
七 集合和映射 && 九 线段树 && 十三 红黑树 && 十四 哈希表
② 实现右侧跳转对应具体目录功能
③ 矫正完善
④ 我的 repo 都是感兴趣而学习实现的. 希望可以让更多人了解并享受到乐趣. "更多相关代码仓"内容丰富. 互相推荐
一 简介 | [无代码] |
---|---|
数据结构是简单的 / 明了的 / 有趣的 / 可无止境优化的. | [无代码] |
在定义基础上, 实现功能. 并逐步优化 / 针对具体题目可具体优化 | |
二 不要小瞧数组 cn.yydcyy.array | 章节Java源码 |
Demo : 使用Java中的数组 | Java |
实现 : 二次封装属于我们自己的数组 cn.yydcyy.array.Array | Java |
实现 : 向数组中添加元素 add(int , E) / addLast(E) / addFirst(E) | Java |
实现 : 数组中查询元素和修改元素 get(int) / getLast() / getFirst() | Java |
实现 : 包含,搜索和删除 find(E) / remove(int) / removeFirst() / removeLast() removeElement(E) | Java |
实现 :使用泛型 Array | Java |
实现 : 动态数组 resize(int) | Java |
实现 : 简单的复杂度分析 | [无代码] |
实现 : 均摊复杂度和防止复杂度的震荡 | Java |
三 栈和队列 cn.yydcyy.stack / cn.yydcyy.queue | 章节Java源码 |
栈和栈的应用:撤销操作和系统栈 | [无代码] |
实现 :栈的基本实现 interface Stack | Java |
栈的另一个应用:括号匹配 | Java |
关于Leetcode的更多说明 | Java |
实现 : 数组队列 ArrayQueue | Java |
实现 : 循环队列 interface Queue | Java |
实现 : 循环队列的实现 LoopQueue | Java |
实现 : 数组队列和循环队列的比较 cn.yydcyy.test.ArrayQueueVSLoopQueue | Java |
待实现 : 没有size成员变量的循环队列 | [整理中,敬请期待] |
四 最基础的动态数据结构:链表 cn.yydcyy.list | 章节Java源码 |
定义 : 什么是链表 LinkedList.Node | Java |
实现 : 在链表中添加元素 add(int / E) / addFirst(E) / addLast(E) | Java |
实现 : 使用链表的虚拟头结点 ListedList.dummyHead | Java |
实现 : 链表的遍历,查询和修改 contains(E) / set(int , E) / isEmpty() / | Java |
实现 : 从链表中删除元素 remove(int) / removeFirst() / removeLast() / removeElement(E) | Java |
实现 : 使用链表实现栈 list.LinkedListStack | Java |
实现 : 带有尾指针的链表:使用链表实现队列 list.LinkedListQueue | Java |
五 透过链表看递归 | 章节Java源码 |
查看 : Leetcode中和链表相关的问题 | Java |
测试 : 自己的Leetcode链表代码 | Java |
实现 : 递归基础与递归的宏观语意 cn.yydcyy.recursive.Sum 注解 | Java |
5-4 链表与递归 cn.yydcyy.recursive.ShowRecursive | Java |
递归运行的机制:递归的微观解读 cn.yydcyy.recursive.ShowRecursive.main | [无代码] |
动手 : 递归算法的调试 | Java |
补充 : 更多和链表相关的问题 | [无代码] |
待补充代码2 :单链表的递归实现 | [整理中,敬请期待] |
待补充代码2 : 斯坦福大学单链表的18个问题 | PDF [代码整理中,敬请期待] |
待补充代码2 :双链表 | [整理中,敬请期待] |
待补充代码2 :循环双链表 | [整理中,敬请期待] |
待补充代码2 :数组链表 | [整理中,敬请期待] |
六 二分搜索树 注 : cn 为基本数据结构, com 包下为算法中的数据结构实现. | 章节Java源码 |
探究 : 为什么要研究树结构 | [无代码] |
实现 :二分搜索树基础 com.yydcyy.bst.BSTBasic<K extends Comparable, V> | Java |
实现 :向二分搜索树中添加元素 insert(Key, Value) / insert(Node, Key, Value) | Java |
实现 :改进添加操作:深入理解递归终止条件 | Java |
实现 :二分搜索树的查询操作 search(Node, Key) | Java |
实现 :二分搜索树的前序遍历 BST2.preOrder() | Java |
实现 :二分搜索树的中序遍历和后序遍历 BST2.inOrder() / postOrder() | Java |
实现 :深入理解二分搜索树的前中后序遍历 | [无代码] |
实现 :二分搜索树前序遍历的非递归实现 | Java |
实现 :二分搜索树的层序遍历 BST2.levelOrder() | Java |
实现 :删除二分搜索树的最大元素和最小元素 BST2.minimun() / BST2.maximum() | Java |
实现 :删除二分搜索树的任意元素 BST2.remove(E) | Java |
了解: LeetCode 更多二分搜索树相关话题 | [无代码] |
补充代码1: 斯坦福大学Binary Tree相关问题 | PDF [代码整理中,敬请期待] |
补充代码2: 斯坦福大学Tree List相关问题 | PDF [代码整理中,敬请期待] |
补充代码3: 二叉树前中后序非递归遍历的经典实现 | Java |
补充代码4: 模拟系统栈前中后序遍历的非递归实现 | 玩转算法面试,第六章2,3小节 |
补充代码5: 二叉树Morris遍历前中后序实现 | Java |
补充代码6: 二分搜索树其他方法的非递归实现 | [整理中,敬请期待] |
补充代码7: 前驱和后继操作 | [整理中,敬请期待] |
补充代码8: floor和ceil操作 | [整理中,敬请期待] |
补充代码9: 节点内维护size的二分搜索树 | [整理中,敬请期待] |
补充代码10: rank和select操作 | [整理中,敬请期待] |
补充代码11: 节点内维护depth的二分搜索树 | [整理中,敬请期待] |
补充代码12: 节点内维护count的二分搜索树 (支持重复元素的二分搜索树) |
[整理中,敬请期待] |
补充代码13: 有重复元素节点的二分搜索树 (另一种支持重复元素的二分搜索树实现) |
[整理中,敬请期待] |
七 集合和映射 | 章节Java源码 |
集合基础和基于二分搜索树的集合实现 | Java |
基于链表的集合实现 | Java |
集合类的复杂度分析 | Java |
Leetcode中的集合问题和更多集合相关问题 | Java |
映射基础 | Java |
基于链表的映射实现 | Java |
基于二分搜索树的映射实现 | Java |
映射的复杂度分析和更多映射相关问题 | Java |
Leetcode上更多集合和映射的问题 | Java |
补充代码1: 更完整的基于二分搜索树的有序集合 | [整理中,敬请期待] |
补充代码2: 不同底层实现的有序集合对比 | [整理中,敬请期待] |
补充代码3: 更完整的基于二分搜索树的有序映射 | [整理中,敬请期待] |
补充代码4: 不同底层实现的有序映射对比 | [整理中,敬请期待] |
补充代码5: 多重集合 | [整理中,敬请期待] |
补充代码6: 多重映射 | [整理中,敬请期待] |
补充代码7: 基于映射实现的集合 | [整理中,敬请期待] |
八 堆和优先队列 | 章节Java源码 |
定义 : 什么是优先队列 | [无代码] |
实现 :堆的基础表示 com.yydcyy.heap.HeapSort | Java |
实现 :向堆中添加元素和Sift Up com.yydcyy.heap.MaxHeap_ShiftDown.shiftUp | Java |
实现 :从堆中取出元素和Sift Down com.yydcyy.heap.MaxHeap_ShiftDown.shiftDown | Java |
实现 :Heapify 和 Replace | [整理中,敬请期待] |
基于堆的优先队列 | Java |
Leetcode上优先队列相关问题 | Java |
Java中的PriorityQueue | Java |
待实现 :和堆相关的更多话题和广义队列 | [无代码] |
补充代码1: 普通线性结构和顺序线性结构实现的优先队列 | [整理中,敬请期待] |
补充代码2: 最小堆 | [整理中,敬请期待] |
补充代码3: 堆排序 com.yydcyy.heap.HeapSort | [整理中,敬请期待] |
补充代码4: 索引堆 com.yydcyy.heap.IndexMaxHeap | [整理中,敬请期待] |
补充代码5: 双向优先队列 | [整理中,敬请期待] |
补充代码6: 多叉堆 | [整理中,敬请期待] |
补充代码7: 二项堆 | [整理中,敬请期待] |
补充代码8: 斐波那契堆 | [整理中,敬请期待] |
补充代码9: 基于事件堆的粒子检测碰撞 | [整理中,敬请期待] |
九 线段树 | 章节Java源码 |
什么是线段树 | [无代码] |
线段树基础表示 | |
创建线段树 | Java |
线段树中的区间查询 | Java |
Leetcode上线段树相关的问题 | Java |
线段树中的更新操作 | Java |
更多线段树相关的话题 | [无代码] |
补充代码1: 使用节点表示的线段树 | [整理中,敬请期待] |
补充代码2: 链式存储的线段树 | [整理中,敬请期待] |
补充代码3: 动态线段树 | [整理中,敬请期待] |
补充代码4: 线段树的懒惰传播 | [整理中,敬请期待] |
补充代码5: 二维线段树 | [整理中,敬请期待] |
补充代码6: 树状数组(Binary Index Tree) | [整理中,敬请期待] |
补充代码7: RMQ问题 | [整理中,敬请期待] |
十 Trie | 章节Java源码 |
什么是Trie字典树 | [无代码] |
Trie字典树基础 | Java |
Trie字典树的查询 | Java |
Trie字典树的前缀查询 | Java |
Trie字典树和简单的模式匹配 | Java |
Trie字典树和字符串映射 | Java |
更多和Trie字典树相关的话题 | [无代码] |
补充代码1: 使用HashMap或者Array的Trie | Java |
补充代码2: TrieSet和TrieMap | [整理中,敬请期待] |
补充代码3: Trie的递归实现 | [整理中,敬请期待] |
补充代码4: 使用Trie删除元素与 | [整理中,敬请期待] |
补充代码5: 压缩字典树 | [整理中,敬请期待] |
补充代码6: 三分搜索Trie (Ternary Search Trie) | [整理中,敬请期待] |
补充代码7: 子串查询算法 | [整理中,敬请期待] |
补充代码8: 文件压缩算法 | [整理中,敬请期待] |
补充代码9: 模式匹配算法 | [整理中,敬请期待] |
十一 并查集 | 章节Java源码 |
定义 : 什么是并查集 com.yydcyy.unionfind.UF | Java |
实现 : Quick Find com.yydcyy.unionfind.UnionFind1#find | Java |
实现 : Quick Union com.yydcyy.unionfind.UnionFind2#unionElements | Java |
实现 :基于size的优化 com.yydcyy.unionfind.UnionFind3 详情见注解 | Java |
实现 :基于rank的优化 com.yydcyy.unionfind.UnionFind4 详情见注解 | Java |
实现 : 路径压缩 com.yydcyy.unionfind.UnionFind5 详情见注解 | Java |
了解 : 更多和并查集相关的话题 | Java |
十二 平衡树和AVL | 章节Java源码 |
实现 :平衡树和AVL com.yydcyy.avl.AVLTree 详情见注解 | [无代码] |
实现 :计算节点的高度和平衡因子 AVLTree #getHeight() #getBalanceFactor() | Java |
实现 :检查二分搜索树性质和平衡性 具体对应 #add() 方法实现,详情见注解 | Java |
实现 :旋转操作的基本原理 详情见注解 | Java |
实现 :左旋转和右旋转的实现 #RightRotate #LeftRotate | Java |
实现 : LR 和 RL | Java |
实现 :从AVL树中删除元素 # removeMin | Java |
实现 :基于AVL树的集合和映射 | [完成啦,整理中,敬请期待] |
补充代码1: AVL树的优化 | [整理中,敬请期待] |
十三 红黑树 | 章节Java源码 |
红黑树与2-3树 | [无代码] |
2-3树的绝对平衡性 | [无代码] |
红黑树与2-3树的等价性 | Java |
红黑树的基本性质和复杂度分析 | [无代码] |
保持根节点为黑色和左旋转 | Java |
颜色翻转和右旋转 | Java |
红黑树中添加新元素 | Java |
红黑树的性能测试 | Java |
更多红黑树相关的话题 | [无代码] |
补充代码1: 红黑树中的删除最大元素 | [整理中,敬请期待] |
补充代码2: 红黑树中的删除最小元素 | [整理中,敬请期待] |
补充代码3: 红黑树中的删除任意元素 | [整理中,敬请期待] |
补充代码4: 基于红黑树的集合和映射 | [整理中,敬请期待] |
补充代码5: 右倾红黑树 | [整理中,敬请期待] |
补充代码6: 《算法导论》中红黑树的实现 | [整理中,敬请期待] |
补充代码7: 2-3 树的实现 | [整理中,敬请期待] |
补充代码8: 伸展树 Splay Tree | [整理中,敬请期待] |
十四 哈希表 | 章节Java源码 |
了解 : 哈希表基础 | Java |
了解 : 哈希函数 | [无代码] |
了解 : Java中的hashCode方法 | Java |
了解 : 链地址法 Seperate Chaining | [无代码] |
实现 : 实现哈希表 | Java |
分析 : 哈希表的动态空间处理与复杂度分析 | Java |
实现 : 哈希表更复杂的动态空间处理方法 | Java |
了解 : 更多哈希冲突的处理方法 | [无代码] |
笔记 : 基于哈希表的映射和集合 | [整理中,敬请期待] |
笔记 : 开放地址法解决哈希冲突 | [整理中,敬请期待] |
十五 小结 | [无代码] |
更多数据结构逐渐完善, 多加练习熟练使用, 能力有限, 若有错误多多指教, 感谢. 欢迎观看其他仓库及笔记. | [无代码] |
| 十六 待完成章节:B类树 | [更新中,敬请期待] | | | |
正在更新中,敬请期待:)
个人网站博客:@yydcyy
GitHub 代码仓库:@yydcyy
电子邮件:yydcyy@qq.com
大家加油!:)**