数据结构与算法
是谁注册了我的2052
给我2052
展开
-
图的最小生成树
一:最小生成树连接每个顶点最少的连线,最小生成树的数量总是比顶点的数量少1二:代码实现1.创建栈public class Stack { //栈的底层实现是数组 long[] arr ; //表示栈顶索引 int top; //构造方法 public Stack(){ arr = new long[10]; ...原创 2020-01-31 12:07:36 · 97 阅读 · 0 评论 -
图的搜索(广度优先)
一:广度优先规则1.访问下一个邻接的未访问过的顶点,这个顶点必须是当前顶点的邻接点,标记他,并把它插入到队列中2.如果无法执行规则1,那么就从队列头取出一个顶点,并使其作为当前顶点3.当队列为空不能执行规则2时,就是搜索完成时.二:代码实现1.创建队列public class Quene { //队列底层也是数组 long[] arr; //队列长度 ...原创 2020-01-31 01:21:46 · 79 阅读 · 0 评论 -
图的搜索(深度优先)
一:图的搜索是指从一个指定顶点可以到达哪些顶点二:搜索的分类1.深度优先 DFS2.广度优先 BFS三:深度优先搜索规则1.如果可能,访问一个邻接的未访问的顶点,标记它,并把它放进栈中2.当不能执行规则1的时候,如果栈不能为空,就从栈中弹出一个顶点3.当不能执行规则1和规则2的时候,就完成了整个搜索过程四:深度优先代码实现1.创建栈public class Stack ...原创 2020-01-31 00:28:37 · 103 阅读 · 0 评论 -
图的基本概念
一:什么是图图是一种和树相像的数据结构,通常有一种固定的形状,这是由物理或抽象的问题来决定的二:邻接如果两个顶点被同一条边连接,就称这两个顶点是邻接的1.邻接表顶点该顶点连接的其他顶点AB->C->DBA->CCA->BDA->EED2.邻接矩阵ABCDEA11...原创 2020-01-30 22:00:47 · 73 阅读 · 0 评论 -
哈希表之链地址法
作用: 1.解决压缩可选值的索引冲突问题 2.解决由于开放地址法的先插入数据占据后插入数据的索引位置问题一:什么是链地址法在哈希表每个单元中设置链表.某个数据项的关键字还是像通常一样映射到哈希表的单元中,而数据项本身插入到单元的链表中二:代码实现1.创建链表节点Nodepublic class Node { //数据域 Person data; //指针域...原创 2020-01-30 20:31:21 · 527 阅读 · 0 评论 -
哈希表之开放地址法
作用:解决因为幂连乘之后的压缩可选值二产生的索引冲突问题.一:什么是开放地址法当冲突发生的时候,通过查找数组的一个空位,并将数值填充进去,而不再是使用哈希函数得到的数组下标,就叫做开放地址法二:代码实现1.创建JavaBean类public class Person { private String key; private String name; pub...原创 2020-01-30 15:51:45 · 576 阅读 · 2 评论 -
哈希表
一:什么是哈希表哈希表是基于数组来实现的一种数据结构,提高了快速的插入和查找操作二:哈希化1.直接将关键字作为索引(关键字是数字类型)2.将单词转换成索引(关键字是string类型)2.1将字母转换成ASCII码,然后进行相加存在风险: 比如: key1=abc , ,key2=bbb ;key1和key2通过将字母转化成ascii码后相加的值相等2.2幂的连乘127^2 + 22...原创 2020-01-30 13:13:37 · 216 阅读 · 0 评论 -
红黑树简单概念
一:二叉树的问题普通的二叉树优势在于可以快速的插入 , 删除和查找 , 仅仅对于随机数来说.如果插入的是有序的,就会变得非常慢二:平衡树和非平衡树插入随机的数据–平衡树插入有序的数据–非平衡树三:红黑规则1.每个节点不是红色就是黑色2.根总是黑色的3.如果节点是红色的,那么它的子节点必须是黑色的4.从根节点到叶子节点的每条路径,必须包含相同数目的黑色节点四:纠正树的不和规则情...原创 2020-01-29 01:01:09 · 102 阅读 · 0 评论 -
删除二叉树节点
一:删除节点删除节点比较复杂步骤:1.找到需要被删除的节点2.判断该节点的类型2.1该节点是叶子节点,直接修改父节点的引用值为null即可2.2该节点有一个子节点,修改父节点得引用,将该节点的父节点的应用指向该节点的子节点(相当于隔开该节点)2.3该节点有两个子节点,需要是由该节点的中序后继来替代该节点节点的中序后继:指的是比该节点大的且是最接近该节点的节点二:代码实现1....原创 2020-01-28 23:39:36 · 119 阅读 · 0 评论 -
遍历二叉树(前序/中序/后序)
一:遍历树遍历树是根据一个特定的顺序访问数的每一个节点,根据顺序的不同又可以分为 前序 , 中序 , 后序二:前序遍历(可以实现排序)1.访问根节点2.前序遍历左子树3.前序遍历右子树三:中序遍历1.中序遍历左子树2.访问根节点3.中序遍历右子树四:后序遍历1.后序遍历左子树2.后序遍历右子树3.访问根节点五:代码实现1.创建节点Nodepublic clas...原创 2020-01-28 18:35:40 · 74 阅读 · 0 评论 -
二叉树基本操作(插入数据/查找数据)
一:插入节点从根节点开始查找一个相应的节点,这个节点将成为新插入节点的父节点.当父节点找到后,通过判断新节点的值比父节点的值的大小来决定是链接左节点还是右节点二:查找节点从根节点开始查找,如果查找的节点值比当前节点小,则继续查找其左子树,否则查找其右子树三:代码实现1.新建Node节点节点的数据可以有多个,也可以是对象(示例每个节点只有一个数据)public class Node ...原创 2020-01-28 15:05:32 · 1499 阅读 · 0 评论 -
二叉树基本概念
一:为什么要使用树因为有序数组的插入数据和删除数太慢链表查找数据太慢而树的优点就是: 能够快速查找 , 删除以及插入数据二:树的结构三:路径顺着节点之间的边,从一个节点到另外一个节点,所经过的节点顺序排列就是路径四:根树最上面的节点就是根节点,一棵树只有一个根节点,而且从根节点到任何一个节点都有且只有一条路径五:父节点每个节点向上链接到的节点就是该节点的父节点六:子节点每...原创 2020-01-28 15:01:30 · 106 阅读 · 0 评论 -
快速排序
一:快速排序将一个数组划分为两个子数组,然后通过递归调用自身为每个子数组又进行划分,一直划分下去,最后进行排序二:如何划分数组设置关键字,把比关键字小的作为一个数组,把比关键字大的作为另外一个数组三:如何自动设置关键字可以设置数组最右端的数据为关键字四:划分数组算法图解五:代码实现public class QuickSort { public static void ma...原创 2020-01-28 00:10:21 · 110 阅读 · 0 评论 -
希尔排序
一:什么是希尔排序希尔排序基于插入排序,并添加了新特性,提高效率.二:插入排序的缺陷加入一个很小的数值排在最末尾,如果需要正确排序,则需要将所有的数据都向右移动才可以将小的数据排到前面缺陷: 移动次数太多三:希尔排序的优点加大排序中元素之间的间隔,对这些间隔的元素进行插入排序,使数据可以大幅度移动,当完成间隔排序后,希尔排序会减少间隔之间的元素再进行排序,依次进行下去四:间隔计算...原创 2020-01-27 19:15:02 · 109 阅读 · 0 评论 -
递归高级应用(汉诺塔)
一:汉诺塔问题所有的盘子刚开始都是放在塔座A上,要求将所有的盘子从塔座A移动到塔座C上,每次只能移动一个盘子,任何盘子不能放在比自己小的盘子上.二:移动子树把上层的全部看成一个整体–子树 , 每次移动后子树都在减小,最后子树剩下一个,再放到C座即可三:递归的解决public class HanNuoTa { public static void main(String[] a...原创 2020-01-27 15:43:21 · 162 阅读 · 0 评论 -
递归应用(三角数字/斐波那契数列)
一:递归1.什么是递归自己调用自己public class Recursion { public static void main(String[] args) { //递归就是自己调用自己 //test1(); //stsckoverflowerror test2(0); } //递归示范 public ...原创 2020-01-27 12:04:00 · 142 阅读 · 0 评论 -
双端链表和双向链表
一:双端链表1.什么是双端链表?链表中保存着对最后一个链节点引用的链表就是双端链表.2.从头部插入要对链表进行判断,如果为空则设置尾节点为新增节点3.从尾部插入如果链表为空,则直接设置头节点为新增节点,否则设置尾节点的后一个节点为新增节点4.从头部删除节点判断头节点是否指向下一个节点,如果没有则设置节点为null1.创建双端链表节点Node//头节点public class ...原创 2020-01-27 00:39:59 · 229 阅读 · 0 评论 -
单向链表
一:单向链表1.创建链表节点Node//链节点: 包括 数据域和节点域public class Node { //数据域:保存当前节点的数据 long data; //指针域:保存下一个节点的引用 Node next; //构造方法 public Node(long value){ this.data = value; ...原创 2020-01-26 18:12:00 · 89 阅读 · 0 评论 -
栈和队列
一:栈的构造和应用先进后出public class Stack { //栈的底层实现是数组 long[] arr ; //表示栈顶 int top; //构造方法 public Stack(){ arr = new long[10]; top = -1; //初始化栈顶...原创 2020-01-26 12:17:24 · 84 阅读 · 0 评论 -
冒泡排序/选择排序/直接插入排序
一:冒泡排序public class MaoPao { public static void main(String[] args) { long[] arr = {1,2,3,1,2,0,9,8,7,5,3,1}; long[] arr2 = {0,2,3,1,2,0,9,8,7,5,3,1}; long flag; ...原创 2020-01-26 02:10:51 · 83 阅读 · 0 评论 -
数组
一:数组基础知识public class demo01 { public static void main(String[] args) { //1.新建数组.指定数组长度 long[] arr1 = new long[10]; //给数组赋值 arr1[0] = 8; //2.新建数组,指定数组元素 ...原创 2020-01-25 15:50:10 · 78 阅读 · 0 评论