Coder Social home page Coder Social logo

play-with-data-structures's Introduction

Play-with-Data-Structures

简介

本仓库基于 go 语言实现常用的数据结构。

感谢 liuyubobobo 老师在慕课网上推出的实战课程《玩儿转数据结构》,Java 版本的 Github 仓库地址请访问: https://github.com/liuyubobobo/Play-with-Data-Structures

使用篇

仓库使用 go modules 特性,所以 go 版本要在 1.11 之上。

安装

git clone https://github.com/donng/Play-with-Data-Structures.git

运行

如果你使用的是 Goland,只需要点击 main.go 中的运行按钮即可。如果在命令行下,部分代码需要在根目录下才能执行,原因是将 txt 文件统一放在了根目录下而不是每部分的章节中

go run 02-Arrays/09-Amortized-Time-Complexity/main.go

源码目录

第二章 不要小瞧数组 章节Go源码
2-1 使用Go中的数组 Go
2-2 二次封装属于我们自己的数组 Go
2-3 向数组中添加元素 Go
2-4 数组中查询元素和修改元素 Go
2-5 包含,搜索和删除 Go
2-6 使用泛型 Go
2-7 动态数组 Go
2-8 简单的复杂度分析 [无代码]
2-9 均摊复杂度和防止复杂度的震荡 Go
第三章 栈和队列 章节Go源码
3-1 栈和栈的应用:撤销操作和系统栈 [无代码]
3-2 栈的基本实现 Go
3-3 栈的另一个应用:括号匹配 Go
3-4 关于Leetcode的更多说明 Go
3-5 数组队列 Go
3-6 循环队列 Go
3-7 循环队列的实现 Go
3-8 数组队列和循环队列的比较 Go
补充代码1: 不浪费一个空间的循环队列 Go
补充代码2: 没有size成员变量的循环队列 Go
第四章 最基础的动态数据结构:链表 章节Go源码
4-1 什么是链表 Go
4-2 在链表中添加元素 Go
4-3 使用链表的虚拟头结点 Go
4-4 链表的遍历,查询和修改 Go
4-5 从链表中删除元素 Go
4-6 使用链表实现栈 Go
4-7 带有尾指针的链表:使用链表实现队列 Go
第五章 透过链表看递归 章节Go源码
5-1 Leetcode中和链表相关的问题 Go
5-2 测试自己的Leetcode链表代码 Go
5-3 递归基础与递归的宏观语意 Go
5-4 链表与递归 Go
5-5 递归运行的机制:递归的微观解读 [无代码]
5-6 递归算法的调试 Go
5-7 更多和链表相关的问题 [无代码]
补充代码1: 单链表的递归实现 Go
补充代码2: 斯坦福大学单链表的18个问题 PDF参见慕课网上讲师源代码
补充代码3: 双链表 [整理中,敬请期待]
补充代码4: 循环双链表 [整理中,敬请期待]
补充代码5: 数组链表 [整理中,敬请期待]
第六章 二分搜索树 章节Go源码
6-1 为什么要研究树结构 [无代码]
6-2 二分搜索树基础 Go
6-3 向二分搜索树中添加元素 Go
6-4 改进添加操作:深入理解递归终止条件 Go
6-5 二分搜索树的查询操作 Go
6-6 二分搜索树的前序遍历 Go
6-7 二分搜索树的中序遍历和后序遍历 Go
6-8 深入理解二分搜索树的前中后序遍历 [无代码]
6-9 二分搜索树前序遍历的非递归实现 Go
6-10 二分搜索树的层序遍历 Go
6-11 删除二分搜索树的最大元素和最小元素 Go
6-12 删除二分搜索树的任意元素 Go
6-13 更多二分搜索树相关话题 [无代码]
补充代码1: 斯坦福大学Binary Tree相关问题 PDF参见慕课网上讲师源代码
补充代码2: 斯坦福大学Tree List相关问题 PDF参见慕课网上讲师源代码
补充代码3: 二叉树前中后序非递归遍历的经典实现 [整理中,敬请期待]
补充代码4: 模拟系统栈前中后序遍历的非递归实现 玩转算法面试,第六章2,3小节
补充代码5: 二叉树Morris遍历前中后序实现 [整理中,敬请期待]
补充代码6: 二分搜索树其他方法的非递归实现 [整理中,敬请期待]
补充代码7: 前驱和后继操作 [整理中,敬请期待]
补充代码8: floor和ceil操作 [整理中,敬请期待]
补充代码9: 节点内维护size的二分搜索树 [整理中,敬请期待]
补充代码10: rank和select操作 [整理中,敬请期待]
补充代码11: 节点内维护depth的二分搜索树 [整理中,敬请期待]
补充代码12: 节点内维护count的二分搜索树
(支持重复元素的二分搜索树)
[整理中,敬请期待]
补充代码13: 有重复元素节点的二分搜索树
(另一种支持重复元素的二分搜索树实现)
[整理中,敬请期待]
第七章 集合和映射 章节Go源码
7-1 集合基础和基于二分搜索树的集合实现 Go
7-2 基于链表的集合实现 Go
7-3 集合类的复杂度分析 Go
7-4 Leetcode中的集合问题和更多集合相关问题 Go
7-5 映射基础 Go
7-6 基于链表的映射实现 Go
7-7 基于二分搜索树的映射实现 Go
7-8 映射的复杂度分析和更多映射相关问题 Go
7-9 Leetcode上更多集合和映射的问题 Go
补充代码1: 更完整的基于二分搜索树的有序集合 [整理中,敬请期待]
补充代码2: 不同底层实现的有序集合对比 [整理中,敬请期待]
补充代码3: 更完整的基于二分搜索树的有序映射 [整理中,敬请期待]
补充代码4: 不同底层实现的有序映射对比 [整理中,敬请期待]
补充代码5: 多重集合 [整理中,敬请期待]
补充代码6: 多重映射 [整理中,敬请期待]
补充代码7: 基于映射实现的集合 [整理中,敬请期待]
第八章 堆和优先队列 章节Go源码
8-1 什么是优先队列 [无代码]
8-2 堆的基础表示 Go
8-3 向堆中添加元素和Sift Up Go
8-4 从堆中取出元素和Sift Down Go
8-5 Heapify 和 Replace Go
8-6 基于堆的优先队列 Go
8-7 Leetcode上优先队列相关问题 Go
8-8 Go中的PriorityQueue [整理中,敬请期待]
8-9 和堆相关的更多话题和广义队列 [无代码]
补充代码1: 普通线性结构和顺序线性结构实现的优先队列 [整理中,敬请期待]
补充代码2: 最小堆 [整理中,敬请期待]
补充代码3: 堆排序 [整理中,敬请期待]
补充代码4: 索引堆 [整理中,敬请期待]
补充代码5: 双向优先队列 [整理中,敬请期待]
补充代码6: 多叉堆 [整理中,敬请期待]
补充代码7: 二项堆 [整理中,敬请期待]
补充代码8: 斐波那契堆 [整理中,敬请期待]
补充代码9: 基于事件堆的粒子检测碰撞 [整理中,敬请期待]
第九章 线段树 章节Go源码
9-1 什么是线段树 [无代码]
9-2 线段树基础表示 Go
9-3 创建线段树 Go
9-4 线段树中的区间查询 Go
9-5 Leetcode上线段树相关的问题 Go
9-6 线段树中的更新操作 Go
9-7 更多线段树相关的话题 [无代码]
补充代码1: 使用节点表示的线段树 [整理中,敬请期待]
补充代码2: 链式存储的线段树 [整理中,敬请期待]
补充代码3: 动态线段树 [整理中,敬请期待]
补充代码4: 线段树的懒惰传播 [整理中,敬请期待]
补充代码5: 二维线段树 [整理中,敬请期待]
补充代码6: 树状数组(Binary Index Tree) [整理中,敬请期待]
补充代码7: RMQ问题 [整理中,敬请期待]
第十章 Trie 章节Go源码
10-1 什么是Trie字典树 [无代码]
10-2 Trie字典树基础 Go
10-3 Trie字典树的查询 Go
10-4 Trie字典树的前缀查询 Go
10-5 Trie字典树和简单的模式匹配 Go
10-6 Trie字典树和字符串映射 Go
10-7 更多和Trie字典树相关的话题 [无代码]
10-8 [文字补充] 基于哈希表或者数组的Trie Go
补充代码1: Trie的递归实现 [整理中,敬请期待]
补充代码2: 使用Trie删除元素 [整理中,敬请期待]
补充代码3: TrieSet和TrieMap [整理中,敬请期待]
补充代码4: 压缩字典树 [整理中,敬请期待]
补充代码5: 三分搜索Trie (Ternary Search Trie) [整理中,敬请期待]
补充代码6: 子串查询算法 [整理中,敬请期待]
补充代码7: 文件压缩算法 [整理中,敬请期待]
补充代码8: 模式匹配算法 [整理中,敬请期待]
第十一章 并查集 章节Go源码
11-1 什么是并查集 Go
11-2 Quick Find Go
11-3 Quick Union Go
11-4 基于size的优化 Go
11-5 基于rank的优化 Go
11-6 路径压缩 Go
11-7 更多和并查集相关的话题 Go
第十二章 平衡树和AVL 章节Go源码
12-1 平衡树和AVL [无代码]
12-2 计算节点的高度和平衡因子 Go
12-3 检查二分搜索树性质和平衡性 Go
12-4 旋转操作的基本原理 Go
12-5 左旋转和右旋转的实现 Go
12-6 LR 和 RL Go
12-7 从AVL树中删除元素 Go
12-8 基于AVL树的集合和映射 Go
补充代码1: AVL树的优化 [整理中,敬请期待]
第十三章 红黑树 章节Go源码
13-1 红黑树与2-3树 [无代码]
13-2 2-3树的绝对平衡性 [无代码]
13-3 红黑树与2-3树的等价性 Go
13-4 红黑树的基本性质和复杂度分析 [无代码]
13-5 保持根节点为黑色和左旋转 Go
13-6 颜色翻转和右旋转 Go
13-7 红黑树中添加新元素 Go
13-8 红黑树的性能测试 Go
13-9 更多红黑树相关的话题 [无代码]
13-10 [文字补充] 红黑树任何不平衡都可以在三次旋转内解决? [无代码]
补充代码1: 红黑树中的删除最大元素 [整理中,敬请期待]
补充代码2: 红黑树中的删除最小元素 [整理中,敬请期待]
补充代码3: 红黑树中的删除任意元素 [整理中,敬请期待]
补充代码4: 基于红黑树的集合和映射 [整理中,敬请期待]
补充代码5: 右倾红黑树 [整理中,敬请期待]
补充代码6: 《算法导论》中红黑树的实现 [整理中,敬请期待]
补充代码7: 2-3 树的实现 [整理中,敬请期待]
补充代码8: 伸展树 Splay Tree [整理中,敬请期待]
第十四章 哈希表 章节Go源码
14-1 哈希表基础 Go
14-2 哈希函数 [无代码]
14-3 Go中的hashCode方法 Go
14-4 链地址法 Seperate Chaining [无代码]
14-5 实现属于我们自己的哈希表 Go
14-6 哈希表的动态空间处理与复杂度分析 Go
14-7 哈希表更复杂的动态空间处理方法 Go

play-with-data-structures's People

Contributors

donng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

play-with-data-structures's Issues

关于array

您好,关于array,slice 底层就是封装 array size 和 capacity,其支持任何类型和自动扩容,有了部分功能,还有 Interfaces.Compare 是go的新特性还是什么,我是用对象写个 compare 方法,望解疑

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.