
数据结构
文章平均质量分 91
bbings
https://bbing.com.cn/
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
字符串匹配算法
先约定两个概念, 主串和模式串.比如在S字符串中查找s字符串, 则S是主串, s是模式串.如下, 在主串中搜索"cdf"模式串:主串和模式串BF暴力匹配是很朴素的字符串匹配算法, 将主串中的字符与模式串的字符一个一个匹配, 如果遇到不匹配的字符对则主串向后滑动一个字符, 从头开始匹配:暴力匹配代码实现如下, strStr的作用是从haystack字符串中找到needle字符串首次出现的位置, 如果没有找到则返回-1. (LC.28) 1 2 3 4 5 6 7 8 9 10 11 12 13原创 2021-08-26 13:18:53 · 314 阅读 · 0 评论 -
数据结构与算法之图
什么是图在前面的文章中, 我们了解了树的概念, 重点是二叉树, 图在拓扑结构上和树有点类似, 但是图不是树.直观地, 先来看一个图的拓扑结构:无向图上述展示的是无向图, 无向图就是没有方向的图, 只要两个结点之间是联通的, 就可以从一个结点到另外一个结点.我们可以将其理解为简化后的地图, A-G代表的是地点.一般地, 对图我们有以下的一般性概念:图的结点叫做顶点;顶点(结点)之间的连接叫做边;一个顶点(结点)有多少条边叫做这个顶点(结点)的度;对应的, 还有有向图, 有向图就是有方向的图, 链接的两个顶点的原创 2021-08-26 13:18:02 · 498 阅读 · 0 评论 -
数据结构与算法之跳表
一维链表一维链表链表不需要一块很大的连续的存储空间是其优点, 但是对一串有序序列, 使用一维链表查询的时间复杂度是O(n), 能否如查找二叉树之类, 将其查找时间复杂度降为O(logn)呢?一种常用的方法是升维. 升维也是一种空间换时间的思考方式, 会提高数据结构的空间复杂度, 但是可以降低一些操作的时间复杂度.跳表跳表的一般结构, 将一维链表升维成二维:跳表跳表类似于图书馆的图书管理结构. 一般地, 图书馆存放图书有以下约定:每本图书有其对应的唯一ID(key);每本图书的ID可以比较大小关系;图书是按照原创 2021-08-26 13:14:25 · 247 阅读 · 0 评论 -
数据结构与算法之堆
数据结构与算法之堆 原文来自个人博客(求访问/关注/收藏): https://bbing.com.cn/ 优快云个人博客不定期转载 堆的结构 同二叉查找树类似, 堆也是一种特殊的二叉树: 堆是一颗完全二叉树; 堆的孩子结点都小于或者大于父结点; 所以, 堆可以像一颗完全二叉树一样, 很自然地可以使用顺序存储; 区别于二叉查找树, 堆的孩子结点是都小于或者大于父结点. 一般地, 堆划分为小顶堆和大顶堆: 父结点小于孩子结点的堆叫做小顶堆; 父结点大于孩子结点的堆叫做大顶堆; 如下是一个小顶堆原创 2021-05-14 09:42:53 · 187 阅读 · 0 评论 -
数据结构与算法之2-3-4树
数据结构与算法之2-3-4树 原文来自个人博客(求访问/关注/收藏): https://bbing.com.cn/ 优快云个人博客不定期转载 平衡树 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y3SPrlM2-1615947159678)(https://s3.ax1x.com/2021/01/29/yi2tDs.png “不太平衡的二叉树”)] 对于一个普通的二叉查找树, 我们可以发现一个问题, 存在一定的可能性, 一般的二叉查找树会退化成一般的链表. 上图还没原创 2021-03-17 10:14:01 · 330 阅读 · 0 评论 -
数据结构与算法之二叉查找树
数据结构与算法之二叉查找树 原文来自个人博客(求访问/关注/收藏): https://bbing.com.cn/ 优快云个人博客不定期转载 什么是二叉查找树 对一般容器的查找, 我们可以按顺序遍历, 找到符合要求的元素就返回; 对于元素是有序的容器, 可以使用二分查找等方法查找, 减少操作的时间复杂度. 容易知道, 一般查找的平均时间复杂度是O(n), 二分查找的平均时间复杂度是O(logn). 什么是二叉查找树? 根结点的左子树的结点都小(大)于根结点, 根结点的右子树的结点都大(小)于根结点;原创 2021-03-11 09:30:20 · 173 阅读 · 0 评论 -
数据结构与算法之二叉树的遍历
数据结构与算法之二叉树的遍历 原文来自个人博客(求访问/关注/收藏): https://bbing.com.cn/ 优快云个人博客不定期转载 遍历二叉树的作用 基于二叉树的结构, 衍生出了二叉查找树/平衡二叉查找树/堆等等结构或算法(这些之后会讲), 学会如何遍历一颗二叉树是学习此类"派生二叉树"的基础. 二叉树的遍历 我们先来看一颗一般的二叉树. 然后根据不同的遍历方式, 看看这颗二叉树结点最终遍历的顺序. 前序遍历 前序遍历就是按照先根结点, 再左右子结点的方式去遍历(root -> l原创 2021-03-03 15:10:58 · 246 阅读 · 1 评论 -
数据结构与算法之二叉树
数据结构与算法之二叉树 原文来自个人博客(求访问/关注/收藏): https://bbing.com.cn/ 优快云个人博客不定期转载 什么是二叉树 二叉树的知识点, 需要有链表的基础知识, 一般二叉树的结构如图示: 二叉树是一种树状结构. 所谓二叉, 就是一个节点最多可以延伸出两个子节点. 对于二叉树的节点一般会有一些固有称呼. 如上图, 一般会把N1节点叫做"根结点"或者"root节点"; 会把N2叫做N1的"左子节点", N3叫做N1的"右子节点"; N1则是N2或者N3的"父节点"或者"原创 2021-02-22 09:34:47 · 240 阅读 · 0 评论 -
数据结构与算法之单调栈
数据结构与算法之单调栈 原文来自个人博客(求访问/关注/收藏): https://bbing.com.cn/ 优快云个人博客不定期转载 单调栈 顾名思义, 单调栈就是其元素单调的栈, 满足两个特性: 是栈 栈元素单调递减(<)或者单调递增(>) 当然, 关于第二点也可以是单调不递减(>=)或者单调不递增(<=). 构造一个单调栈 从实践出发, 看看怎么构建一个单调栈; 比如有一个正整数列表: [2 1 3 4 7 5] 构建其中之一的单调不递减栈: 列表是否空? 如果空原创 2021-02-03 09:23:25 · 263 阅读 · 1 评论 -
数据结构与算法之栈
数据结构与算法之栈 原文来自个人博客(求访问/关注/收藏): https://bbing.com.cn/ 优快云个人博客不定期转载 什么是栈 栈是一种数据结构, 满足先入后出. 一般栈支持以下几个操作: push(n); //数据入栈 a.pop(); //数据出栈 a.top(); //获取栈顶元素 a.size(); //获取栈中元素数量 a.empty(); //是否是空栈 C++中的stack容器 官方文档中, 定义如下 template< class原创 2021-02-01 11:20:33 · 177 阅读 · 0 评论