算法与数据结构
文章平均质量分 95
常用数据结构实现:数组、栈、队列、链表、二分搜索树、集合和映射、堆和优先队列、线段树、字段树Trie、并查集、平衡二叉树AVL、2-3树和红黑树
chentian114
这个作者很懒,什么都没留下…
展开
-
数据结构之2-3树和红黑树剖析
数据结构之2-3树和红黑树剖析文章目录数据结构之2-3树和红黑树剖析概述2-3树2-3树与红黑树的等价性红黑树红黑树添加新元素实现相关链接公众号参考概述红黑树(英语:Red–black tree)是一种自平衡二叉查找树,它在1972年由鲁道夫·贝尔发明,被称为"对称二叉B树",它现代的名字源于Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文。红黑树和AVL树一样都对插入时间、删除时间和查找时间提供了最好可能的最坏情况担保。《算法导论》中的红黑树:1.每个节点原创 2021-03-27 15:03:15 · 290 阅读 · 0 评论 -
数据结构之平衡二叉树剖析
数据结构之平衡二叉树剖析文章目录数据结构之平衡二叉树剖析概述原理时间复杂度分析实现实现平衡二叉树使用平衡二叉树实现映射和集合Leetcode 349.Intersection of Two Arrays 两个数组的交集Leetcode 350.Intersection of Two Arrays II 两个数组的交集相关链接公众号参考概述普通的二叉搜索树有可能因为数据样本的情况,退化成一个链表,使得二叉查找树的性能下降,于是便有了相应的自平衡二叉查找树来解决二叉查找树因为数据样本情况退化成一个链表原创 2021-03-18 14:48:09 · 198 阅读 · 0 评论 -
数据结构之并查集 Union Find 剖析
数据结构之并查集 Union Find 剖析文章目录数据结构之并查集 Union Find 剖析概述原理时间复杂度分析实现实现Quick Find并查集实现Quick Union并查集考虑size优化并查集基于rank优化并查集路径压缩优化并查集Leetcode 547. Friend Circles相关链接公众号参考概述并查集(英文:Disjoint-set data structure,直译为不交集数据结构):是一种数据结构,用于处理一些不交集(Disjoint sets,一系列没有重复元素原创 2021-03-15 17:28:06 · 450 阅读 · 0 评论 -
数据结构之字典树Trie剖析
本文主要介绍了字典树及其常见应用场景,重点讲解了其实现原理和时间复杂度分析,并结合具体的案例进行实践。原创 2021-03-15 06:09:04 · 211 阅读 · 0 评论 -
数据结构之线段树剖析
数据结构之线段树剖析文章目录数据结构之线段树剖析为什么要使用线段树概述原理时间复杂度分析实现使用数组实现线段树使用二叉树实现线段树线段树区间修改使用Lazy优化Leetcode 303. Range Sum Query - Immutable 区域和检索 - 数组不可变Leetcode 307. Range Sum Query - Mutable相关链接公众号参考为什么要使用线段树对于有一类问题,我们关心的是线段(或者区间):最经典的线段树问题:区间染色:描述:有一面墙,长度为n,每次选择一原创 2021-03-15 06:05:11 · 370 阅读 · 0 评论 -
数据结构之堆和优先队列剖析
数据结构之堆和优先队列剖析文章目录数据结构之堆和优先队列剖析概述原理时间复杂度分析堆相关的更多话题:实现基于数组实现最大堆基于数组实现最小堆使用堆实现优先队列LeetCode 347. Top K Frequent Elements 前K个高频元素牛客网-CD80-随时找到数据流的中位数相关链接公众号参考概述在计算机的世界里,很多的应用场景只需要取得当前数据集中最大或者最小的元素,而对于数据集中其它数据,并不需要他们一定是有序的。那么,我们如何高效快速地取得当前数据集中最大或者最小的元素呢?此时,新原创 2021-03-08 11:18:50 · 417 阅读 · 1 评论 -
数据结构之二叉搜索树剖析
讲述了 树 这种动态数据结构主要用来存储具有树状结构性质的数据集合,数据集合使用树结构存储后,使用起来出奇的高效;简述了二叉树以及二叉搜索树,详细剖析了二叉搜索树常用方法的核心原理及前序、中序、后序遍历的递归实现和非递归实现;时间复杂度分析;用二叉搜索树实现集合和映射这两种数据结构;最后是 Leetcode 上的相关的实践练习。原创 2021-03-05 22:07:16 · 347 阅读 · 0 评论 -
数据结构之链表剖析
数据结构之链表剖析文章目录数据结构之链表剖析概述原理单链表时间复杂度分析数组 VS 链表更多链表问题实践相关链接公众号参考概述链表是一种线性数据结构,其中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素中的引用字段链接在一起。链表有两种类型:单链表和双链表单链表双链表线性数据结构中动态数组、栈(数组实现)、队列(数组实现),底层依托静态数组,靠resize()解决固定容量问题;链表是真正的动态数据结构;原理//链表中数据存储节点(Node) 结构//单链表clas原创 2021-02-23 13:42:06 · 103 阅读 · 0 评论 -
数据结构之栈和队列剖析
数据结构之栈和队列剖析文章目录数据结构之栈和队列剖析概述栈原理时间复杂度分析队列原理时间复杂度分析实践Leetcode 20. Valid Parentheses 匹配括号Leetcode 102. Binary Tree Level Order Traversal 二叉树层序遍历牛客网-在线编程-程序员代码面试指南-CD5-设计getMin功能的栈牛客网-在线编程-程序员代码面试指南-CD100-猫狗队列如何仅用队列结构实现栈结构如何仅用栈结构实现队列结构相关链接公众号参考概述在 数组 中,可以通过原创 2021-02-21 11:07:42 · 143 阅读 · 0 评论 -
数据结构之数组及动态数组剖析
数组github地址把元素码成一排进行存放,利用索引访问。数组最大的优点:快速查询,利用索引查询,时间复杂度为:O(1);时间复杂度分析原理编写自己的数组类时间复杂度分析常见算法时间复杂度有O(1),O(n),O(logn),O(nlogn),O(n^2)大O描述的是算法的运行时间和输入数据之间的关系。忽略常数、不要低价项,只要高阶项;再根据具体数据样本分析;动态数组的时间复杂度添加操作 O(n)addLast(e) O(1)addFirst(e) O(n)add(i原创 2020-05-12 07:08:10 · 800 阅读 · 0 评论 -
栈和队列实现原理及实践
栈和队列实现原理及实践在 数组 中,可以通过索引访问 随机 元素。 但是,某些情况下,可能需要限制处理的顺序。栈:是一个 后入先出(LIFO)数据结构。通常,插入操作在栈中被称作入栈 push ,总是在堆栈的末尾添加一个新元素。删除操作,退栈 pop ,将始终删除最后一个元素。队列:是一个 先入先出(FIFO) 的数据结构。插入(insert)操作也称作入队(enqueue),新元素始终被添加在队列的末尾。 删除(delete)操作也被称为出队(dequeue),只能移除第一个元素。栈栈是一种原创 2020-10-26 15:05:22 · 3080 阅读 · 0 评论 -
队列的实现原理与分析
队列github地址队列是一种线性结构相比数组,队列对应的操作是数组的子集只能从一端(队尾)添加元素,只能从另一端(队首)取出元素;队列是一种先进先出的数据结构,First In First Out(FIFO)应用操作系统中执行任务的排队等;时间复杂度分析ArrayQueue 数组队列void enqueue(E) 往队尾添加元素 O(1) 均摊E dequeue() 取出队首元素 O(n)E getFront() 获取队首元素 O(1)int getSiz原创 2020-05-16 07:39:36 · 965 阅读 · 0 评论 -
栈的实现原理与分析
栈github地址栈也是一种线性结构相比数组,栈对应的操作是数组的子集只能从一端添加元素,也只能从一端取出元素,这一端称为栈顶栈是一种后进先出的数据结构 LIST IN FIRST OUT(LIFO)在计算机的世界里,栈拥有着不可思议的作用应用无处不在的Undo操作(撤销)程序调用使用的系统栈括号匹配-编译器时间复杂度分析ArrayStackvoid push(E) 入栈 O(1) 均摊E pop() 出栈 O(1) 均摊E peek() 查看栈顶元素原创 2020-05-14 06:19:22 · 753 阅读 · 0 评论 -
动态数组实现原理及实践
数组gitee地址:https://gitee.com/chentian114/chen_datastruct_studygithub地址:(https://github.com/chentian114/data-struct-and-algorithmCSDN地址:https://blog.csdn.net/chentian114/category_9997109.html数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。数组会利用 索引 来记录每个元原创 2020-10-19 22:05:10 · 779 阅读 · 0 评论