![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
数据结构
JH灰色
☠
展开
-
浅谈哈希函数
文章目录1.JDK 1.8之前的哈希表2. 解决哈希冲突3.JDK1.8的哈希冲突解决方案4. 哈希函数1.JDK 1.8之前的哈希表上图解析哈希算法:哈希表就是将(key-value)通过哈希算法演算出来。首先通过哈希算法将key生成哈希值(哈希值必须是整数),再让key的哈希值和数组的大小(table.length)进行相关运算,得出上图的索引值,1.8之前的table里存放数组桶下标(索引值)和value(数据)。这就是key—>value.2. 解决哈希冲突哈希冲突:相同的key原创 2020-06-18 14:22:31 · 643 阅读 · 0 评论 -
【数据结构:树的应用】:(AVL树)平衡二叉树(左旋转,右旋转,双旋转)
文章目录1.平衡二叉树介绍2.左旋转3.右旋转4.双旋转5.完整代码1.平衡二叉树介绍AVL树是在二叉排序树的基础上,所以AVL树是按照二叉排序树的规则排列的:即左节点的值小于当前节点的值,右节点的值大于当前节点的值。2.左旋转思路图解:总结口诀:排好最终AVL树图,再按上述思路来编写代码右子树的高度高于左子树的高度(差值大于1)时,需要左旋转。以最长的右子树的高度那边画一条线,将左边4->3移下来,6移上去作为新的根节点,原6后面一条线的节点顺序不变,就是旋转。原先6挂的5就移原创 2020-05-12 12:45:12 · 261 阅读 · 0 评论 -
【数据结构:树的应用】:二叉排序树--删除节点
文章目录1.思路分析2.代码实现1.思路分析三种删除节点情况:2.代码实现public class BinarySortTreeDemo { public static void main(String[] args) { int[] arr = {7, 3, 10, 12, 5, 1, 9,2}; BinarySortTree binarySortTree = new BinarySortTree(); //循环添加节点到二叉排序树原创 2020-05-12 12:03:17 · 222 阅读 · 0 评论 -
【数据结构:树的应用】:二叉排序树--创建和遍历
文章目录1.二叉排序树介绍2.二叉排序树创建和遍历1.二叉排序树介绍2.二叉排序树创建和遍历创建二叉排序树思路:遍历:采用中序遍历public class BinarySortTreeDemo { public static void main(String[] args) { int[] arr = {7, 3, 10, 12, 5, 1, 9}; BinarySortTree binarySortTree = new BinarySortTree(原创 2020-05-12 11:55:35 · 460 阅读 · 0 评论 -
【数据结构:树的应用】:赫夫曼树
1. 赫夫曼树基本介绍赫夫曼树需要先将数组按照从小到大排序,然后操作public class HuffmanTree { public static void main(String[] args) { int arr[] = {13,7,8,3,29,6,1}; Node root = createHuffmanTree(arr); preOrder(root); } //创建赫夫曼树的方法 public s原创 2020-05-12 11:35:50 · 135 阅读 · 0 评论 -
【数据结构:排序算法】--堆排序
文章目录1. 堆排序的基本介绍2. 堆排序思想3. 代码实现1. 堆排序的基本介绍2. 堆排序思想3. 代码实现package com.atguigu.树;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date;public class HeapSort {...原创 2020-04-10 19:08:05 · 239 阅读 · 0 评论 -
【数据结构:树】线索化二叉树---实现与遍历
文章目录1. 线索化二叉树介绍2. 代码实现线索化二叉树3. 线索化二叉树的遍历1. 线索化二叉树介绍2. 代码实现线索化二叉树package 线索化二叉树;public class ThreadBinaryTreeDemo { public static void main(String[] args) { //测试 HeroNode ro...原创 2020-04-09 18:41:59 · 152 阅读 · 0 评论 -
【数据结构:树】顺序存储二叉树---遍历
这里只要把该语句System.out.println(arr[index]);的顺序放在左、右子树或节点遍历的前、中、后就可以依次实现顺序存储二叉树的遍历。虽然这里遍历的是数组,但是数组的遍历顺序还是和二叉树遍历顺序一样。public class ArrBinaryTreeDemo { public static void main(String[] args) { ...原创 2020-04-09 18:37:02 · 151 阅读 · 0 评论 -
【数据结构:树】二叉树---节点的删除
这里的删除节点,如果是含有左右子节点的节点删除,会删除整个节点树,到后期的知识会只删除该节点,而添加子节点。如:删除3节点,这里会删除3、5、4整个右子节点树;后面的知识会只删除3节点。public class BinaryTreeDemo { public static void main(String[] args) { //创建一个二叉树 Bi...原创 2020-04-09 18:28:52 · 314 阅读 · 0 评论 -
【数据结构:树】二叉树---前、中、后序查找
public class BinaryTreeDemo { public static void main(String[] args) { //创建一个二叉树 BinaryTree binaryTree = new BinaryTree(); //创建需要的节点 HeroNode root = new HeroNode(...原创 2020-04-09 18:21:56 · 141 阅读 · 0 评论 -
【数据结构:树】二叉树---前、中、后序遍历
文章目录1. 树2. 二叉树3. 二叉树的遍历4. 代码实现1. 树树的常用术语2. 二叉树3. 二叉树的遍历根据父节点的遍历顺序来定义前、中、后序遍历4. 代码实现public class BinaryTreeDemo { public static void main(String[] args) { //创建一个二叉树 B...原创 2020-04-09 18:19:41 · 167 阅读 · 0 评论 -
【数据结构】哈希表
1. 哈希表基本介绍2. 思路分析public class HashTableDemo { public static void main(String[] args) { //创建哈希表 HashTable hashTable = new HashTable(7); //写一个简单的表单 String key = ...原创 2020-04-07 11:51:21 · 120 阅读 · 0 评论 -
【数据结构】--查找算法
文章目录1、线性查找算法2、 二分查找算法1. 递归方式2. 非递归方式3、插值查找算法4、斐波那契查找算法1、线性查找算法/** * 找到一个就返回 */public static int seqSearch(int arr[],int value){ //线性查找逐一对比,发现相同,返回下标 for(int i=0;i<arr.length;i++){ ...原创 2020-04-07 11:49:20 · 139 阅读 · 0 评论 -
【数据结构:排序算法】---基数排序算法
文章目录1.执行过程2、基数排序思想3.代码1.执行过程之前学习的冒泡、选择、插入、归并、快速、希尔、堆排序,都是基于比较的排序,平均时间复杂度目前最低是 O(nlogn)◼ 计数排序、桶排序、基数排序,都不是基于比较的排序它们是典型的用空间换时间,在某些时候,平均时间复杂度可以比 O nlogn 更低。◼ 基数排序非常适合用于整数排序(尤其是非负整数),因此本课程只演示对非负整数进行基...原创 2020-04-06 15:48:23 · 232 阅读 · 0 评论 -
【数据结构:排序算法】---归并排序算法
文章目录1、执行流程2. 算法思想:3. 代码1、执行流程先分解再合并可以先进行左分解,直到做分解到一个数,不能再分解,然后合并;之后,右分解,再合并,左分解…,反正就是左分解中有右分解,右分解有做分解,期间还有合并。这种方式就是定义一个临时数组,合并的时候将左右两块子系列合并到这个临时数组temp中,最后将这个临时数组的元素拷贝到array中。但是有一个特别注意的点,合并的时候,左边的...原创 2020-04-06 15:22:02 · 177 阅读 · 0 评论 -
【数据结构:排序算法】--快速排序算法
文章目录1、执行流程(恋上好理解)2. 尚硅谷快速排序1、执行流程(恋上好理解)恋上是以每段的首位为轴点来进行分配public class _6_快速排序算法 { public static void main(String[] args) { int[] arr = {10,9,897,28,90,56,34,34,2,456}; quickS...原创 2020-04-06 15:08:25 · 424 阅读 · 0 评论 -
【数据结构:排序算法】--希尔排序
文章目录1.恋上数据结构思想2.希尔排序(尚硅谷)本例的希尔排序就是插入排序的改版。有希尔排序交换法和希尔排序位移法,位移法常用。看了2个视频讲解该算法:1.恋上数据结构思想希尔排序把序列看作是一个矩阵,分成 ???? 列,逐列进行排序???? 从某个整数逐渐减为1,当 ???? 为1时,整个序列将完全有序。2.希尔排序(尚硅谷)(1)、希尔排序思想:主要就是分组,将数据分成组插入,如图插...原创 2020-04-06 14:56:53 · 436 阅读 · 0 评论 -
【数据结构:排序算法】--插入排序算法
文章目录1. 执行流程2.插入排序的思想3. 代码1. 执行流程插入排序非常类似于扑克牌的排序,扑克牌抓拍后按顺序插入相应的位置。1、执行流程:① 在执行过程中,插入排序会将序列分为2部分✓ 头部是已经排好序的,尾部是待排序的② 从头开始扫描每一个元素✓ 每当扫描到一个元素,就将它插入到头部合适的位置,使得头部数据依然保持有序动画演示很重要,仔细观察。2.插入排序的思想(1)、...原创 2020-04-06 14:34:26 · 256 阅读 · 0 评论 -
【数据结构:排序算法】--选择排序算法
文章目录1.执行流程2.选择排序的思想3.选择排序算法实现1.执行流程① 从序列中找出最小的那个元素,然后与最第一个元素交换位置✓ 执行完一轮后,第一个元素元素就是最小的元素② 忽略 ① 中曾经找到的最小元素,重复执行步骤 ①2.选择排序的思想(1) 选择排序1. 第1次从arr[0]~arr[n-1]中选取最小的值与arr[0]交换2. 第2次从arr[1]~arr[n-1]中...原创 2020-04-05 09:58:41 · 359 阅读 · 0 评论 -
【数据结构】时间复杂度
文章目录1. 排序算法介绍2. 度量一个程序执行时间的两种方法3. 算法的时间复杂度3.1 常数项可以忽略3.2 低次项可以忽略3.3 对于二次函数,系数可以忽略3.4 时间复杂度概念3.5 常见的时间复杂度4. 常见的时间复杂度举例5. 平均时间复杂度和最坏时间复杂度1. 排序算法介绍2. 度量一个程序执行时间的两种方法3. 算法的时间复杂度3.1 常数项可以忽略3.2 低次项...原创 2020-04-05 09:39:50 · 170 阅读 · 0 评论 -
【数据结构:排序算法】--冒泡排序
文章目录排序算法的种类1. 冒泡排序算法2.冒泡思想3.算法实现排序算法的种类为了便于理解,最好debug处理每一步1. 冒泡排序算法1、执行流程:① 从头开始比较每一对相邻元素,如果第1个比第2个大,就交换它们的位置✓ 执行完一轮后,最末尾那个元素就是最大的元素② 忽略 ① 中曾经找到的最大元素,重复执行步骤 ①,直到全部元素有序2.冒泡思想(1)对要排序的序列从前到后依次...原创 2020-04-05 09:36:51 · 592 阅读 · 0 评论 -
【数据结构】递归---八皇后问题
文章目录1. 八皇后问题2. 八皇后问题分析3. 代码实现4. 结果分析1. 八皇后问题2. 八皇后问题分析3. 代码实现public class Queue8 { //定义一个max,表示共有对少个皇后 int max = 8; //定义数组array,保存皇后放置位置的结果 int[] arr = new int[max]; static i...原创 2020-04-03 23:04:01 · 246 阅读 · 0 评论 -
【数据结构】递归---迷宫
文章目录1. 递归调用2. 迷宫问题1. 递归调用递归调用机制:遵守规则:2. 迷宫问题1. 策略:按照下右上左代码实现public class MiGong { public static void main(String[] args) { //创建一个二维数组,模拟迷宫 int[][] map = new int[8][7]; ...原创 2020-04-03 23:01:35 · 168 阅读 · 0 评论 -
【数据结构】 栈----中缀表达式转后缀表达式并计算表达式结果
文章目录1.具体步骤2. 思路分析3. 代码分析1.具体步骤2. 思路分析将中缀表达式转换为后缀表达式:1+((2+3)*4)-53. 代码分析public class PolanNotation { public static void main(String[] args) { //完成一个将中缀表达式转后置表达式的功能 //1. 1+((...原创 2020-04-03 15:40:28 · 230 阅读 · 0 评论 -
【数据结构】栈---逆波兰计算器(后缀表达式)
文章目录1. 波兰表达式(前缀表达式)2. 中缀表达式3. 逆波兰表达式(后缀表达式)4. 逆波兰计算器1. 波兰表达式(前缀表达式)2. 中缀表达式3. 逆波兰表达式(后缀表达式)4. 逆波兰计算器public class PolanNotation { public static void main(String[] args) { //先定义逆波...原创 2020-04-03 15:39:29 · 144 阅读 · 0 评论 -
【数据结构】栈---使用栈实现综合计算器(中缀表达式)
1.使用栈实现综合计算器public class Caculator { public static void main(String[] args) { //创建一个表达式 String expression = "70+20*6-2"; //创建两个栈,数栈和符号栈 ArrayStack2 numStack = new...原创 2020-04-03 15:38:31 · 192 阅读 · 0 评论 -
【数据结构】栈---- 使用数组模拟栈
文章目录1. 栈的介绍2. 使用数组来模拟栈1. 栈的介绍入栈时,栈底不动,栈顶动:出栈时,栈底不动,栈顶动:栈的应用场景:2. 使用数组来模拟栈import java.util.Scanner;public class ArrayStackDemo { public static void main(String[] args) { ArrayS...原创 2020-04-03 15:35:38 · 169 阅读 · 0 评论 -
【数据结构】单向环形链表:约瑟夫问题
文章目录1.单向环形链表的应用场景:2.环形单链表的创建与遍历:3.创建一个环形单链表的出栈队列:1.单向环形链表的应用场景:2.环形单链表的创建与遍历:public class Josepfu { public static void main(String[] args) { CiecleSingleLinkedList ciecleSingleLinkedL...原创 2020-03-31 20:49:26 · 198 阅读 · 0 评论 -
【数据结构】双向链表(增删改查)
双向链表的增删改查同单向链表的增删改查比较:头结点:head = new HeroNode(0,"","");真正的节点是头结点后面的节点进行增删改查增(添加):双向链表的增是HeroNode temp = head;单向链表的增是HeroNode temp = head删:双向链表自我删除, HeroNode temp = head.next;单向链表需要找到待删除节点的前一节点,H...原创 2020-03-31 20:34:12 · 518 阅读 · 0 评论 -
【数据结构】从尾到头打印单链表(百度面试题)
通过方式2:栈的方式逆序打印;方式1:反转较复杂,破坏空间结构 //方法:利用栈这个数据结构将各个节点压如到栈中,利用栈的现金后出的特点,实现逆序打印 public static void reversePrint(HeroNode head){ if(head.next==null){ return; } ...原创 2020-03-31 14:42:56 · 225 阅读 · 0 评论 -
【数据结构】单链表的反转(难:腾讯面试题)
实现单链表的反转真的是要被这题搞死了,这个问题看了几个小时,刚开始怎么都理解不了,还是很有难度的题目整体分析:代码实现://方法:将单链表进行反转public static void reverseList(HeroNode head){ //如果当亲链表为空或者只有一个节点,直接返回 if(head.next==null ||head.next.next==null...原创 2020-03-31 14:40:53 · 363 阅读 · 0 评论 -
【数据结构】求单链表中有效节点的个数以及倒数第k个节点(新浪面试题)
下面的习题是基于上个博客做的:1. 求单链表中有效节点的个数 //方法:获取到单链表的节点的个数(如果是带头节点的链表,需要不统计头结点) public static int getLength(HeroNode head){// if(head.next==null){//空链表// return 0;// } ...原创 2020-03-31 14:39:39 · 304 阅读 · 0 评论 -
【数据结构】单链表-修改节点和删除节点
文章目录1. 修改节点2. 删除节点单链表按照节点编号来修改节点和删除节点1. 修改节点修改节点的代码://修改节点信息,根据no编号来修改public void update(HeroNode newHeroNode){ //判断是否为空 if(head.next==null){ System.out.println("链表为空"); return; ...原创 2020-03-31 14:34:46 · 799 阅读 · 0 评论 -
【数据结构】单链表-添加:不按顺序和按顺序
文章目录1. 链表介绍2. 单链表的应用实例2.1在添加英雄时,直接添加到链表的尾部2.2 在添加英雄时,根据排名将英雄添加到指定的位置1. 链表介绍2. 单链表的应用实例2.1在添加英雄时,直接添加到链表的尾部思路分析:辅助变量遍历的细节分析:public class SingleLinkedListDemo { public static void main(St...原创 2020-03-31 14:28:57 · 287 阅读 · 0 评论 -
数据结构:队列
文章目录1. 对列介绍2. 数组模拟队列3. 数组模拟环形队列1. 对列介绍2. 数组模拟队列当我们加数据的时候,front不变,rear会不断的加1,当我们取数据的时候,front也会不断的加1,rear不变。数组模拟队列代码:package com.atguigu.queue;import java.util.Scanner;public class ArrayQueueD...原创 2020-03-29 22:26:23 · 209 阅读 · 0 评论 -
数据结构:稀疏数组
文章目录1.稀疏数组2. 互相转换分析3.原数组和稀疏数组相互转换4. 课后习题1.稀疏数组原数组—>稀疏数组:稀疏数组就3列(除0行外):原数组的行,列,非0值第0行:表示原数组有6行7列,8个非0的值。剩余的行:记录原数组非0的值所在的行、列、值2. 互相转换分析3.原数组和稀疏数组相互转换二维数组结构:public class SparseArray { ...原创 2020-03-29 22:11:54 · 212 阅读 · 0 评论