![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 67
java塑造中...
自学java的男孩,转go了。。。
展开
-
十大算法的java实现
目录二分查找非递归算法实现分治算法解决汉诺塔问题动态规划算法解决01背包问题暴力匹配算法解决字符串匹配问题KMP算法解决字符串匹配问题贪心算法解决集合覆盖问题普里姆算法解决最短修路问题克鲁斯卡尔算法解决最短修路问题迪杰斯特拉算法解决最短路径问题弗洛伊德算法解决最短路径问题回溯算法解决骑士周游问题二分查找非递归算法实现public class BinarySearch { public static void main(String[] args.原创 2022-04-03 21:31:22 · 1133 阅读 · 0 评论 -
二叉排序树,平衡二叉树,多叉树,B树,B+树,B*树
二叉排序树二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点public class BinarySortTreeDemo { public static void main(String[] args) { int[] arr = {7, 3, 10, 12, 5, 1, 2, 9}原创 2022-03-25 17:52:57 · 899 阅读 · 0 评论 -
赫夫曼树的创建,赫夫曼编码的原理及使用
一、创建赫夫曼树构成赫夫曼树的步骤:1) 从小到大进行排序, 将每一个数据,每个数据都是一个节点 , 每个节点可以看成是一颗最简单的二叉树2) 取出根节点权值最小的两颗二叉树 3) 组成一颗新的二叉树, 该新的二叉树的根节点的权值是前面两颗二叉树根节点权值的和 4) 再将这颗新的二叉树,以根节点的权值大小 再次排序, 不断重复 1-2-3-4 的步骤,直到数列中,所有的数据都被处理,就得到一颗赫夫曼树代码实现:最后返回值式创建好的赫夫曼树的顶点public static N..原创 2022-03-25 17:39:29 · 1344 阅读 · 0 评论 -
八大排序算法的java实现
目录测试80000数据排序的时间的代码:耗时在标题上写着,这个和个人计算机硬件有关,仅参考一、冒泡排序:9521ms二、选择排序:2444ms三、插入排序:542ms四、希尔排序:118ms五、快速排序:15ms六、归并排序:13ms七、基数排序(桶排序):31ms相关术语解释:1)稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;2)不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;3)内排序:所有排序操作都..原创 2022-03-17 20:46:22 · 485 阅读 · 0 评论 -
递归的应用:迷宫回溯游戏,八皇后问题
递归机制:递归需要遵守的重要规则1)执行一个方法时,就创建一个新的受保护的独立空间(栈空间)2)方法的局部变量是独立的,不会相互影响, 比如n变量3)如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据.4)递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError,死龟了:)当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕迷宫问题..原创 2022-03-12 20:22:19 · 5114 阅读 · 0 评论 -
中缀表达式转后缀表达式 逆波兰计算器的实现(只有加减乘除和括号)
目录中缀表达式转后缀表达式代码实现:将中缀表达式转成对应的List(因为直接扫描字符串不方便,我们选择转为ArrayLIst进行遍历)将得到的中缀表达式对应的List => 后缀表达式对应的List自定义加减乘除的优先级完成对逆波兰表达式的运算运算结果:中缀表达式转后缀表达式代码实现:将中缀表达式转成对应的List(因为直接扫描字符串不方便,我们选择转为ArrayLIst进行遍历)// s="1+((2+3)×4)-5"; public原创 2022-03-12 20:07:13 · 119 阅读 · 0 评论 -
约瑟夫、约瑟夫环问题
目录Josephu 问题提示:构建一个单向的环形链表思路创建节点:(单向环形链表)先创建第一个节点添加元素小孩出圈遍历环形链表Josephu 问题Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头结点的循环链表来...原创 2022-03-12 19:42:03 · 7435 阅读 · 0 评论 -
单链表的使用和双向链表的使用
目录自定义节点自定义单链表中的功能与方法:添加一个新的节点根据排名(英雄编号)将英雄插入到指定位置实现排序(如果重复,显示失败,给出说明)修改元素(根据编号来定位元素,编号不能修改)删除一个节点获取到单链表的节点个数获取单链表的倒数第K个节点显示链表元素(遍历)将单链表反转利用栈来实现逆序打印自定义节点class HeroNode { public int no; public String name; public ..原创 2022-03-07 21:22:42 · 355 阅读 · 0 评论 -
数组模拟队列,数组模拟环形队列,数组模拟栈
使用数组实现队列class ArrayQueue { private int[] arr;//该数组用于存储数据,模仿队列 private int maxSize;//记录数组的最大空间 private int front;//用来指向数组的第一个元素的前一个位置,使得刚开始指向为空,当有元素加进来时,front加一指向元素 private int rear;//用来指向元素的最后一个,包含(maxSize-1) // 创建数组队列 publi.原创 2022-03-07 21:04:45 · 128 阅读 · 0 评论 -
以五子棋为背景的二维数组和稀疏数组(节省空间)的转换、用io流实现本地磁盘的存储
用二维数组来表示一个棋盘:创建一个原始的二维数组 11*110表示没有棋子 1表示黑子 2表示蓝子int[][] chessArray = new int[11][11]; chessArray[1][2] = 1; chessArray[2][3] = 2; chessArray[6][6] = 2; for (int[] i : chessArray) { for (int e : i) {原创 2022-03-07 20:57:14 · 294 阅读 · 0 评论