数据结构
文章平均质量分 83
快乐是你的与我无关了
这个作者很懒,什么都没留下…
展开
-
数据结构(六)——KMP算法详解
前言这周在学数据结构常见算法时遇到了很多的坑,真的是一步一个坑,先是背包问题,又是这个KMP算法,听的是尚硅谷韩老师的java数据结构与算法,他刚开始讲的算法思路还是听清晰的,但是一到代码上…一言难尽。KMP最核心的一部分十分难理解,韩老师也是一笔带过,我搜了许多篇博客,专门为此算法做一个总结。KMP算法所解决问题KMP是为了解决字符串匹配问题,如判断一个字符串str1= “ABCDAB ABCDABCDABDE” 是否包含另一个字符串str2 = “ABCDABD”,并找到其位置。关于字符串的查原创 2021-08-16 12:03:26 · 643 阅读 · 0 评论 -
数据结构(七)——Dijkasta 、Flyod、马踏棋盘算法
Dijkstra 算法应用场景-最短路径问题有 7 个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从 G 点出发,需要分别把邮件分别送到A, B, C , D, E, F 六个村庄各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何计算出 G 村庄到 其它各个村庄的最短距离?如果从其它点出发到各个点的最短距离又是多少?迪杰斯特拉(Dijkstra)算法介绍迪杰斯特拉(Dijkstra)算法是典型最短路径算法,**用于计算一个结点到其他结点的最短路径原创 2021-08-29 20:09:13 · 432 阅读 · 0 评论 -
数据结构(七)——贪心、动态规划、Prim 算法、Krusal算法
常用算法分治算法分治算法最佳实践-汉诺塔汉诺塔的传说汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着 64 片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。汉诺塔游戏的演示和思路分析:如果是有一个盘, A->C如果我们有 n >= 2 情况,我们总是可以看做是两个盘 1.最原创 2021-08-22 19:59:14 · 1467 阅读 · 0 评论 -
数据结构(四)——二叉树、堆排序以及二叉树的应用(java代码实现)
二叉树二叉树的概念树有很多种,每个节点最多只能有两个子节点的一种形式称为二叉树二叉树的子节点分为左节点和右节点如果该二叉树的所有叶子节点都在最后一层,并且节点总数= 2^n-1,n为层数,则我们称为满二叉树如果该二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续,我们称为完全二叉树二叉树的前中后序遍历前序遍历:先输出父节点,再遍历左子树和右子树中序遍历:先遍历左子树,再输出父节点,再遍历右子树后序原创 2021-08-09 14:49:53 · 299 阅读 · 0 评论 -
数据结构(五)——图的深度、广度遍历(java代码实现)
邻接矩阵保存图用邻接矩阵来保存图package Graph;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * @author lixiangxiang * @description * @date 2021/8/6 16:49 */public class Graph { /** 边 */ private int[][] edges; /**原创 2021-08-07 22:39:16 · 802 阅读 · 0 评论 -
数据结构笔记(三)—— 堆排序详解
堆排序1. 堆的概念堆是具有以下性质的完全二叉树:每个节点都大于或等于其做孩子节点的值,成为大顶堆。每个节点的值都小于或等于左右孩子节点的值,称为小顶堆。举例来说,对于n个元素的序列{R0, R1, … , Rn}当且仅当满足下列关系之一时,称之为堆:(1) Ri <= R2i+1 Ri <= R2i+2 (小根堆)(2) Ri >= R2i+1 且 Ri >= R2i+2 (大根堆)2. 堆排序基本思想1)首先,将数组R[0…n]调整为大顶堆或小顶堆(大原创 2021-07-11 12:02:11 · 2001 阅读 · 0 评论 -
数据结构笔记(二)—— 排序算法和查找算法(java代码实现)
数据结构——绪论数据结构简介[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7vaPjMSg-1624172502134)(C:\Users\value\AppData\Roaming\Typora\typora-user-images\image-20210321175244346.png)]数据、数据元素、数据项、数据对象数据是能被输入计算机且能被计算机处理的各种符号的集合信息的载体是对客观事物符号化的表示能够被计算机识别、存储和加工包括原创 2021-06-20 15:02:31 · 119 阅读 · 0 评论 -
数据结构笔记(一)—— 稀疏数组 、队列、链表、栈、递归 (包含java代码实现)
数据结构稀疏数组队列队列介绍队列是一个有序列表,可以用数组或是链表来实现遵循先入先出原。即:先存入队列的数据,要先取出。后存入的,后取出示意图:数组模拟队列队列本身是有序列表,若使用数组的结构来储存队列的数据,则队列数组的声明如下图,其中maxSize是该队列的最大容量队列的输出、输入是分别从前后端处理的,因此用练个变量front和rear分别记录队列前后端的下标,front会随着数据输出而改变,而rear是随着数据输入而改变当我们将数据存入队列是称为“原创 2021-04-25 10:18:43 · 200 阅读 · 0 评论 -
二维数组转稀疏数组
我们先看一个案例这是我们写的一个五子棋程序,现在需要保存当前的游戏状态,按普通的方法我们可以将其保存在二维数组内。用1表示黑子2表示蓝子。但该二维数组的很多值是默认值0,因此记录了很多没有意义的数据,这时候我们可以用稀疏数组来储存。思路二维数组转稀疏数组并写入文件中遍历原始的二维数组,得到有效数据的个数sum根据sum就可以创建稀疏数组spareArr int[sum+1][3]将二维数组的有效数据存入到稀疏数组 private static void convertSpareArr原创 2021-04-18 14:16:36 · 84 阅读 · 1 评论