
Java版数据结构
《Java数据结构和算法》第二版
Only you, only you!
这个作者很懒,什么都没留下…
展开
-
(Java数据结构和算法)数组------二分查找
//有序数组类 public class Main{ private int[] a;//数组a,封死在里面,不能让外界访问 private int size;//数组大小 private int elementNumber;//数组当前元素个数 public Main(int n){ a = new int[n]; size = n; elementNumber = 0; ...原创 2018-11-09 11:46:27 · 232 阅读 · 0 评论 -
(Java数据结构和算法)拓扑排序
参考博文 拓扑排序 public class Main { public static void main(String[] args){ System.out.println("请输入一个图的邻接矩阵(8X8):"); int[][] map = new int[8][8]; int[] inDegree = new int[8]; for(int i = 0; i &l...原创 2018-11-24 23:49:00 · 601 阅读 · 0 评论 -
(Java数据结构和算法)最小生成树---Kruskal算法(并查集)
该文章利用prime算法求得连通图的最小生成树对应的边权最小和,prime算法是从顶点的角度思考和解决问题。本文介绍的Kruskal算法将从边的角度考虑并解决问题,利用了并查集方便地解决了最小生成树的问题。 本文参考博文 //并查集 class UnionSameSet{ public int[] parent; public int[] rank; public int n; pub...原创 2018-11-24 23:11:38 · 534 阅读 · 0 评论 -
(Java数据结构和算法)最小生成树---prime算法
参考博文 public class Main { public static void main(String[] args){ int inf = 1000000;//无穷大 //图,可以这样认为:图的任意两个顶点之间都有边,两顶点无法到达的,可以认为他们之间的边权是无穷大 int[][] graph = { {inf, 6, 1, inf}, {6, inf,...原创 2018-11-24 22:04:18 · 1005 阅读 · 0 评论 -
(Java数据结构和算法)图的DFS和BFS
DFS+BFS import java.util.*; //以无向图为例,实现图的深度优先搜索和广度优先搜索 class Graph{ public int[][] adjacencyMatrix;//邻接矩阵,1代表有边,0代表没有边 public int arcNumber;//边数 public int vertexNumber;//顶点数 public boolean[] v...原创 2018-11-24 20:53:20 · 268 阅读 · 0 评论 -
(Java数据结构和算法)堆---优先队列、堆排序
堆主要用于实现优先队列。 利用有序数组可以实现优先队列(从小到大或从大到小的数组),删除的时间复杂度是O(1),但是插入的时间复杂度是O(N)。用堆实现优先队列,插入和删除的时间复杂度都是O(logN)。 简介 堆是一种完全二叉树,且每个节点的值都大于等于子节点值(大根堆)。堆的子树也是完全二叉树。注意是用数组来存放堆。 补充下完全二叉树的规律 (1)n2+1 = n0 设子节点为0、1、2的节...原创 2018-11-24 17:17:05 · 447 阅读 · 0 评论 -
(Java数据结构和算法)递归---三角数字+全排列+二分查找
三角数字 问题:求解三角数字第n项。 public class Main { public static void main(String[] args){ System.out.println(solve(6)); System.out.println(recursionSolve(6)); } //常规方法求和求解三角数字第n项 public static int so...原创 2018-11-20 13:02:56 · 222 阅读 · 0 评论 -
(Java数据结构和算法)哈希表
234树每个节点最多有4个子节点和3个数据项,是一种平衡树,效率比红黑树稍差,但编程容易。非叶子节点的子节点数总是比他的数据项数多1。原创 2018-11-24 14:19:40 · 175 阅读 · 0 评论 -
(Java数据结构和算法)队列-----队列本质原理实现+ArrayDeque类实现
自定义队列 class MyQueue{ private int SIZE;//队列容量 private int[] a; private int front;//队头指针 private int rear;//队尾指针 private int size;//队列当前元素数目 public MyQueue(int SIZE){ this.SIZE = SIZE; a = n...原创 2018-11-17 23:34:31 · 200 阅读 · 0 评论 -
(Java数据结构和算法)希尔排序+快速排序
希尔排序 每隔一定间隔组成一个序列,对这个序列进行排序。逐渐缩短间隔,最后一次间隔必定是1。间隔的变化可以自行确定,书中介绍了h = 3*h + 1的变化策略。 public class Main { public static void main(String[] args){ int[] a = {2, 3, 9, 1, 66, 4}; shellSort(a); pr...原创 2018-11-22 17:46:46 · 196 阅读 · 0 评论 -
(Java数据结构和算法)链表
自定义链表 //单链表,链表节点存放的是键值对 //链表节点 class Node{ public int key; public int value; public Node next; public Node(int key, int value){ this.key = key; this.value = value; this.next = null; } ...原创 2018-11-19 20:51:11 · 188 阅读 · 0 评论 -
(Java数据结构和算法)二叉搜索树
二叉搜索树 非平衡树原创 2018-11-24 00:05:16 · 159 阅读 · 0 评论 -
(Java数据结构和算法)递归---汉诺塔问题+归并排序
汉诺塔问题 /* *汉诺塔问题,从左到右A、B、C三个柱子,A柱子上的n个从大到小(自下而上)放置的盘子, *把这n个盘子从柱子A移到柱子C。 * *思路:数学归纳法的思路,A柱子上有1个盘子、2个盘子、3个盘子的情况下,做一遍找到思路。 * (1)先把A柱子上的n-1个盘子,借助B柱子,移动到C柱子上。 * (2)把B柱子上的n-1个盘子,借助C柱子...原创 2018-11-22 12:38:11 · 203 阅读 · 0 评论 -
(Java数据结构和算法)栈-----栈本质原理实现+ArrayDeque类实现
自定义栈 class MyStack{ private int[] a; private int size; private int top; private final int ERROR = -1;//假设其他元素不会出现负数的前提下 public MyStack(int size){ this.size = size; a = new int[size]; top...原创 2018-11-09 18:57:31 · 309 阅读 · 0 评论 -
(Java数据结构和算法)简单排序------冒泡排序、选择排序、插入排序、对象排序、Arrays工具类排序
冒泡排序、选择排序、插入排序 class ArrayUtils{ public static void swap(int[] a, int i, int j){ int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } //【冒泡排序】[a[l], a[r]]闭区间 public static void bubbleSort(int[] a, in...原创 2018-11-09 16:04:01 · 230 阅读 · 0 评论 -
(Java数据结构和算法)最短路径---Dijkstra+Floyd
参考博文 Floyd算法和Dijkstra算法都不能针对带有负权边的图,否则一直走负权边,没有最小,只有更小!! Floyd算法 import java.util.Scanner; //Floyd算法 class Graph{ public int[][] adjacencyMatrix; public int vertexNumber; public int arcNumber; ...原创 2018-11-25 12:10:02 · 368 阅读 · 1 评论