
数据结构
hestyle
戎码一生!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构之堆(我猜,关于堆的这些维护细节,你肯定不清楚,不信你来看!)
在前面分析了二叉搜索树、红黑树等众多树结构,今天博主给大家换个口味,深入分析一下堆的实现原理与维护规则。(堆其实与二叉树有点相似)数据结构之堆原理分析目录一、`堆`的概述1、什么是`堆`2、`堆`的划分3、`堆`的作用二、`堆`的底层实现三、`堆`的调整四、总结一、堆的概述1、什么是堆 堆,在日常生活中是一个量词,比如:一堆木头,下面这张图就是一堆木头,大家注意它的摆放规则,成金字塔...原创 2020-04-26 22:12:52 · 1423 阅读 · 1 评论 -
数据结构之红黑树(还在为看不懂红黑树而烦恼吗?别再翻了,此篇足矣~)
红黑树,非常经典的数据结构,主要用于一些容器中,比如C++语言中的map、Java语言中的TreeMap(后面会写源码分析博客)。红黑树能保持高效的查找,一般取时间复杂度为O(log2n),由于高效,这个结构也比较复杂,所以很多人(包括我自己)都一直搞不懂红黑树到底是怎么插入、删除节点的。此篇博客,博主将图文并茂的一层一层揭开红黑树神秘面纱。 温馨提示:\color{red}温馨提示:温馨...原创 2020-04-18 17:31:23 · 1557 阅读 · 0 评论 -
数据结构之二叉搜索树详解(附C++代码实现查找、插入、删除操作)
最近在分析分析红黑树时,感觉上来就挑最难的树结构之一进行分析,难度太大,所以特意写这篇二叉搜索树分析的博客作为铺垫。那么为啥挑二叉搜索树进行分析捏?其实红黑树也是一种更为复杂的二叉搜索树,建议阅读一下我的另外一篇博客 数据结构之二叉树、AVL树、红黑树、Trie树、B树、B+树、B*树浅析 。为了帮助大家理解红黑树,先写这篇博客分析二叉搜索树。下面将主要分析二叉搜索树的查找、插入、删除三种操作...原创 2020-04-18 11:21:27 · 1774 阅读 · 2 评论 -
数据结构之二叉树、AVL树、红黑树、Trie树、B树、B+树、B*树浅析
树,作为五大经典数据结构之一,有许多运用场景,比如MySQL数据库的B+树(数据结构的重要性不用强调了吧)。下面将对二叉树、红黑树、B树、B+树等树结构进行一些概念区分与总结,此篇博客适合新手、有一定数据结构基础的小伙伴。一、树的划分 根据子节点的个数可以划分成N叉树(一般N ≥ 2),N叉树拥有的特征是每个节点至多有N个子节点。比如,N = 2时,称为二叉树,每个节点至多只有2个节点...原创 2020-04-07 09:34:30 · 1338 阅读 · 4 评论 -
LeetCode 最大频率栈(hash表+stack、优先队列)
实现 FreqStack,模拟类似栈的数据结构的操作的一个类。FreqStack 有两个函数:push(int x),将整数 x 推入栈中。pop(),它移除并返回栈中出现最频繁的元素。如果最频繁的元素不只一个,则移除并返回最接近栈顶的元素。示例:输入:["FreqStack","push","push","push","push","push","push","pop","pop...原创 2019-06-16 15:07:55 · 943 阅读 · 0 评论 -
LeetCode 设计哈希映射
不使用任何内建的哈希表库设计一个哈希映射具体地说,你的设计应该包含以下的功能put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。remove(key):如果映射中存在这个键,删除这个数值对。示例:MyHashMap hashMap = new MyHashM...原创 2019-04-26 14:31:51 · 648 阅读 · 0 评论 -
LeetCode 设计哈希集合
不使用任何内建的哈希表库设计一个哈希集合具体地说,你的设计应该包含以下的功能add(value):向哈希集合中插入一个值。contains(value) :返回哈希集合中是否存在这个值。remove(value):将给定值从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。示例:MyHashSet hashSet = new MyHashSet();hashSet.add(1)...原创 2019-04-26 11:55:39 · 1254 阅读 · 0 评论 -
LeetCode 键值映射(前缀树)
实现一个 MapSum 类里的两个方法,insert 和 sum。对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。示例 1:输入: insert("apple", 3), 输出: Null输入: sum("...原创 2019-04-20 18:51:17 · 1026 阅读 · 0 评论 -
LeetCode 实现一个魔法字典(前缀树)
实现一个带有buildDict, 以及 search方法的魔法字典。对于buildDict方法,你将被给定一串不重复的单词来构建一个字典。对于search方法,你将被给定一个单词,并且判定能否只将这个单词中一个字母换成另一个字母,使得所形成的新单词存在于你构建的字典中。示例 1:Input: buildDict(["hello", "leetcode"]), Output: NullIn...原创 2019-04-20 18:03:41 · 793 阅读 · 0 评论 -
LeetCode 设计循环队列
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircula...原创 2019-04-16 08:52:58 · 948 阅读 · 0 评论 -
LeetCode LRU缓存机制(双向链表、哈希表)
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数...原创 2019-02-24 09:59:23 · 1038 阅读 · 0 评论 -
缓存机制 LRU 和 LFU
LRU 是least recently used的缩写,即最近最久未使用。在缓存数据量溢出时,必须淘汰某一项记录才能插入新的记录,而LRU算法则选择淘汰上一次使用时间距离现在最久的那条记录。数据结构的设计1、链表list用于保存value,并且从头到尾的顺序达标它最近使用时间(越靠前代表使用越近)2、哈希表记录key对应的value在链表的位置。具体实现过程:get: 如果哈希表中存...原创 2019-03-30 11:42:24 · 915 阅读 · 0 评论 -
LeetCode LFU缓存(hash表)
LRU 是least recently used的缩写,即最近最久未使用。在缓存数据量溢出时,必须淘汰某一项记录才能插入新的记录,而LRU算法则选择淘汰上一次使用时间距离现在最久的那条记录。数据结构的设计1、链表list用于保存value,并且从头到尾的顺序达标它最近使用时间(越靠前代表使用越近)2、哈希表记录key对应的value在链表的位置。具体实现过程:get: 如果哈希表中存...原创 2019-03-30 11:18:15 · 660 阅读 · 0 评论