数据结构
田埂、
不惊于荣辱,不借于鼓吹,正余之心,穷于之力
展开
-
二叉树
二叉树二叉树简介二叉树定义二叉树特殊类型二叉树性质java代码实现二叉树简介二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分 。二叉树定义二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根原创 2021-03-31 10:15:13 · 69 阅读 · 0 评论 -
哈夫曼树
给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。原创 2021-03-31 10:01:45 · 104 阅读 · 1 评论 -
线索二叉树
线索二叉树中的线索能记录每个结点前驱和后继信息。为了区别线索指针和孩子指针,在每个结点中设置两个标志leftType和rightType。当leftType和rightType为0时,left和right分别是指向左孩子和右孩子的指针;否则,left是指向结点前驱的线索(pre),right是指向结点的后继线索(suc)。由于标志只占用一个二进位,每个结点所需要的存储空间节省很多。原创 2021-03-31 09:47:44 · 82 阅读 · 0 评论 -
顺序二叉树
二叉树的顺序存储是将二叉树的所有结点,按照一定的次序,存储到一片连续的存储单元中。原创 2021-03-31 09:00:29 · 105 阅读 · 0 评论 -
差值查找算法
java实现插值查找算法插值查找算法原理介绍:1.插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找。2.将折半查找中的求mid索引的公式进行优化,key 代表查找的值findValue公式为:int midIndex = left + (right- left ) * (key - arr[left ]) / (arr[right]- arr[left ]);对应代码:int mid=left +(right-left)*(findval-arr[left])/(arr原创 2021-03-30 16:38:10 · 213 阅读 · 0 评论 -
斐波那契数列查找算法
java实现斐波那契数列查找算法什么是斐波那契数列?斐波那契数列指的是这样一个数列: 0, 1, 1, 2, 3, 5, 8, 13, 21…特别指出: 第0项是0,第1项是第一个1这个数列从第三项开始,每一项都等于前两项之和。斐波那契公式: F(k)=F(k-1)+F(k-2) 提示:F(1)=1 F(2)=1基本原理:斐波那契查找原理与二分查找算法相似,仅仅改变了中间结点(mid)的位置,mid不再是中间或插值得到,而是位于黄金分割点附近,即mid=left + fibona[k -原创 2021-03-30 16:19:06 · 257 阅读 · 0 评论 -
java实现二分查找(折半查找)的算法
java实现二分查找的算法二分查找 又叫折半查找,是一种简单又快速的查找算法。它对要查找的序列有两个要求:一是该序列必须是有序的(即该序列中的所有元素都是按照大小关系排好序的,升序和降序都可以,本文假设是升序排列的),二是该序列必须是顺序存储的。二分查找算法的原理如下:如果待查序列为空,那么就返回-1,并退出算法;这表示查找不到目标元素。如果待查序列不为空,则将它的中间元素与要查找的目标元素进行匹配,看它们是否相等。如果相等,则返回该中间元素的索引,并退出算法;此时就查找成功了。原创 2021-03-30 16:01:59 · 272 阅读 · 0 评论 -
java利用回溯实现八皇后问题
八皇后问题八皇后问题,是由国际西洋棋棋手马克斯·贝瑟尔于1848年提出的问题,是回溯算法的典型案例。问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。回溯算法求解八皇后问题将列A的皇后放在第一行以后,列B的皇后放在第一行已经发生冲突。这时候不必继续放列C的皇后,而是调整列B的皇后到第二行,继续冲突放第三行,不冲突了才开始进入列C。如此可依次放下列A至E的皇后,如图a所示。将每个皇后往右边横向、斜向攻击的点位原创 2021-03-30 13:17:36 · 134 阅读 · 0 评论 -
java递归实现汉诺塔问题
java递归实现汉诺塔问题问题:汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。思路:一、如果只有一个圆盘的时候,直接把圆盘从A移动到C即可二、如果有两个或两个以上圆盘的时候需要三步:1.把前n-1个圆盘看成一个整体,把这个整体原创 2021-03-29 22:09:52 · 177 阅读 · 0 评论 -
约瑟夫环问题java实现
java利用循环链表实现约瑟夫环问题约瑟夫环问题的起源来自犹太历史学家约瑟夫和他的朋友以及39其余的犹太人,总共41人为了躲避敌人,藏在一个山洞中,39个犹太人决定宁愿死也不被敌人抓到,于是决定自杀,所有人排成一个圈,由第一个人开始报数,每当数到3,就自杀。这个游戏接着从自杀的位置开始,还是从1数到3。依次类推,约瑟夫将朋友和自己安排在了16和31的位置,最后顺利逃过了,自杀这一劫,因为最后就剩他一个人了。环形链表遍历的时候会是一个无限循环,如果链表中的数据逐渐减少,不控制终究会一个不剩,这又不原创 2021-03-29 21:20:28 · 422 阅读 · 0 评论 -
java实现双向链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向**直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点原创 2021-03-29 20:56:52 · 93 阅读 · 0 评论 -
java实现单链表以及各种功能
链表的结构很简单,就是一个个节点连接在一起,形成一个完整的链条,每个节点包含2部分,数据域,和一个指向下一个节点引用的指针next。原创 2021-03-29 20:46:36 · 109 阅读 · 0 评论 -
java哈夫曼编码实现压缩与解压
java哈夫曼编码实现文件压缩与解压原创 2021-03-29 19:52:58 · 541 阅读 · 0 评论 -
java实现HashTable
有一个公司, 当有新员工报道的时候, 要求将该员工的信息保存(id, 姓名等), 当输入该员工的的id时, 要求查找该员工的所有信息。注: 不要使用数据库, 尽量节省内存, 速度越快越好原创 2021-03-28 17:33:07 · 743 阅读 · 0 评论 -
迷宫问题 最短路径(java)实现
迷宫问题利用java的宽度优先搜索实现寻找最短路径题目描述: int[][] map= { {0, 1, 0, 0, 0}, {0, 0, 0, 1, 0}, {1, 1, 0, 0, 0}, {0, 0, 0, 0, 1}, {0, 0, 0, 0, 0}};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角原创 2021-03-25 12:28:51 · 1895 阅读 · 3 评论 -
java实现图的深度优先搜索(DFS)和广度优先搜索(BFS)
java实现图的深度优先搜索和广度优先搜索深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.宽度优先搜索算法(又称广度优先搜索),其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。举例说明之:下图是一个无向图,如果我们从A点发起深度优先搜索(以下的访问次序并不是唯原创 2021-03-24 11:52:58 · 806 阅读 · 0 评论 -
java中时间日期格式转换Date与String转换
java中时间日期格式转换Date与String转换话不多说,都在代码里面了,秒看懂import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class myData { public static void main(String[] args) { String strTime = ""; Date data = n原创 2021-03-23 22:47:39 · 118 阅读 · 0 评论 -
java实现二叉排序树
java实现二叉排序树二叉排序树(Binary Sort Tree)或者是一颗空树;或者是具有如下性质的二叉树:(1) 若它的左子树不空,则 左子树上所有结点的值 均小于它的根结点的值;(2) 若它的右子树不空,则 右子树上所有结点的值 均大于它的根结点的值;(3) 它的 左、右子树又分别为二叉排序树。下图中的这颗二叉树就是一颗典型的二叉排序树:初始时是 无序序列:上面构造出的二叉排序树的中序遍历结果.下面是java的代码实现,具有删除、查询、添加等功能.//二叉排序树publi原创 2021-03-23 22:35:19 · 181 阅读 · 0 评论 -
java实现二叉平衡搜索树
java实现二叉平衡搜索树一、为什么要有平衡二叉树二、平衡二叉查找树定义三、平衡因子四、具体代码一、为什么要有平衡二叉树二叉平衡搜索树一定程度上可以提高搜索效率,但是当原序列有序时.例如序列 A = {6,8,10,11,13,15,17},构造二叉搜索树如图a 。依据此序列构造的二叉搜索树为右斜树,同时二叉树退化成单链表,搜索效率降低为 O(n)。在此二叉搜索树中查找元素17, 需要查找 7 次。二叉搜索树的查找效率取决于树的高度,因此保持树的高度最小,即可保证树的查找效率。同样的序列 A,将原创 2021-03-23 21:19:03 · 209 阅读 · 1 评论 -
java利用 后序表达式 实现计算器功能
java利用逆波兰表达式(后序表达式)计算结果1.前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前。比如:- × + 3 4 5 62.中缀表达式就是常见的运算表达式,如(3+4)×5-63.后缀表达式又称逆波兰表达式,与前缀表达式相似,只是运算符位于操作数之后,比如:3 4 + 5 × 6 -输入的字符串可以加小括号具体的功能和流程,代码里的注释写的很清楚了import java.util.ArrayList;import java.util.List;import ja原创 2021-03-23 19:46:14 · 205 阅读 · 0 评论 -
java利用栈实现简单计算器功能
利用栈,实现简单计算器功能计算的数中 不能带括号.每行代码的功能,里面都备注的很清楚了import java.util.Stack;public class Calculator { public static void main(String[] args) { String s = "143+42+12*70-21+50"; Stack<Character> operStack = new Stack<>(); S原创 2021-03-23 19:47:39 · 219 阅读 · 0 评论 -
java简单实现栈
利用java 简单实现栈的 添加数据 查看数据 获取数据 等基本功能 栈 遵循”先进后出”或”后进先出”的原则栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西,而对于栈就只能每次访问它的栈顶元素,从而可以达到保护栈顶元素以下的其他元素.”先进后出”或”后进先出”就是栈的一大特点,先进栈的元素总是要等到后进栈的元素出栈以后才能出栈.import java.util.Scanner;class ArrayStack { private int pot = -1;原创 2021-03-23 16:59:50 · 89 阅读 · 0 评论 -
java 数组模拟 循环队列
利用数组模拟 循环队列利用一维数组 模拟循环队列的 添加数据 查看数据 获取数据 等基本功能class CircleArrayQueue { private int head; //指向数组头部的前一个元素 private int rear; //指向数组的尾部 private int maxSize; //数组的最大容量 private int[] arr; //存放数据的数组 public CircleArrayQueue(in原创 2021-03-23 16:40:38 · 100 阅读 · 0 评论 -
java数组模拟队列
利用一维数组 模拟队列利用一维数组 模拟队列的 添加数据 查看数据 获取数据 等基本功能class ArrayQueue { private int head; //指向数组头部的前一个元素 private int rear; //指向数组的尾部 private int maxSize; //数组的最大容量 private int[] arr; //存放数据的数组 public ArrayQueue(int maxsize) {原创 2021-03-23 16:11:37 · 87 阅读 · 0 评论