
数据结构与算法
文章平均质量分 54
采用理论和实践结合的方式深入学习数据结构与算法
慕沐.
这个作者很懒,什么都没留下…
展开
-
【算法】最小生成树—Prim算法和Kruskal算法如何实现?
Prim算法和Kruskal算法都是解决最小生成树问题的经典算法。那么Prim算法和Kruskal算法该如何实现呢?1、Prim算法Java代码实现的案例 2、Kruskal算法Java代码实现的案例。原创 2024-03-31 23:29:56 · 273 阅读 · 0 评论 -
【算法】最小生成树—Prim算法与Kruskal算法
Prim算法和Kruskal算法都是解决最小生成树问题的经典算法。最小生成树是原图的最小连通子图,它包含原图的全部结点,且保持图连通的所有边代价和最小。一个连通图可能有多个最小生成树。原创 2024-02-29 21:54:11 · 1063 阅读 · 1 评论 -
【算法】排序算法之选择排序
选择排序主要思想就是每一轮都选出剩下未排序元素中最小(大)的元素直接交换到序列的起始位置原创 2022-01-09 23:59:08 · 473 阅读 · 1 评论 -
【数据结构与算法】B树,B+树,B*树是什么,有什么区别呢?
B树,B+树,B树是多叉树,出现B树,B+树,B树是因为在数据量很大很大的情况下,二叉树如果节点很多,在构建二叉树时会进行多次i/o操作,速度有影响,节点多,二叉树也会很高,这样会降低操作速度。而多叉树每个节点存放多个数据,这样会减少树的高度,能对二叉树进行优化。还有B树,B+树,B*树是建立在二叉排序树的基础上的,二叉排序树是左子节点比父节点小,右子节点比父节点大。B树B-tree树即...原创 2020-04-28 20:55:49 · 813 阅读 · 0 评论 -
【数据结构与算法】了解前缀中缀后缀表达式,实现逆波兰计算器
一、中缀表达式1、中缀表达式就是常见的运算表达式,如(3+4)×5-62、中缀表达式的求值是我们人最熟悉的,但是对计算机来说却不好操作(前面我们讲的案例就能看的这个问题),因此,在计算结果时,往往会将中缀表达式转成其它表达式来操作(一般转成后缀表达式.)中缀表达式的计算机求值使用栈实现综合计算器的计算 思路(1)通过一个 index 值(索引),来遍历我们的表达式(2) 如果我们发...原创 2020-04-26 10:37:51 · 603 阅读 · 0 评论 -
【数据结构与算法】约瑟夫问题——单向环形链表
经典的约舍夫问题,其实归根到底是单向环形链表的问题,本篇博客先介绍单向循环链表,再以一个小游戏丢手绢小孩出圈的问题理解约瑟夫问题单向循环链表1、示意图2、构建环形链表(1)先创建第一个节点,让first指向该节点,并形成环形(2)当我们每创建一个新的节点,就把该节点加入到已有的环形链表中3、遍历环形链表(1)想让一个辅助变量curBoy,指向first节点(2)然后通过一个w...原创 2020-04-19 22:33:28 · 328 阅读 · 0 评论 -
【数据结构与算法】单向链表与双向链表的增删改查(包括有序插入到链表)
单向链表1、链表是以节点的方式来存储,是链式存储2、每个节点包含data域,next域:指向下一个节点3、链表的每个节点不一定是连续存储4、链表分带头节点的链表和没有头节点链表,根据需求确定1、遍历通过一个辅助遍历,帮助遍历整个链表2、添加(创建)(1)先创建一个head头节点,作用就是表示单链表的头(2)后面每添加一个节点,就直接加入到链表的最后添加有俩种形式,一种是直接...原创 2020-04-11 21:30:25 · 564 阅读 · 1 评论 -
【数据结构与算法】用数组模拟实现环形队列
在之前的实践中,已经使用数组实现了队列,但是其有缺陷,就是数组只能使用一次,由此提出改进,用数组模拟实现环形队列队列队列是一个有序列表,可以用数组或是链表来实现队列遵循先入先出的原则队列的输出输入分别从前后端处理,因此需要俩个变量front和rear分别记录队列前后端的下标,front会随着数据输出而改变,而rear则是随着数据输入而改变环形队列1.front指向队列的第一个元素...原创 2020-04-05 15:15:01 · 416 阅读 · 1 评论 -
【数据结构与算法】二维数组与稀疏数组的相互转化
什么情况下使用稀疏数组当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法(1)记录数组一共有几行几列,有多少个不同的值(2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模二维数组与稀疏数组的转化方法1、二维数组转稀疏数组(1)遍历原始的二维数组,得到有效数据的个数(2)根据sum就可以创建稀疏数组spars...原创 2020-03-29 20:47:48 · 280 阅读 · 0 评论 -
【数据结构与算法】顺序队列与链式队列及其实现
关于栈,我们先想一个生活中的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个依次取。后进者先出,先进者后出,这就是典型的栈结构。栈是一种“操作受限”的线性表,只允许在一端进行插入和删除数据。进行操作的那一段被称为栈顶,与此相对,栈的另一端叫做栈底。栈的操作是按照后进先出的原则进行。顺序队列基于数组实现顺序队列public c...原创 2020-01-20 20:37:35 · 827 阅读 · 0 评论 -
【数据结构与算法】顺序栈与链式栈及其实现
关于栈,我们先想一个生活中的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个依次取。后进者先出,先进者后出,这就是典型的栈结构。栈是一种“操作受限”的线性表,只允许在一端进行插入和删除数据。进行操作的那一段被称为栈顶,与此相对,栈的另一端叫做栈底。栈的操作是按照后进先出的原则进行。顺序栈采用顺序存储结构的栈称为顺序栈,需要一块...原创 2020-01-19 21:32:16 · 797 阅读 · 0 评论 -
【数据结构与算法】用栈简单实现浏览器的前进与后退
题目实现浏览器的前进与后退实现方法使用俩个栈,一个栈存放可后退的地址,一个栈存放可前进的的地址。比如一次打开三个网址:https://www.baidu.com/,https://blog.youkuaiyun.com/cxh6863,https://youzan.github.io/vant/#/zh-CN/cell。那就代表在前进栈里存放这三个地址。后退三次依次变化接着前进三次的变化...原创 2020-01-11 20:18:34 · 1431 阅读 · 0 评论 -
【数据结构与算法】单链表操作—检测是否有环、求入环点、环长及链表长
题目检测如下链表是否有环实现方法采用快慢指针的方式检测链表是否有环public static boolean isLoop(Node node){ Node fast=node; Node slow=node; while (fast.next!=null && fast.next.next!=null){ ...原创 2020-01-04 21:21:05 · 270 阅读 · 0 评论 -
【数据结构与算法】单链表反转
题目将链表1->2->3->4->5转换为5->4->3->2->1实现方法以循环遍历的方式以实现单链表反转public static Node reverse(Node node){ //循环遍历实现 Node reverse=null; while (node!=null){ ...原创 2019-12-29 19:17:59 · 328 阅读 · 3 评论 -
【数据结构与算法】数组是什么呢
提前问个题问题,大家看如下C语言代码,这个代码中的“hello world”会打印多少次呢?#include <stdio.h>int main(){ int i=0; int arr[3]={0}; for(;i<=3;i++){ arr[i]=0; printf("hello world—"); printf("%d\n...原创 2019-12-19 21:32:54 · 819 阅读 · 2 评论 -
【数据结构与算法】认识递归
浅识1、递归与循环理论上,任何循环都可以重写为递归形式;有些语言没有循环语句,只能使用递归。2、循环改递归(1)发现逻辑、相似性 (2)一定要有“出口”(不然就会死循环)3、构造相似性如果没有明显的相似性,可能是缺少参数,需要主动构造,与递推类似4、递归调用(1)递归调用仅仅是被调函数正好是主调函数 (2)每次调用的层次不同 (3)每次分配形参...原创 2018-03-11 15:03:04 · 196 阅读 · 18 评论