
数据结构与算法
数据结构与算法
丶阳凡
这个作者很懒,什么都没留下…
展开
-
红黑树
红黑树import sun.applet.Main;import java.util.Base64;public class RedBlackBST <Key extends Comparable<Key>,Value> { private class Node{ Key key; Value value; ...原创 2020-05-02 23:39:13 · 133 阅读 · 0 评论 -
基于二叉查找树的符号表
基于二叉查找树的符号表public class BST <Key extends Comparable<Key>,Value>{ private Node root; //根节点 private class Node{ private Key key; private Value value; privat...原创 2020-04-24 19:12:46 · 220 阅读 · 0 评论 -
不递归的快速排序
不递归的快速排序通过分析快速排序我们可以发现,快速排序能实现排序的效果是因为当数组拆分到足够小的时候,通过拆分这个操作,我们可以把只有一两个元素的这样的小数组通过交换保证有序,然后小数组归并成大数组即实现排序。那么,快速排序是通过递归,将数组不断的拆分成两部分,然后再递归拆分。这个过程使用栈也可以实现,就可以不使用递归。实例:import java.util.Scanner;import...原创 2020-04-24 00:17:14 · 884 阅读 · 1 评论 -
二分查找(基于有序数组)
二分查找(基于有序数组)public class BinartSearchST <Key extends Comparable<Key>,Value>{ private Key[] keys; //专门用来存放键的数组 private Value[] values; //专门用来存放值的数组 private int n; //数组大小...原创 2020-04-23 16:05:47 · 324 阅读 · 0 评论 -
符号表的顺序查找(基于无序链表)
符号表的顺序查找(基于无序链表)public class SequentialSearchST <Key,Value> { private Node first; private class Node{ Key key; Value value; Node next; public Node(Key...原创 2020-04-23 13:00:24 · 247 阅读 · 0 评论 -
堆排序
堆排序基本了解:堆(二叉堆):我们可以把堆看成是完成二叉树的数组对象。所以说堆中的每个元素都要大于等于自己的两个子节点优先队列:具有插入数据和删除最大元素这两种操作的数据结构堆有序:当一个二叉树的每个节点大于等于自己的两个子节点时,它被称作对有序堆的数组表示:我们认为a[1]是位置1,而不使用数组的0号位置。堆的根节点在位置1,那么根节点的子节点就在2和3。子节点的子节点就分别在4,5...原创 2020-04-21 00:20:12 · 146 阅读 · 0 评论 -
快速排序
快速排序快速排序可能是应用最广泛的排序了。它实现并不复杂,而且适用于各种不同的输入数据。思路:将一个数组分为两部分,拆分的时候取出一个值,保证数组的左半部分都比这个值小,右半部分都比这个值大,然后将两边分别排序,合在一起就是有序的数组。实例:public class Quick { public static void sort(Comparable[] a) { ...原创 2020-04-19 12:14:37 · 108 阅读 · 0 评论 -
自底向下的原地归并排序
自底向下的原地归并排序归并排序详情请查看:自顶向下的原地归并排序这是归并排序的另外一种实现方法。思路:先归并那些微型数组,然后再成对的归并得到的子数组。实例:import java.util.Random;public class MergeBU { private static Comparable[] aux;//辅助数组 public static void...原创 2020-04-18 19:18:25 · 182 阅读 · 0 评论 -
自顶向下的原地归并排序
自顶向下的原地归并排序归并排序是一种简单的递归排序算法。思路:归并排序即是将两个有序的数组归并成一个更大的有序数组。那么我们要将一个数组排序,我们可以先将这个数组分成两半分别排序,然后将结果归并起来。其:对任意长度的为N的数组的排序时间和NlogN成正比需要额外的空间,所需的空间大小和N成正比归并排序的速度非常快,但是却需要额外的空间。为什么需要额外的空间尼?因为我们使用归并排序...原创 2020-04-18 17:58:10 · 515 阅读 · 1 评论 -
希尔排序
希尔排序希尔排序是一种基于插入排序的快速的排序算法。思路:当我们面对足够大的乱序数组时,插入排序有时候会比较无力。因为插入排序是相邻的元素进行比较交换,而如果运气够差,有可能会将端尾的元素移动到最前端,那么一个元素就会经历N-1次交换。而为了加快这个过程,我们可以使用希尔排序。希尔排序实现了不相邻元素之间的比较交换。其思想是使数组中任意间隔为h的元素都是有序的,这样的数组被称为h有序数组。换句...原创 2020-04-18 00:21:09 · 114 阅读 · 0 评论 -
插入排序
插入排序思路:插入排序是在遍历时,将当前元素向前插入到第一个小于等于(大于等于)它的元素的右边(也可以说是最后一个大于等于它的元素的左边)。插入排序实现采用两重循环。外循环遍历,内循环从当前遍历的元素开始,向左遍历并比较,如果当前元素比上一个元素小(大)的话,就交换位置。对于长度为N的数组:比较次数在(N-1)~(N*N/2)之间交换次数在0~N*N/4之间插入排序的特点:所需的...原创 2020-04-17 16:46:20 · 164 阅读 · 0 评论 -
选择排序
选择排序选择排序是一种很简单的排序算法。思路:找到数组中最小的那个元素,然后将它和数组的第一个元素交换位置。然后在剩下的所有元素中找到最小的那个元素,将它和第二个元素交换位置。如此往复,直至排序完成。选择排序的由两重循环来实现,外循环遍历数组,进行交换。内循环执行比较。对于长度为N的数组,其:需要N次交换大约需要N*N/2次比较选择排序的特点:运行时间和输入无关。就算是对一个全...原创 2020-04-16 16:34:17 · 157 阅读 · 0 评论 -
链表实现队列
链表实现队列/** * 队列:先进先出 * 添加节点:在表尾添加 * 删除节点:在表头删除 * @param <Item> */public class Queue<Item> { private int N = 0; //队列的大小 private Node first = null;//表头 private Node last =...原创 2020-04-15 16:54:55 · 238 阅读 · 0 评论 -
链表实现下压栈
链表实现下压栈public class Stack<Item> implements Iterable<Item>{ private int N = 0; // 栈的大小 private Node first = null; // 栈顶节点 private class Node{ //节点数据 Item item; ...原创 2020-04-15 16:13:32 · 146 阅读 · 0 评论 -
数组实现下压栈(可动态调整数组大小)
数组实现下压栈(可动态调整数组大小)public class ResizingArrayStack<Item> implements Iterable<Item> { private Item[] a = (Item[])new Object[1]; //栈元素 private int N = 0; //元素数量 /** * ...原创 2020-04-15 15:21:43 · 198 阅读 · 1 评论 -
Dijkstra双栈算术表达式求值算法
Dijkstra双栈算术表达式求值算法该实例实现的前提是输入的算术表达式有严格的括号。比如:`(1+((2*3)+(6/2)))//这种是可行的。`1+2+3 //是不可行的为什么会严格要求括号是因为该实例是根据右括号判断什么时候进行运算。代码:public class Evalauate { public static void main(String[] args)...原创 2020-04-15 12:01:59 · 203 阅读 · 0 评论