![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java数据结构与算法
羊咩咩咩咩咩
这个作者很懒,什么都没留下…
展开
-
java位运算
对于位运算,是指对二进制数的每一位进行运算,其中有与或非,同或等操作,与位| ,或为&,非为~,异或为^,对于与运算来说,如果两个数都为1,则结果为1,或运算,如果两个数有一个为1,则结果为1,异或,两个数不同的话,结果为1。对于异或运算来说,可以用于消除重复等等操作以一个题目为例:存在一个长1001的数组,中间存放着1~1000的数还有一个与其中同样的一个数,现在需要将这个数找到,请设计算法import java.util.Arrays;import java.util.Rando原创 2022-01-09 22:31:58 · 304 阅读 · 1 评论 -
java线索二叉树
对于线索二叉树,相对于一般的二叉树,多了指出每一棵树的前驱与后继,此处利用的是二叉链表中的空指针域,线索化是写出一个节点的下一个节点或者前驱。在编写程序中,要建立一个前驱指针,在每次节点向后移动时,前驱节点移动到之前的地方。然后lefttype与righttype是用于判断是左子树还是前驱的package tree;class binarytreess{ private newnode root; //建立一个前驱节点 newnode prenode =null; public原创 2021-09-22 00:03:47 · 92 阅读 · 0 评论 -
java二叉树的顺序存储
二叉树顺序存储就是根据数组来存放二叉树,通过如果这个节点下标为n,其左子节点为2n+1,右节点为2n+2来判断。在二叉树顺序存储中只考虑完全二叉树。package tree;public class arrdinarytree { public static void main(String[] args) { int[] arr = {1,2,3,4,5,6,7}; arrbinarytree tree=new arrbinarytree(arr); System.out.p原创 2021-09-21 23:54:20 · 130 阅读 · 0 评论 -
java二叉树查找与删除
二叉树的查找思路(以前序为例):先判断是否为空树,然后判断根节点是否为目标节点,如果不是的话,判断左子节点是否为空,如果非空,则向左子树遍历查找,如果没有找到,则向右子树进行相同的步骤。二叉树的删除思路(此处是以删除非叶子节点就是直接删除这个子树):先判断是否为空树,然后判断根节点是否为目标节点,如果不是的话,判断左子节点是否为空且左子节点是否为删除目标,如果不是,向左子树进行递归,如果没有找到,则向右子树进行相同的步骤。class binarytrees{ node root; publi原创 2021-09-17 13:59:24 · 147 阅读 · 0 评论 -
java二叉树的遍历
二叉树顾名思义只有两个分支,而对于二叉树的遍历存在前序,中序,后序,对于前序,其顺序为从根节点到左子树再到右子树,中序为左子树到根节点再到右子树,后序为左子树到右子树再到根节点。为了遍历方便,这里使用回溯算法。class binarytree{ private heronode root; public void setroot(heronode root) { this.root=root; } public void preorder() { if(this.root!=n原创 2021-09-16 21:09:38 · 124 阅读 · 0 评论 -
java哈希表
哈希表又称为散列函数,作用为读取数据中的缓冲层的概念,可以通过关键码值来访问一系列的信息,特点是速度快。其中包含了链表,所以要构建链表import java.util.Scanner;class emp{ public int id; public String name; public emp next;//这里定义了一个指针 public emp(int id,String name) { super(); this.id=id; this.name=name; }}原创 2021-09-15 23:07:37 · 143 阅读 · 0 评论 -
java斐波那契查找法
斐波那契查找法类似与二分查找法,但是不同的是,是以黄金分割点来进行查找的,而斐波那契数列的相邻两项之比正好与黄金分割相似,所以可以利用斐波那契数列的值来计算。在这个算法中,必须使用顺序数组,而且在判断目标数在黄金分割点的左右两边的取值法都有所不同,这里可以通过图解来得出import java.util.Arrays;public class fibonacisearch { public static int maxsize =20; public static int[] fibo.原创 2021-09-15 23:03:10 · 186 阅读 · 0 评论 -
java插值查找
插值查找类似于二分查找法,所以代码类似,但是唯一的不同是mid的计算方式,由于插值查找具有自适性,所以此处的mid=low+(high-low)*(traget-arr[low])/(arr[high]-arr[low])。import java.util.ArrayList;import java.util.Arrays;import java.util.*;public class insertsearch { public static ArrayList<Integer>原创 2021-09-01 17:22:05 · 122 阅读 · 0 评论 -
java二分查找法
二分查找法只适用于顺序数组,首先要确立一个中间值,可以通过首尾的索引值来得到,然后得到的书数值与我们想要找到的值进行比较,如果大于,则向右移动,利用递归算法来得到目标数字的索引值,左边也是如此,然后当数字重复时,我们可以通过Arraylist来进行操作,最终得到我们目标数字的全部下标。import java.util.ArrayList;import java.util.List;public class Binarysearch { /** * * @param arr查找数组原创 2021-09-01 17:18:06 · 79 阅读 · 0 评论 -
java线性查找
利用遍历从数组的第一个开始查找找到放入数组中继续找第二个,直到找不到为止import java.util.ArrayList;import java.util.List;public class seqsearch { public static ArrayList<Integer> seqsearch(int[] arr,int findval) { ArrayList <Integer> resindexlist=new ArrayList<Intege原创 2021-09-01 17:12:58 · 78 阅读 · 0 评论 -
Java并归排序
并归排序分别有两个动作,1,分:首先要将所有数据进行分组,分为1个数字一组,在这里可以使用回溯算法。2,合:合就是将这个数据进行排序后然后放入同一个数组中。import java.util.Arrays;public class mergesort { public static void mergesort(int[] arr,int left ,int right,int [] temp) { if(left<right) { int mid =(left+right)原创 2021-08-31 16:59:50 · 68 阅读 · 0 评论 -
java基数排序
基数排序作为桶排序的升级版,其属于分配式排序,通过键值的各个位来进行排序,然后将各个元素分配到不同的桶中,以此来进行排序。首先要将每一个数化为同一数位的数eg:将4变成百位即变成004,然后从最小位开始排序。import java.util.Arrays;public class radixsort { public static void radixsort(int[] arr) { int max = arr[0]; for (int n = 0; n < arr.leng原创 2021-08-31 16:56:21 · 39 阅读 · 0 评论