数据结构(Java实现)
非计算机专业所学的学时较少的数据结构,参考书为《算法导论》
bioittang
热爱生活&&兴趣编程
展开
-
单源最短路径(Dijkstra算法)(Java)
单源最短路径中的Dijkstra算法属于贪心算法,它的图中不允许出现权重为负值的边。算法时间复杂度与所用的优先队列的实现有关。算法与图的深度优先遍历与最小生成树的Prim算法相似,尤其与Prim相似。 详细介绍可看《算法导论》第24章,下面的链接是别人的介绍与C代码 别人的介绍与C代码 Java代码如下 import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.Lis原创 2020-06-28 11:39:55 · 931 阅读 · 0 评论 -
最小生成树(Kruskal、Prim)(Java)
无向图用的是《算法导论》书上的,Kruskal、Prim算法都是贪心的,Kruskal算法时间复杂度为O(ElgV),Prim算法时间复杂度取决于最小优先队列。 我用的是Java中的优先队列,使用时要注意,当优先队列改变时(删除等)才会刷新排序,应该是源码中删除等操作的代码中实现了重新排列。 两个算法的代码如下: import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.L原创 2020-06-20 17:55:56 · 347 阅读 · 0 评论 -
图的广度与深度优先遍历(BFS,DFS)(Java)
BFS基本就是按《算法导论伪代码实现》,DFS为通过栈实现,代码如下: import java.awt.Color; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Queue; import java.util.Stack; public class BFSandDFStest { public static int原创 2020-06-19 19:11:50 · 261 阅读 · 0 评论 -
二叉搜索树(Java)
下面的程序实现了一个二叉搜索树,每个结点的key为一个学生对象,BST类中实现的方法有:求数的高度,求树中最大最小值,中序遍历(有序),求某个结点的前驱与后继,插入结点。这些方法的时间复杂度大多是O(h)的,遍历为O(n)。 public class BSTMethodTest { public static void main(String[] args) { TreeNode lilei=new TreeNode(new Student(1001,"Lilei","math")); T原创 2020-05-28 19:52:55 · 222 阅读 · 0 评论 -
实现双向链表(Java)
双向列表易增删,不易检索,代码如下: public class MyLinkedListTest { public static void main(String[] args) { MyLinkedlist l=new MyLinkedlist(); l.inSert(1); l.inSert(2); l.delete(2); l.delete(2); } } class Node{ Node prev; Node next; int key; pub原创 2020-05-27 09:59:44 · 175 阅读 · 0 评论 -
实现队列,并用两个队列实现栈(Java)
代码如下,在用两个队列实现栈时进栈时间复杂度一般为O(n),出栈时间复杂度为O(1),大家也可自行改成进栈O(1)出栈O(n)来练手 import java.util.LinkedList; import java.util.Queue; public class MyQueueAndMystackByQueneTest { public static void main(String[] args) { MyQueue q=new MyQueue(2); try { q.enqueue(原创 2020-05-26 14:51:30 · 238 阅读 · 0 评论 -
实现栈(Java)
实现了栈的push和pop方法,代码如下: package trf; public class MyStackTest { public static void main(String[] args) { MyStack mystack=new MyStack(10); try {//主函数最好别抛出了,要捕捉异常 mystack.push(3);//这里几行自己可以随便测试一下 int x=mystack.pop(); System.out.println(x); }原创 2020-05-20 09:39:46 · 150 阅读 · 0 评论 -
计数与基数排序(Java实现)
这2个排序的时间复杂度都为O(n),但是他们的使用都是有限制的,代码如下: import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class CountingAndRadixSortTest { public static void main(String[] args) { int[] a=new int[10]; for(int i=0;i<a.length;i++)原创 2020-05-19 14:48:20 · 216 阅读 · 0 评论 -
实现最小堆并进行堆排序(Java)
用java实现最小堆,并且实现以下2个题目: 实现堆排序 实现保留数据流中最大的5个数 代码如下: package trf; import java.util.Arrays; public class MinHeapTest { public static void main(String[] args) { System.out.println("第一题排序"); double[] a=new double[] {9.1,1.2,2.5,6,8,3}; MinHeap mh1=ne原创 2020-05-18 11:35:49 · 1083 阅读 · 0 评论 -
插入排序(Java实现)
Java实现快速排序 最近在学数据结构,教材是黑皮书算法导论,小白的我准备把自己的课后作业记录下来,代码如下: public class InsertionTest { public static void main(String[] args) { double[] a=new double[10]; for(int i=0;i<a.length;i++) a[i]=...原创 2020-05-05 23:11:24 · 163 阅读 · 0 评论 -
归并排序(Java实现)
Java实现归并排序 归并排序一般是我们所学的第一个递归思想的排序,它的时间复杂度为O(nlgn),非原地排序,代码如下: public class MergeSortTest { public static void main(String[] args) { double[] a=new double[10]; for(int i=0;i<a.length;i++) ...原创 2020-05-07 18:04:59 · 237 阅读 · 0 评论 -
快速排序(Java)
快速排序的特点是:递归,原地排序,时间复杂度平均为O(nlgn) 代码如下: public class QuickSortTest { public static void main(String[] args) { double[] A=new double[10]; for(int i=0;i<A.length;i++) A[i]=(int)(Math.random()*100);//为了结果看起来简洁点,这里就强转成int quickSort(A,0,A.leng原创 2020-05-17 21:58:27 · 201 阅读 · 0 评论