Java数据结构
学习数据结构的一些笔记
?JorC ?
这个作者很懒,什么都没留下…
展开
-
Prim算法和kruskal算法(Java)
Prim算法Java实现public class PrimMST { //索引代表顶点,值表示顶点是否在最小生成树中,在为true private boolean[] marked; //索引代表顶点,值表示顶点与最小生成树之间的最短边 private Edge[] edgeTo; //索引代表顶点,值表示顶点与最小生成树之间的最短边的权重 private double[] distTo; //使用最小优先队列索引,存放树中顶点与非树中顶点之间的原创 2022-04-17 15:08:53 · 548 阅读 · 0 评论 -
堆排序(Java)
堆的特性完全二叉树,除最后一层节点不需要是满的,其他从左到右都是满的。最后一层不满时,必须遵循“左满右不满”。通常是用数组实现的堆排序首先,创建堆,根据堆的定义,根节点大于两个子节点的叫大根堆(小于则叫小根堆)。然后,利用下层算法,实现删除根节点的方法来实现排序。时间复杂度O(nlogn)代码示例(此处是以大根堆来建立的堆排序):public class HeapSort { private static boolean less(Compara...原创 2022-04-06 22:55:11 · 532 阅读 · 0 评论 -
逆波兰表达式(Java)
逆波兰表达式区别于我们平日里的中缀表达式,逆波兰表达式是将运算符号后置,即放在两个数的后面。例如:中缀表达式:(a+b)*c逆波兰表达式:ab+c*以下使用Java代码计算逆波兰表达式的值:package DataStructureForJava.Stacks;import java.util.Stack;public class AgainstPoland { public static void main(String[] args) { /原创 2022-03-29 22:06:09 · 1889 阅读 · 0 评论 -
约瑟夫问题
约瑟夫问题41人坐成一圈,第一个人编号为1,以此类推,第n个人编号为n。从编号为1开始报数,依次往后,报到3的人退圈;退出的下面哪一个重新从1开始报数,以此类推。求:最后剩下那个人原来的编号是多少?代码示例:public class JosephQuestion { public static class Node<T>{ T item; Node next; public Node(T item, Node next) {原创 2022-03-27 21:17:42 · 389 阅读 · 0 评论 -
快速排序(Quick)
快速排序原理:设定一个分界值(这个分界值一般取第一个元素),通过分界值将数组分为左右两部分,将大于等于的数据放在右边、小于的数据放在左边。左右两边都独立排序。重复以上步骤,各自再分成左右两组,再排序。当左右两边均完成时,整个数组就排序完成了。时间复杂度最有情况:O(n log n)最坏情况:O()代码示例:public class Quick { public static void main(String[] args) { ...原创 2022-03-21 21:14:27 · 215 阅读 · 0 评论 -
递归与归并排序
递归与归并排序递归方法内部调用方法本身将一个大型复杂的问题层层转化成一个与原问题一致的,规模小的问题,大大减少代码量。注意的是:递归必须有边界条件,否则会发生栈内存溢出归并排序原理(分治法)将一组数据尽可能拆分成两组元素相等的子组,并对每一个子组进行拆分,拆到每个子组元素数量为1即可将相邻的两个子组合并成一个有序的组,一直合并到只剩下一组为止时间复杂度:O(nlog n)缺陷:需要额外申请数组空间,导致空间复杂度上升,是以空间换时间的操作。代码示例原创 2022-03-19 22:03:30 · 204 阅读 · 0 评论 -
插入排序与希尔排序
插入排序原理:将所有的元素分为两组,分别为已排序和未排序将未排序组中的第一个元素插入到已排序组中倒叙遍历已排序组中的元素,与他们依次比较并交换,直到找到一个小于等于的元素,将他插到这个位置,此时后面的其他元素向后移动一位时间复杂度O()代码示例:public static void insertion(Comparable[] a){ for (int i=1;i<a.length;i++){ for (int j=i;j>0;j原创 2022-03-16 22:56:26 · 192 阅读 · 0 评论 -
冒泡排序和选择排序
冒泡排序原理:比较相邻的元素,如果前一个元素比后一个元素大,两者将元素交换一轮比较下来,最后一个元素一定是最大的,接着就是寻找上下元素的最大值,直到剩余一个元素的时候,则排序完成时间复杂度O()代码示例如下public static void bubble(Comparable[] b) { for (int i = b.length - 1; i > 0; i--) { for (int j = 0; j < i; j++) {原创 2022-03-15 22:11:58 · 147 阅读 · 0 评论 -
数据的分类以及算法的时间复杂度
数据的分类逻辑结构(抽象)集合结构:集合中元素除了属于同一个集合外,没有其他关系线性结构:线性结构中元素存在一对一的关系树形结构:树形结构中元素是一对多的层次关系图形结构:图形结构中元素存在多对多的关系物理结构顺序储存结构(适合查找和遍历):将数据元素放在地址连续的存储单元里,数据间的逻辑关系和物理关系是一致的。链式存储结构(适合插入删除等操作):数据元素存储在任意单元里,数据之间不能反映逻辑关系,数据之间通过一个指针来指向元素的地址时间复杂度事前分析估算法原创 2022-03-14 22:37:33 · 299 阅读 · 0 评论