![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法与数据结构
文章平均质量分 91
主要总结算法导论的读书笔记,基础的数据结构笔记以及一些算法面试题的思路求解总结
何为xl
发布简单小项目和自己的学习笔记
展开
-
【LeetCode】试题总结:深度优先搜索 (DFS)
数据结构:二叉树中的 DFS(一)、相同的树105. 从前序与中序遍历序列构造二叉树104. 二叉树的最大深度110. 平衡二叉树114. 二叉树展开为链表112. 路径总和113. 路径总和 II方法四、(DFS+回溯)130. 被围绕的区域说明:本文仅做为本人总结算法竞赛试题的笔记,参照许多了题解,如有侵权请联系。...原创 2022-08-05 11:23:59 · 524 阅读 · 0 评论 -
【算法题】 工号不够用了怎么办?
一行两个非负整数 X Y,用数字用单个空格分隔。0原创 2022-07-06 10:16:18 · 1509 阅读 · 0 评论 -
【数据结构】串(三)—— KMP 算法
在串的朴素模式匹配算法中,每趟匹配失败都是模式后移一位再从头开始比较。为此本章介绍一种改进的模式匹配算法 —— KMP 算法。以下面主串的模式匹配为例朴素模式匹配算法:朴素模式匹配,主串有回溯KMP算法:在保证指针 i 不回溯的前提下,当匹配失败时,让模式串向右移动最大的距离;KMP算法相较于朴素模式匹配算法的优势在于:在保证指针 i 不回溯的前提下,当匹配失败时,让模式串向右移动最大的距离.为此计算模式串向右移动的距离是极为重要的,一般使用 next 数组来存储相关距离值。要了解子串的结构,首先要原创 2022-07-05 23:51:45 · 1449 阅读 · 0 评论 -
【数据结构】串(二)—— 朴素模式匹配算法
字符串模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置。在数据结构中,主要的字符串模式匹配算法有两种:朴素模式匹配算法和KMP算法。假设主串⻓度为n,模式串⻓度为 m朴素模式匹配算法:将主串中所有⻓度为 m 的⼦串依次与模式串对⽐,直到找到⼀个完全匹配的⼦串,或所有的⼦串都不匹配为⽌。首先定义指针 i 与 j ,确认主串与模式串对应的位置下标。若当前⼦串匹配失败,则主串指针 i 指向下⼀个⼦串的第⼀个位置,模式串指针 j 回到模式串的第⼀个位置注:此时 是指 i - j 表明在比较字符串最开始位原创 2022-07-05 18:41:05 · 3029 阅读 · 3 评论 -
【数据结构】树(七)—— 哈夫曼树(C语言版)
【数据结构】树(七)—— 哈夫曼树(C语言版)前言哈夫曼树的定义哈夫曼树的应用——哈夫曼编码前言哈夫曼树的定义哈夫曼树的应用——哈夫曼编码原创 2022-07-04 13:31:49 · 8251 阅读 · 1 评论 -
【数据结构】树(六)—— 二叉平衡树(C语言版)
【数据结构】树(六)—— 二叉平衡树(C语言版)前言前言在 《树(五)—— 二叉排序树》一文中,对二叉排序树进行性能分析时可知,当为二叉排序树时,其查找性能最佳,与二分查找类似。故需要对二叉排序树进行优化为二叉平衡树。.........原创 2022-06-28 14:30:04 · 1791 阅读 · 0 评论 -
【数据结构】排序算法(三)—— 希尔排序
【数据结构】排序算法(三)—— 希尔排序原创 2022-06-06 10:05:24 · 691 阅读 · 0 评论 -
【数据结构】树(四)—— 线索二叉树(C语言版)
【数据结构】树(四)—— 线索二叉树(C语言)前言导论为什么要加线索?线索二叉树的结构特点二叉树的存储结构二叉树的线索化如何在线索二叉树中找前驱与后继结点三种线索二叉树的比较(总结)图文详解中序线索二叉树的线索化完整代码前言导论由《树(二)—— 二叉树》一文的介绍中可知,二叉数本身是一种非线性结构,采用任何一种遍历二叉树的方法,都可以得到树中所有结点的一个线性序列。在这个序列中,除第一个结点外,每个结点都有自己的直接前趋;除最后一个结点外,每个结点都有一个直接后继。传统的二叉链表存储仅能体现一种父子关原创 2021-09-15 15:19:48 · 903 阅读 · 5 评论 -
【数据结构】树(五)—— 二叉排序树(C语言版)
【数据结构】二叉排序树(C语言版)前言一、二叉排序树的定义二、二叉排序树的性质三、二叉排序树的操作二叉排序树常用存储结构二叉排序树的查找(递归实现)查找"二叉树T"中键值为 key 的节点(非递归实现)查找"二叉树T"中键值为 key 的节点二叉排序树的插入二叉排序树的创建二叉排序树的删除四、二叉树的查找性能分析应用区分:(与二分查找的应用区分)二叉排序树的构造树结构分析完整可运行代码前言二叉排序树(Binary Sort Tree,BST)又称为二叉查找树、二叉搜索树。与树型查找有关的结构有二叉排序树原创 2021-09-05 23:20:23 · 10103 阅读 · 1 评论 -
【算法思想】数学归纳法在算法题中的应用(含例题举例)
【算法思想】数学归纳法在算法题中的应用(含例题举例)前言数学归纳法应用举例1. 前n项和2. 区域计数3. 着色问题4. 金字塔求和5. 简单不等式6. 欧拉公式7. 有路可达8. 格雷码9. 无重边的路常见错误总结注:本博客仅做本人学习总结使用,为节省时间较多的参考与引用了其他博文,仅做了少数补充与笔记。参考博客:https://blog.csdn.net/qq_39747794/article/details/88846012前言学算法,不得不提的就是数学归纳法。许多算法都会用到归纳假设的思想,转载 2021-07-04 23:38:42 · 1944 阅读 · 0 评论 -
【数据结构】串(一)—— 串的基础知识
【数据结构】串(一)—— 串的基础知识前言一、串类型的定义二、串的三种存储结构存(1)定长顺序存储(2)变长分配存储表示(堆分配)(3)块链存储三种存储结构的总结总结三、串的操作串的初始化(以下基于顺序表):串的操作(代码):前言C语言字符串与数据结构中的串的区别:C语言中有个字符串,数据结构中有个串,联系是二者都是存储字符的,区别在于前者我们直接定义数组存储,以 “ \0 ”结尾,如char str[size];而后者我们是把字符串看成一个线性表,定义成结构体形式,可以用链表,也可以是顺序表(原创 2021-05-30 23:08:50 · 4294 阅读 · 1 评论 -
【LeetCode 】试题总结:广度优先搜索(BFS)
【LeetCode 】试题总结:广度优先搜索(BFS)二叉树的堂兄弟节点试题链接解题思路代码森林中的兔子试题链接:二叉树的层序遍历 II二叉树的锯齿形层序遍历说明:本文仅做为本人总结算法竞赛试题的笔记,参照许多了题解,如有侵权请联系。二叉树的堂兄弟节点在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y原创 2021-04-07 22:40:41 · 289 阅读 · 0 评论 -
Java 数据结构—— 队列、栈
这里写自定义目录标题java原创 2021-03-09 22:22:10 · 222 阅读 · 1 评论 -
【数据结构】图(五)—— 最短路径算法(二)—— Dijkstra Algorithm(迪杰斯特拉算法)
最短路径——迪杰斯特拉算法原创 2021-02-28 18:11:08 · 954 阅读 · 1 评论 -
【数据结构】排序算法(二)—— 快速排序、归并排序(python、Java版)
排序算法(二)—— 快速排序、归并排序(Java版)快速排序快速排序思想(1)基线条件(2)分区(partitioning)快速排序的性能分析两个常见快排优化方法:三数取中法归并排序归并排序思想归并排序总结归并排序性能分析快速排序和归并算法的区别排序算法总结笔者对两种性能较优的算法 快速排序和归并排序 进行总结。对二者算法放在一起进行总结,均在于都运用了递归和分治的两种重要思想。在这里递归就不做详细介绍。分治:顾名思义,分而治之,这是在排序中我们非常常见的一种思想,同时也是在其他场景乃至日常生活的优秀原创 2021-02-24 21:31:41 · 403 阅读 · 0 评论 -
【数据结构】排序算法(一)—— 选择排序、冒泡排序(python,java版)
排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的三类算法:选择,冒泡,插入选择排序一、算法思想选择排序,从头至尾扫描无序序列,找出最小的一个元素,和无序序列中的第一个元素交换(注意,这里进行交换后就产生了有序序列),此时无序序列中的的第一个元素相当于有序序列的最后一个元素;接着从剩下的无序序列中继续这种选择和交换方式,最终得到一个有序序列。每趟从待排原创 2021-01-29 14:21:36 · 465 阅读 · 0 评论 -
二分查找
文章目录二分查找(binary_search)二分查找中的几个细节:python版二分查找细节详解算法的性能算法局限性寻找左侧边界的二分搜索寻找右侧边界的二分搜索二分查找(binary_search)仅当列表为有序且为顺序存储时,二分查找才适用如果一个序列是无序的或者是链表,那么该序列就不能进行二分查找。之所以被查找的序列要满足这样的条件,是由二分查找算法的原理决定的。本文就来探究几个最常用的二分查找场景:寻找一个数在数组中的下标、寻找左侧边界、寻找右侧边界。二分查找中的几个细节:while循原创 2021-01-27 16:19:18 · 126 阅读 · 0 评论 -
【数据结构】树(三) —— 树、森林与二叉树 的相互转换(C语言版)
树,森林 与 二叉树的转换树转换为二叉树加线,所有兄弟结点之间连接一条线。去线,对树中的每个结点,只保留它与第一个孩子结点的连线,删除与其他孩子结点之间的连线。层次调整,以树的根结点为轴心,将整个树调节一下(第一个孩子是结点的左孩子,兄弟转过来的孩子是结点的右孩子)注:树的孩子兄弟表示法 构成转换为 二叉树;结点的左右孩子分别为第一个孩子和此结点的右兄弟。(1)由于二叉树和树都可以用二叉链表作为存储结构,则以二叉链表作为媒介可导出树与二叉树之间的一个对应关系。(2)一般树转换成二叉树后,原创 2020-05-20 18:32:36 · 11664 阅读 · 2 评论 -
【数据结构】线性表(二)—— 单链表(C语言版)
// 链表:单向链表、 循环链表、 双向链表// 头结点为 存取数据元素 的情况#include <stdio.h>#include <stdlib.h>#include <time.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define......原创 2020-05-16 15:57:17 · 2551 阅读 · 0 评论 -
【数据结构】线性表(一)—— 顺序表(C语言版)
线性表定义:由零个或多个数据元素组成的有限序列。· 需注意几个关键点:-它是一个序列,也就是说元素之间是有先来后到的。-若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素有且只有一个前驱和一个后继。-线性表强调是有限的,无论计算机发展到多强大,它所处理的元素是有限的。如果用数学语言来定义,可如下定义:· 若将线性表记为(a1,…,ai-1,ai,ai+1,… , an)......原创 2020-05-14 21:42:57 · 3451 阅读 · 0 评论 -
【数据结构】树(二)—— 二叉树(C语言版)
二叉树二叉树的定义二叉树的特点特点五种基本形态特殊二叉树斜树满二叉树完全二叉树二叉树的性质二叉树的存储结构二叉树顺序存储结构二叉链表(链式存储结构)遍历二叉树前序遍历递归版非递归版中序遍历非递归版后序遍历递归版非递归版层序遍历推导遍历结果二叉树的建立二叉树的定义二叉树(Binary Tree)是n(n≥0)个结点的有限集合, 该集合或者为空集(称为空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。二叉树的特点特点每个结点最多有两棵子树,故不存在度大于2的结点原创 2020-05-10 23:16:00 · 3105 阅读 · 0 评论 -
【数据结构】树(一)—— 树的基础知识(C语言版)
树的基础知识树的定义树的相关概念度(Degree)结点间的关系结点的 层次(Level)有序树与森林线性表和树的不同树的抽象数据类型树的存储结构双亲表示法双亲表示法的优化孩子表示法孩子兄弟表示法树的定义树(Tree)是 n(n≥0)个结点的有限集。n=0 时称为空树。在任意一颗非空树中:(1)有且仅有一个特定的称为根(Root)的结点(2)当 n>1时,其余结点可分为 m(m>0)个互不相交的有限集 T1、T2、…、Tm, 其中每一个集合本身又是一棵树,并且称为根的子树(SubTre原创 2020-05-09 21:50:40 · 1922 阅读 · 0 评论