码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据结构应用大全


    数据结构的应用大全

    • 栈
      • 括号匹配
      • 前/中/后缀表达式
      • 递归
    • 队列
      • 双端队列
    • 串
      • KMP算法
      • KMP算法的优化
    • 二叉树⭐
      • 二叉树的三种遍历及层次遍历
      • 线索二叉树
      • 树、森林与二叉树的转换
      • 哈夫曼树
      • 并查集
    • 图⭐
      • 最小生成树(Prim、Kruskkal)
      • 最短路径(Dijkstra、Floyd)
      • 有向无环图(DAG图)
      • 拓扑排序,AOV网
      • 关键路径
    • 查找
      • 二叉排序树
      • 平衡二叉树
      • 红黑树
      • B树和B+树
      • 散列表(等更~~)
    • 排序
      • 外部排序的应用(败者树、置换-选择排序、最佳归并树)

    这篇博客是一篇综合类的,主要是汇集各种数据结构的应用,也是补上之前偷懒没写的,就总结成一篇了

    栈

    括号匹配

    [ ( [ ] [ ] ) ] 是否匹配成功
    
    栈中的情况:[  (  [  ] 	第四个匹配成功,弹出匹配成功的项
    栈中的情况:[  (  [  ]	第六个匹配成功
    栈中的情况:[  (  )		第七个匹配成功
    栈中的情况:[  ] 		第八个匹配成功
    该括号串匹配成功
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    前/中/后缀表达式

    1. 中缀表达式 => 后缀表达式
    (a+b)/c*d-(e-f/g)+h/i  
    // () > /* > +-
    ab+c/d*efg/--hi/+
    
    • 1
    • 2
    • 3
    1. 后缀表达式如何计算?
    ab+c/d*efg/--hi/+
    // 遇到符号就拿前面两个来运算
    ab+ 	=> 	a+b
    c/ 		=> 	(a+b)/c
    d*		=> 	(a+b)/c*d
    efg/ 	=> 	f/g
    - 		=> 	e-f/g
    -		=> 	(a+b)/c*d-(e-f/g)
    hi/		=> 	h/i
    + 		=> 	(a+b)/c*d-(e-f/g)+h/i
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    递归

    链接: https://pan.baidu.com/s/1UVyo93OVHX4SGz1HaPZ27w 提取码: n5jv
    时间紧迫,递归最好还是有动画比较好懂

    队列

    双端队列

    数据结构之队列
    这个可以看之前的一篇博客,很简单

    串

    KMP算法

    朴素匹配就不用多说,直接暴力即可
    KMP算法主要考的是求next数组
    在这里插入图片描述
    在这里插入图片描述
    判断next值就是判断模式串该从哪里开始匹配的问题,这里化了一条线,最终会在线右边第一个开始匹配
    比如next3,经过向右移动,最终j=1,说明此时需要从1开始匹配,即next3=1;
    又如next4,经过向右移动,再第三行这里匹配成功,此时j=2
    在这里插入图片描述

    KMP算法的优化

    KMP优化算法主要考的是求nextval数组

    以上个例子为基础,我们已经得到了未优化的next数组,如下
    011234223456,此时我们只需要对其进行手动判断,如下

    			a b a b a a a b a b a a
    			0 1 1 2 3 4 2 2 3 4 5 6
    // 1(a,0)表示第1个位置,内容为a,next数组值为0
    第一个:		无需改变
    第二个:		对应的是b,失败时跳转回1(a,0),因此不需要改变
    第三个:		对应的是a,失败时跳转回1(a,0),因此改为1(a,0)对应的0	// 此时a匹配未成功,回到1(a,0)匹配也必定不成功 
    			a b a 
    			0 1 0
    第四个:		对应的是b,失败时跳转回2(b,1),因此改为2(b,1)对应的1 // 此时b匹配未成功,回到2(b,1)匹配也必定不成功
    			a b a b
    			0 1 0 1
    	...
    最终结果为	a b a b a a a b a b a a
    			0 1 0 1 0 4 2 1 0 1 0 4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    二叉树⭐

    二叉树的三种遍历及层次遍历

    至少要能够手动的分析出树的结构
    (1)先序遍历:根左右;(2)中序遍历:左根右;(3)后序遍历:左右根;(4)层次遍历:第一层、第二层…

    例如:

    1. 前序遍历为DABEC,中序遍历为DEBAC,求后序遍历 CEDBA
    2. 前序遍历为ABCDEF,中序遍历为CBAEDF,求后序遍历 CBEFDA

    线索二叉树

    增加了手绘方式的图解

    树、森林与二叉树的转换

    看这里,我觉得我画的还行

    哈夫曼树

    因为前不久才写了最佳归并,不想写一遍哈夫曼了

    并查集

    并查集使用的是双亲定义方法(代码要记住)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    图⭐

    最小生成树(Prim、Kruskkal)

    1. Prim算法
      时间复杂度O(|V|2),不依赖于|E|,适用于边稠密的图
      原理:每次都找跟已搜索结点毗邻的最短边
      在这里插入图片描述

    2. Kruskkal算法
      时间复杂度O(|E|log|E|),适用于边稀疏而顶点较多的图
      原理:每次都找最短的一条边
      在这里插入图片描述

    最短路径(Dijkstra、Floyd)

    1. Dijkstra算法求单源最短路径问题
      时间复杂度O(|V|2),基于贪心策略,不适用于带有负权值的边在这里插入图片描述

    2. Floyd算法
      时间复杂度O(|V|3),基于动态规划策略
      允许图中带有负权值的边,但不允许有包含带负权值的边组成的回路
      在这里插入图片描述

    有向无环图(DAG图)

    在这里插入图片描述

    链接: https://pan.baidu.com/s/1TSrAY3jOXG-0f1lX1QAnYw 提取码: aph2
    咸鱼学长无敌!!!

    拓扑排序,AOV网

    注:一定不能有环路
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    关键路径

    • 从源点(开始顶点)到汇点(结束顶点)的所有路径中,具有最大路径长度的路径称为关键路径

    • 关键路径不一定唯一,因此缩短某一条关键路径的某一个活动时间不一定可以缩短时间,要缩短所有关键路径的交集边才可以

    查找

    二叉排序树

    平衡二叉树

    红黑树

    B树和B+树

    散列表(等更~~)

    排序

    外部排序的应用(败者树、置换-选择排序、最佳归并树)

  • 相关阅读:
    [附源码]计算机毕业设计springboot医疗器械公司公告管理系统
    吃透阿里面试官分享的这份Java八股文,我已拿下4个offer
    第十五章总结
    【Scan kit】Sechunter针对统一扫码SDK扫出漏洞该如何解决?
    电源模块测试解决方案-电源测试系统方案-电源模块测试报告NSAT-8000
    盒子模型-css
    创建型设计模式之工厂方法模式
    客户案例 | 思腾合力助力深度图灵生成式AI应用平台建设
    Linux安装docker
    【历史上的今天】6 月 24 日:网易成立;首届消费电子展召开;世界上第一次网络直播
  • 原文地址:https://blog.csdn.net/weixin_47547625/article/details/127591477
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号