摘要: #二叉树的遍历 ##主要的三种遍历方式 二叉树主要的遍历方式有前序遍历、中序遍历和后序遍历。 (1)前序遍历:根节点-->左子树-->右子树 (2)中序遍历:左子树-->根节点-->右子树 (3)后序遍历:左子树-->右子树-->根节点 其实还有一种比较基础的遍历方式是层次遍历,但是在本篇文章中不会 阅读全文
posted @ 2023-01-30 13:35 Amαdeus 阅读(152) 评论(0) 推荐(2) 编辑
摘要: #字符串匹配问题 给定一个字符串 s 和一个要匹配的模式串 p。模式串 p 有可能在 s 中多次出现,请求出模式串 p 在 s 中所有出现的起始位置。 #暴力匹配算法 BF ##算法思路 在面对字符串匹配问题时,很容易想到暴力求解。字符串匹配的暴力算法思路很简单,即在 s 中枚举起点 i,对于每个起 阅读全文
posted @ 2023-01-25 11:33 Amαdeus 阅读(130) 评论(0) 推荐(0) 编辑
摘要: #前言 在本篇文章中,我将介绍 Dijkstra 算法解决 单源最短路径问题 ,同时还包含了具体路径的还原。以下是我自己的全部学习过程与思考,参考书籍为 《数据结构》(C++语言版) 邓俊辉 编著 。 (本文作者: Amαdeus,未经允许不得转载哦。) #最短路径问题 ##最短路径概述 在当今这个 阅读全文
posted @ 2022-11-27 00:04 Amαdeus 阅读(378) 评论(0) 推荐(5) 编辑
摘要: #前言 本篇文章我将介绍 期望为线性时间 的选择算法和 最坏情况为线性时间 的选择算法,即分别为 平均情况下时间复杂度为O(n) 和 最坏情况下时间复杂度为O(n) 的线性时间选择。以下包含了我自己的全部思考和学习过程,参考书籍为 算法导论(第三版)。😊 (本文作者: Amαdeus,未经允许不得 阅读全文
posted @ 2022-11-24 14:36 Amαdeus 阅读(375) 评论(0) 推荐(2) 编辑
摘要: #前言 在这篇文章中,我将介绍动态规划求解 最大子段和(即最大子数组累加和问题) 的两种写法思路及其还原最优解,后面还包含了一点小小的优化。😊 (本文作者: Amαdeus,未经允许不得转载哦。) #最大子段和解析 ##最大子段和问题描述 给定一个长度为 len 的序列: a[0], a[1], 阅读全文
posted @ 2022-11-22 15:49 Amαdeus 阅读(465) 评论(0) 推荐(2) 编辑
摘要: #快速排序解释 快速排序 Quick Sort 与归并排序一样,也是典型的分治法的应用。 (如果有对 归并排序还不了解的童鞋,可以看看这里哟~ 归并排序)??? (本文作者: Amαdeus,未经允许不得转载哦。) ###快速排序的分治模式 1、选取基准值,获取划分位置。将原数组 a[l, r] 划 阅读全文
posted @ 2022-11-20 21:23 Amαdeus 阅读(545) 评论(0) 推荐(3) 编辑
摘要: #二叉树的遍历 ##主要的三种遍历方式 二叉树主要的遍历方式有前序遍历、中序遍历和后序遍历。 (1)前序遍历:根节点-->左子树-->右子树 (2)中序遍历:左子树-->根节点-->右子树 (3)后序遍历:左子树-->右子树-->根节点 其实还有一种比较基础的遍历方式是层次遍历,但是在本篇文章中不会 阅读全文
posted @ 2023-01-30 13:35 Amαdeus 阅读(152) 评论(0) 推荐(2) 编辑
摘要: #字符串匹配问题 给定一个字符串 s 和一个要匹配的模式串 p。模式串 p 有可能在 s 中多次出现,请求出模式串 p 在 s 中所有出现的起始位置。 #暴力匹配算法 BF ##算法思路 在面对字符串匹配问题时,很容易想到暴力求解。字符串匹配的暴力算法思路很简单,即在 s 中枚举起点 i,对于每个起 阅读全文
posted @ 2023-01-25 11:33 Amαdeus 阅读(130) 评论(0) 推荐(0) 编辑
摘要: #队列 ##队列基本概念 队列( queue )是一种特殊的线性表结构,只从队尾插入新的元素,并且只从队首弹出元素。一般将队尾称为 rear,队首称为 front 。 ##队列基本操作 (1)入队:从队尾 rear 插入新元素; (2)出队:从队首 front 弹出元素。 ##队列的特性 队列遵循 阅读全文
posted @ 2023-01-21 11:49 Amαdeus 阅读(14) 评论(0) 推荐(0) 编辑
摘要: #栈 ##栈的概念 栈(stack)是一种特殊的线性表存储结构,其一端可以进行插入和弹出的操作,而另一端是封死的。 可以把栈想象成是一个柱状的容器。就比如一个乒乓球筒,我们只能在筒的一段进行乒乓球的放入和取出。 ##栈顶和栈的两种操作 栈顶就是栈的开口端,每次都是在栈顶处插入元素和删除元素。 (1) 阅读全文
posted @ 2023-01-19 22:49 Amαdeus 阅读(10) 评论(0) 推荐(0) 编辑
摘要: #插入排序 ##插入排序回顾 我们先回顾一下对数组的插入排序,其步骤大致为: 先将第一个数据元素看作是一个有序序列,后面的 n-1 个数据元素看作是未排序序列。对后面未排序序列中的第一个数据元素在这个有序序列中进行从后往前扫描,找到合适的插入位置并插入到其中,每次有序序列的长度 +1。 重复这样的操 阅读全文
posted @ 2023-01-18 21:05 Amαdeus 阅读(5) 评论(0) 推荐(0) 编辑
摘要: #双向链表 ##双向链表概念 双向链表也叫双链表,其每个数据结点中都有两个指针,分别指向直接后继和直接前驱。在单向链表中若要找到某个节点的前驱节点,需要先遍历到这个节点,然后再遍历一次找到其前驱节点,这无疑是十分低效的。而双向链表可以做到正向反向遍历,由此相比单向链表可以更高效地找到某个节点的前驱节 阅读全文
posted @ 2023-01-17 21:53 Amαdeus 阅读(10) 评论(1) 推荐(1) 编辑
摘要: #单向链表的去重 ##问题描述及分析 给定一个有序的链表,去除重复出现的元素,使每个元素只出现一次。例如一个单向链表为 1->1->2->2->3->4->4->? , 那么去重后得到的单向链表为 1->2->3->4->? 。 这里的链表保证是有序的,所以出现的重复元素都是相邻的,所以对整个链表进 阅读全文
posted @ 2023-01-01 17:54 Amαdeus 阅读(39) 评论(0) 推荐(2) 编辑
摘要: #单向链表的翻转 ##单向链表翻转 思路 假设链表是: 1->3->5->?,所要求得的链表是 5->3->1->?。只需要将每个节点的 next 指向其之前的一个节点即可。 对于第一个节点,如果是头节点不带数据的链表,那么只需要将其 next 指向 head;如果头节点带数据,第一个节点的 nex 阅读全文
posted @ 2022-12-27 20:51 Amαdeus 阅读(26) 评论(0) 推荐(1) 编辑
摘要: #单向链表 ##什么是单向链表 链表是一种物理储存单元上非连续、非顺序的储存结构。它由一系列结点(链表中每一个元素称为结点)组成,结点可动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 其实可以形象的认为,单向链表就好像一列火车。🤔 链表的节点就好像 阅读全文
posted @ 2022-12-23 14:36 Amαdeus 阅读(49) 评论(0) 推荐(1) 编辑
摘要: #前言 在本篇文章中,我将介绍 Dijkstra 算法解决 单源最短路径问题 ,同时还包含了具体路径的还原。以下是我自己的全部学习过程与思考,参考书籍为 《数据结构》(C++语言版) 邓俊辉 编著 。 (本文作者: Amαdeus,未经允许不得转载哦。) #最短路径问题 ##最短路径概述 在当今这个 阅读全文
posted @ 2022-11-27 00:04 Amαdeus 阅读(378) 评论(0) 推荐(5) 编辑
http://www.vxiaotou.com