数据结构与算法
文章平均质量分 67
数据结构与算法之美
qxlxi
21届本,后端工程师 (专注于Java、Go、数据库、缓存、消息队列、网络、OS、算法、软件设计、DevOps、云原生、大数据、分布式系统架构设计等)
展开
-
【分布式存储】数据存储和检索~B+树
数据存储和检索~B+树原创 2023-08-13 21:36:47 · 403 阅读 · 0 评论 -
【数据结构】Bloom Filter 布隆过滤器
Bloom Filter 布隆过滤器原创 2023-05-21 11:18:40 · 474 阅读 · 0 评论 -
【算法】百度百科经典算法链接集
百度百科经典算法链接集排序排序算法:http://baike.baidu.com/view/297739.htm冒泡排序法:http://baike.baidu.com/view/1313793.htm起泡法:http://baike.baidu.com/view/174304.htm鸡尾酒排序:http://baike.baidu.com/view/1981861.htm桶排序:ht...转载 2020-05-04 21:16:26 · 307 阅读 · 0 评论 -
【数据结构与算法之美】常见算法的模板
1.递归1.1 代码实现 public void recur(int level,int param){ //terminator --》终止条件 if(level > MAX_LEVEL){ //process result return; } //process current logic --》 当前逻辑处理 process(level,par...原创 2020-04-28 13:26:36 · 547 阅读 · 0 评论 -
【数据结构与算法之美】数据结构与算法总览
原创 2020-03-31 18:49:55 · 321 阅读 · 0 评论 -
【数据结构与算法之美】十大排序思路及动图演示 代码实现
1.冒泡排序1.1 实现思路冒泡排序思想是通过将两个互相相邻的元素进行比较,如果前一个元素大于后一个元素,进行交换位置。否则不交换。外层循环控制层数,内存循环控制个数。每进行一轮都会将最大数字移动到最后,所以经过多次交换就可以实现将数组中的元素进行有序排列了。note:我们在内存循环中加入一个判断标志 如果当前内存循环没有进行交换数据的操作 说明这个数组的元素已经是有序的 就可以退出循环操...原创 2020-03-30 21:59:03 · 329 阅读 · 0 评论 -
【数据结构与算法之美】红黑树左右旋转加颜色翻转代码实现
1.图示在红黑树添加元素的时候 一共三种情况。左旋转右旋转颜色翻转2.代码实操public class RBTree { private static final boolean RED = true; private static final boolean BLACK = false; private class Node{ pu...原创 2020-03-29 18:19:15 · 348 阅读 · 0 评论 -
【数据结构与算法之美】7.排序算法之冒泡、选择、插入
package com.ncst.sort;/** * @author i * @create 2019/12/24 16:39 * @Description 排序 * 冒泡排序 */public class Sorts { /*** * 冒泡排序 * 案例: 6 5 4 3 1 2 * 第一轮 * 第一次 5 ...原创 2019-12-24 19:07:23 · 300 阅读 · 0 评论 -
【数据结构与算法之美】6.环形队列
package com.ncst.queue;/** * @author i * @create 2019/12/20 15:29 * @Description 环形队列 */public class CircularQueue { private String[] data;//存储数据 private Integer size = 0;//大小 priv...原创 2019-12-20 16:44:54 · 327 阅读 · 0 评论 -
【数据结构与算法之美】5.基于链表实现队列
package com.ncst.queue;/** * @author i * @create 2019/12/20 16:10 * @Description 基于链表实现队列 */public class QueueBaseOnLikedList { private Node head;//头结点 private Node tail;//尾结点 //入...原创 2019-12-20 16:43:47 · 221 阅读 · 0 评论 -
【数据结构与算法之美】4.基于数组实现队列
package com.ncst.queue;/** * @author i * @create 2019/12/20 15:14 * @Description 利用数组实现队列 * */public class ArrayQueue { private String [] data;//存储数据 private Integer size = 0;//大小 ...原创 2019-12-20 16:42:36 · 232 阅读 · 0 评论 -
【数据结构与算法之美】3.基于栈实现的浏览器前进和后退功能
package com.ncst.stack;import java.util.List;/** * @author i * @create 2019/12/19 21:34 * @Description * 使用前后栈实现浏览器的前进后退 * * 思路:创建两个栈空间 一个用来存储前后的页面goBackStack,一个用来记录后退的页面goForwardStack。一个...原创 2019-12-20 10:50:28 · 507 阅读 · 0 评论 -
【数据结构与算法之美】2.基于链表实现的栈
package com.ncst.stack;/** * @author i * @create 2019/12/19 20:56 * @Description 基于链表实现栈 */public class StackBasedOnLinkedList<T>{ private Node top;//设置一个top 用来标记栈顶 //出栈 pu...原创 2019-12-19 21:10:18 · 336 阅读 · 0 评论 -
【数据结构与算法之美】1. 基于数组实现的栈
1.基于数组实现的栈package com.ncst.stack;import com.ncst.array.Array;/** * @author i * @create 2019/12/19 19:47 * @Description */public class ArrayStack{ private Integer [] data;//存储数据 p...原创 2019-12-19 21:09:26 · 426 阅读 · 0 评论 -
【数据结构与算法之美】基于单链表LRU算法
我们维护一个有序单链表,越靠近链表尾部的节点是越早之前访问的,当有一个新的数据被访问时,我们从链表头开始顺序遍历链表。** 1.如果此数据之前在缓存在链表中了,我们遍历得到这个数据对应的节点,并将其从原来的位置删除,然后在插入到链表的头部。** 2.如果此数据中没有缓存链表中,可以分为两个情况** - 如果此时缓存没满,则将此节点直接插入到链表的头部。* - 如果此时缓存已满,则...原创 2019-12-19 10:39:14 · 309 阅读 · 0 评论 -
【数据结构与算法】10.2 二叉排序树
package com.hblg.binarysorttree;/** * @author i * @create 2019/10/20 9:35 * @Description 二叉排序树 * 二叉排序树特点 任何一个非叶子节点 要求左边节点的值比当前节点的值小 右边节点的值比当前节点的值大 * * */public class BinarySortTreeDemo...原创 2019-10-24 10:01:42 · 326 阅读 · 0 评论 -
【数据结构与算法】10.1、赫夫曼树代码实现
1、基本介绍1)给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree),还有的书翻译为霍夫曼树。2)赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近2、实现思路构成赫夫曼树的步骤:1)从小到大进行排序,将每一个数据,每个数据都是一个节点,每个节点可以看成是一颗最简单的二叉树2...原创 2019-10-17 21:51:42 · 500 阅读 · 0 评论 -
【数据结构与算法】9.3、线索化二叉树
1、线索化二叉树介绍1)n个结点的二叉链表中含有n+l【公式2n-(n-1)=n+1】个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为“线索”)2)这种加上了线索的二叉链表称为线索链表,相应的二又树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线...原创 2019-10-14 22:47:31 · 346 阅读 · 0 评论 -
【数据结构与算法】9.2、顺序存储二叉树
1、2、代码实现package com.hblg.tree;/** * @author i * @create 2019/10/13 18:01 * @Description 顺序存储二叉树 * */public class ArrBinaryTreeDemo { public static void main(String[] args) { ...原创 2019-10-13 20:00:22 · 408 阅读 · 0 评论 -
【数据结构与算法】9.1、二叉树 遍历查找 删除
1、为什么需要树这种数据结构 1).数组存储方式的分析 优点:通过下标方式访问元素,速度快,对于有序数组,还可以使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值会整体移动,效率低。 2).链式存储方式的分析 优点:在一定程度上对数组存储方式有优化(比如 插入一个数据节点,只需要将插入节点直接插入到链表中...原创 2019-10-13 19:56:42 · 376 阅读 · 0 评论 -
【数据结构与算法】8、哈希表 图解、代码实现
1、题目要求看一个实际需求,google公司的一个上机题: 有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址.),当输入该员工的id时,要求查找到该员工的所有信息. 要求:不使用数据库,尽量节省内存,速度越快越好=>哈希表(散列)2、哈希表的基本介绍 散列表(Hash table 也叫哈希表) 是根据关键码值(key value)而直接...原创 2019-10-13 19:22:11 · 486 阅读 · 0 评论 -
【数据结构与算法】2.1、数组队列场景、思路、实现
package com.hblg.queue;import java.util.Scanner;/** * @author i * @create 2019/9/8 18:31 * @Description 队列 * 1、队列的常见场景 * 我们在银行办理银行卡业务的时候,通常都是按序号进行排队进行办理,按照序号的大小从小到大 * 依次办理业务。这就...原创 2019-09-08 21:37:15 · 298 阅读 · 0 评论 -
【数据结构与算法】1、稀疏数组场景、思路、代码实现
package com.hblg.sparsearray;/** * @author i * @create 2019/9/8 12:40 * @Description 稀疏数组使用 * 1、应用场景:在我们玩五子棋的过程中,难免会遇到暂棋盘的操作。我们可以很容易想象可以将棋盘的棋子分布转换成一个二维数组 * 但是,二维数组在一定程度上是有瓶颈的。那就是对于棋子相对分布不是多...原创 2019-09-08 13:32:07 · 739 阅读 · 1 评论 -
Algorithm Gossip: 河内塔
Algorithm Gossip: 河内塔说明河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小 至大排列的...转载 2018-03-18 21:16:43 · 346 阅读 · 0 评论 -
Algorithm Gossip: 费式数列
From Gossip@caterpillarAlgorithm Gossip:费式数列说明Fibonacci为1200年代的欧洲数学家,在他的著作中曾经提到:“若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免 子,一个月后就有两只免子,二个月后有三只免子,三个月后有五只免子(小免子投入生产)......”。如果不太理解这个例子的话,举个图就知道了,注意新生...转载 2018-03-18 21:31:45 · 417 阅读 · 0 评论 -
图解红黑树及Java进行红黑二叉树遍历的方法
红黑树红黑树是一种数据结构与算法课堂上常常提到但又不会细讲的树,也是技术面试中经常被问到的树,然而无论是书上还是网上的资料,通常都比较刻板难以理解,能不能一种比较直观的方式来理解红黑树呢?本文将以图形的方式来解释红黑树的插入与删除操作。对树结构的学习是一个递进的过程,我们通常所接触的树都是二叉树,二叉树简单来说就是每个非叶子节点都有且只有两个孩子,分别叫做左孩子和右孩子。二叉树中有一类特殊的树...转载 2018-03-21 20:47:20 · 3459 阅读 · 0 评论 -
无穷分数
题目描述:无穷的分数,有时会趋向于固定的数字。请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。请填写该浮点数,不能填写任何多余的内容。思路:由题可知,一直除到最后会趋向于固定的数字,并且要保留五位小数,那么我们就可以用几个数字来试试,看看是不是会趋向于固定数字,固定数字是多少这个式子的实现呢,可以用递归来做,也可以用循环来做,我实...转载 2018-03-26 20:32:08 · 547 阅读 · 0 评论 -
【java数据结构】递推解决的汉诺塔问题
在学习数据结构的时候,遇到汉诺塔问题,就写了自己的理解,希望对您有帮助。package com.qxlx.six;/** * 递推解决的汉诺塔问题 * * @author jia * */public class TowerApp { public static void main(String[] args) { doTowers(3, 'A', 'B', 'C'...原创 2018-09-20 15:15:11 · 548 阅读 · 0 评论 -
【数据结构与算法】2.2 数组实现循环队列思路、代码
package com.hblg.queue;import java.util.Scanner;import java.util.concurrent.ForkJoinPool;/** * @author i * @create 2019/9/9 19:19 * @Description 用数组实现环形队列的思路整理 * 环形队列结构分析: * 我们可以...原创 2019-09-09 20:22:10 · 413 阅读 · 0 评论 -
【数据结构与算法】3.1 链表增删改查思路、代码实现
package com.hblg.guigu.linklist;/** * @author i * @create 2019/9/11 18:29 * @Description * 链表特点: * 链表是有序的链表, * 1.链表是以节点的方式来存储的 是链式存储 * 2.每个节点包含data域,next域 指向下一个节点 * 3.链表的...原创 2019-09-12 13:07:27 · 368 阅读 · 0 评论 -
【数据结构与算法】3.2 双向链表增删改查思路、代码实现
package com.hblg.guigu.linklist;/** * @author i * @create 2019/9/19 20:06 * @Description 双向链表的实现 * 双向链表的特点 * 当前节点指向下一个节点next * 当前节点指向上一个节点pre * 当前的数据对象 */public class DoubleLinkedList...原创 2019-09-19 21:58:59 · 370 阅读 · 0 评论 -
【数据结构与算法】3.3 约瑟夫问题思路、代码实现
1、约瑟夫问题2、代码实现package com.hblg.guigu.linklist;/** * @author i * @create 2019/9/20 16:39 * @Description 约瑟夫问题 * 约瑟夫问题分析:针对于此类问题,我们可以通过创建一个单项环形列表来进行解决。 * * */public class Josephu {...原创 2019-09-20 21:13:50 · 520 阅读 · 0 评论 -
【数据结构与算法】4.1 数组实现栈结构
1、栈结构1、栈是先进后出的有序列表。2、(Stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行进行的一种特殊线性表。 允许删除和添加数据的一端是栈顶。固定不变的一端是栈底。2、代码实现package com.hblg.guigu.stack;import java.util.Scanner;/** * @author i * @crea...原创 2019-09-20 21:21:14 · 300 阅读 · 0 评论 -
【数据结构与算法】4.2 栈结构实现中缀表达式
package com.hblg.guigu.stack;/** * @author i * @create 2019/9/26 16:59 * @Description 思路:3+2*9-9+1 对于这样形式的表达值,我们可以创建两个栈来进行存储,一个是数据栈(专门用来存储数据)。另一个用来存储 * 符号(也就是符号栈)。设定一个下标默认指向表达式的最前面 也就是3这个位置 依次遍...原创 2019-09-26 21:17:44 · 364 阅读 · 0 评论 -
【数据结构与算法】4.3 逆波兰表达式
package com.hblg.guigu.stack;import java.util.ArrayList;import java.util.List;/** * @author i * @create 2019/9/27 10:19 * @Description 逆波兰表达式 * (3+4)*5-6 对应的后缀表达式就是3 4 + 5 * 6 - * 1.从左到...原创 2019-09-28 20:27:08 · 328 阅读 · 0 评论 -
【数据结构与算法】6.1 冒泡排序
冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。优化: 因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换...原创 2019-09-29 20:05:46 · 354 阅读 · 0 评论 -
【数据结构与算法】6.2 选择排序
选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。代码实现package com.hblg.sort;import java.util.Arrays;/** * @author i * @create 2019/9/29 19:32 * @Description 选择排序 */public class Sel...原创 2019-09-29 20:08:07 · 390 阅读 · 0 评论 -
【数据结构】递归调用学习
在回顾数据结构的时候,重新学习了一下对递归的使用,希望对您有帮助。package com.qxlx;/** * 循环改递归 * 改为递归的关键是发现逻辑 相似性 * 不要忘记递归出口 * 构造相似性 * 如果没有明显的相似性,,需要主动构造 * 不能相似的原意很可能是缺少参数 * 递归与数学上的的递推公式和类似 * @author jia * * ...原创 2018-09-20 15:18:18 · 579 阅读 · 0 评论