
Java-数据结构
咸鱼塘塘主
我只是不想我的未来黯淡无光
展开
-
Comparabel实现类之间的比较
概论在平时编码时免不了要进行各种比较,java内置了Comparable接口,我们可以实现这个接口,然后进行比较,但是比较的类必须已经实现Comparable接口,int,double等基础类型不能进行这样比较,必须使用其包装类Integer等。原创 2017-08-12 16:08:49 · 357 阅读 · 0 评论 -
29-咸鱼学Java-Java中的优先队列
简介优先队列,显而易见,主要的是优先性,其次是队列,其优先性可以通过插入位置的不同进行判断,其队列性,决定了其可用原来的队列进行改造,来实现优先队列。 其图解为 代码/** * 优先队列 * @author 焦焱 * */public class PrioLinkQueue { /** * 内部类 * @author 14831 ...原创 2018-05-13 18:25:23 · 229 阅读 · 0 评论 -
37-咸鱼学Java-归并排序
简介归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 —–百度百科 先红色的归并,再蓝色的,再紫色代码这里写代码片...原创 2018-05-20 13:03:09 · 191 阅读 · 0 评论 -
30-咸鱼学Java-两个队列实现栈
队列的代码详情双队列栈的代码/** * 双栈队列 * @author 14831 * */public class TwoQueueStack { /** * 1号队列 */ private LinkQueue q1 = new LinkQueue(); /** * 2号队列 */ private L...原创 2018-05-14 16:22:46 · 174 阅读 · 0 评论 -
31-咸鱼学Java-BF字符串匹配算法Java版本
简介BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。———百度百科 BF算法就如同算法中的暴力破解法,虽然可以解决问题,但是效率不高,字符...原创 2018-05-14 17:03:13 · 267 阅读 · 0 评论 -
33-咸鱼学Java-Shell排序
简介希尔排序是一种插入排序算法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。Shell排序的执行时间依赖于增量序列。 其主要操作是插入排序,不过其通过分组来进行插入。 其基本思想是 采用分组的策略 让组内有序 组内使用直接插入排序 1,尽量让每组数据变得有序 2,因为越有序越快 时间复杂度 时间复杂度O(n^1.3–1.5) 不稳定代码...原创 2018-05-14 18:02:32 · 215 阅读 · 0 评论 -
34-咸鱼学Java-快速排序递归与非递归
简介快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。—–百度百科 其主要原理是每次都能确定一个元素的确定位置。 时间复杂度 好情况(无序) O(nlog2n) ...原创 2018-05-15 00:22:42 · 842 阅读 · 0 评论 -
24-咸鱼学Java-栈的应用-波兰式转逆波兰式
波兰式介绍波兰式是在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之前,所以,这种表示法也称为前缀表达式。逆波兰式介绍逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)其不同的地方只是运算符的位置不同 举个例子2+3为波兰式,23+就为逆波兰式 其转换方法为 这种操作类似于...原创 2018-05-08 13:04:50 · 451 阅读 · 0 评论 -
25-咸鱼学Java-Java中的链式栈
数组栈及栈的结构 详情链式栈代码/** * 链式栈 * @author 焦焱 *入栈使用头插法 *出栈只需要删除头结点第一个元素 */public class LinkStack {class Entry{ int data; Entry next; public Entry(int data) { this.data ...原创 2018-05-08 13:29:02 · 186 阅读 · 0 评论 -
26-咸鱼学Java-两个栈实现队列
栈的代码详情双栈队列代码代码/** * 双栈队列 * @author 焦焱 * */public class TwoStackQueue {private LinkStack t1 = new LinkStack();private LinkStack t2 = new LinkStack();private int size=0;public int g...原创 2018-05-08 14:11:10 · 169 阅读 · 0 评论 -
17-咸鱼学Java-内部类实际应用-Java链表
内部类 ,未使用内部类的链表可以点击名字查看。 此篇文章主要介绍运用内部类的Java链表的写法。 链表正如其名,就像一个一个珠子被串起来,只有前一个珠子和后一个珠子和当前珠子有关系,是一种一对一的数据结构。 这样的数据结构,在插入和删除节点的时候,会显的特别方便,因为不像数组一样要移动大量的元素,而只需要改变一些引用就可以实现增删。链表的增加1)头插法 顾名思义头插法及每次...原创 2018-04-24 21:56:35 · 348 阅读 · 0 评论 -
18-咸鱼学Java-特殊的链表(环和交)
链表是一长串的数据,可是当一长串的数据相交或者相互环绕的时候就变成了相交的链表和有环的链表,此文主要说明一下有环链表和相交链表的一些基本操作。 链表的代码有环链表创建实验条件 public void createLoop() { Entry cur = head; while(cur.next!=null) {...原创 2018-04-30 23:34:23 · 199 阅读 · 0 评论 -
19-咸鱼学Java-两个有序链表的合并
如图 黑色的线为合并前的链表,蓝色的为合并后。 分析这个问题,可以发现此问题符合递归的四条基本法则。1.基准情形。必须总要有某些基准情形,他无需递归就能解出。 2.不断推进。对于那些需要递归求解的情形,每一次递归调用都必须要使状况朝向一种基准情形推进。 3.设计法则。假设所有的递归调用都能运行。 4.合成效益法则。在求解一个问题的同一实例时,切勿在不同递归调用中做重复性的工作。...原创 2018-05-01 09:34:06 · 253 阅读 · 0 评论 -
27-咸鱼学Java-Java中的循环队列
队列介绍队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。—–百度而循环队列的结构如图所示 其本质类似于将一个数组弯折,首尾相连,这样的话。可是这样的话因为需要判断数组是否满,是否空,所以需要手动浪费掉一个空间,最标志位这样...原创 2018-05-08 19:19:00 · 197 阅读 · 0 评论 -
Java-数据结构-小顶堆
介绍是一种经过排序的完全二叉树,其中任一根节点的数据值均不大于其左子节点和右子节点的值。 则其root及根(堆顶)存储的就是整个堆中最小的值。代码实现package time20180706;/** * 小顶堆 * 适用于在n个数中找最大的m个数字 */public class MinHeap { /** * 默认初始化长度 */ ...原创 2018-07-07 15:14:53 · 1666 阅读 · 0 评论 -
28-咸鱼学Java-Java中的链式队列
简介链式队列也符合队列的基本模式,及先进先出,后进后出的原则,只是实现方式发生了改变,其图解为 红色的为引用,黑色的为节点 其具体实现方式见代码。代码/** * 链式队列 * @author 焦焱 * */public class LinkQueue { /** * 队头 */ private Entry front = n...原创 2018-05-13 16:38:43 · 180 阅读 · 0 评论 -
32-咸鱼学Java-KMP字符串匹配算法Java版
题目为 abcabdca 答案为 -1,0,0,0,1,2,0,0 i k 图解 执行操作 操作后i 操作后k 操作后next数组 2 0 k=next[k] 2 -1 -1,0 2 -1 判断为-1 next[i++]=++k 3 0 -1,0,0 3 0 k=ne...原创 2018-05-14 17:03:21 · 298 阅读 · 0 评论 -
23-咸鱼学Java-Java中的栈
栈的图示 代码/** * 栈 * @author 焦焱 * */public class Stack { /** * 栈顶标记 */ int top; /** * 栈内元素 */ int[] elem; /** * 无参构造 */ public Stack() ...原创 2018-05-05 22:53:11 · 181 阅读 · 0 评论 -
Java循环队列
队列的主要作用是存储数据并且其能保证先进先出,正如排队一样,先进入的先处理代码Queue.javapackage ThreeThree;/** * 循环顺序队列 * @author 焦焱-16060211104 *循环队列的基本操作 */public class Queue{/** * 队头 */private int front;/** * 队尾 */原创 2018-01-21 21:36:56 · 1568 阅读 · 0 评论 -
递归简论
递归的四条基本法则基准情形。必须总要有某些基准情形,他无需递归就能解出。不断推进。对于那些需要递归求解的情形,每一次递归调用都必须要使状况朝向一种基准情形推进。设计法则。假设所有的递归调用都能运行。合成效益法则。在求解一个问题的同意实例时,切勿在不同递归调用中做重复性的工作。 【Mark Allen Weiss–Data Structures Algorithm Analysis i原创 2017-08-12 10:43:59 · 239 阅读 · 0 评论 -
Java-栈的封装
代码Stack.java/** * 栈 * @author 焦焱-16060211104 *栈的主要操作 */public class Stack {/** * 栈底 */private int base=0;/** * 栈顶 */private int top=0;/** * 栈内总元素数 */private int Num = 0; /** *原创 2018-01-18 17:47:06 · 601 阅读 · 0 评论 -
运用顺序存储结构编写26个字母按特定字母值插入或删除的程序
代码Character.java/** * 字母表类,可以进行自动初始化也可以手动添加 * @author JY-16060211104 * */public class Character {/*** 用数组存储*/char [] a = new char[26];/** * 当前元素数目 */int Num=0;/** * 初始化,可以自动初始化字母原创 2018-01-16 23:05:56 · 2363 阅读 · 0 评论 -
Java-链表的实现
代码Data.java/** * 数据类 * @author 焦焱-16060211104 *主要用于存储数据,可以根据需求不同放入不同数据 */public class Data {/** * Int型数据 */private int i;public Data(int i) { super(); this.i = i;}public in原创 2018-01-17 15:42:26 · 198 阅读 · 0 评论 -
Java-链表的交并运算
链表部分在前面文章此文只阐述交并部分。代码/** * 计算类 * @author 焦焱-16060211104 *主要用于计算交并集运算 */public class Calculation {/** * 并运算 * @param a * @param b 两个链表 * @return 并后的链表 */static Link Combine(Link a,Link b){原创 2018-01-17 19:10:33 · 330 阅读 · 0 评论 -
Java-表达式求值
代码NewStack.javaimport java.util.LinkedList;/** * 泛型栈 * @author 焦焱-16060211104 * * @param <T> 需要存储的类型 */public class NewStack<T> {private LinkedList<T> St = new LinkedList<T>(); //存数据/** * 入栈原创 2018-01-18 21:23:14 · 538 阅读 · 0 评论 -
Java-泛型栈
代码/** * 泛型栈 * @author 焦焱-16060211104 * * @param <T> 需要存储的类型 */public class NewStack<T> {private LinkedList<T> St = new LinkedList<T>(); //存数据/** * 入栈 * @param e 数据 */public void push(T e){原创 2018-01-18 21:24:45 · 508 阅读 · 0 评论 -
Java泛型链表实现
链表简介代码实现package com.chenxixuexi;/** * 泛型链表 * 单链表逆置数据--节点 * 求单链表倒数第K节点 * 求两个单链表 是否相交 相交交点 * 判断单链表是否有环?有求出环的入口点 求环的长度? * 合并两个递增的单链表 * @author 14831 * * @param &lt;T&gt; */public cl...原创 2018-04-24 21:58:36 · 1157 阅读 · 0 评论 -
20-咸鱼学Java-Java中的顺序表
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。——–百度百科/** * 顺...原创 2018-05-03 11:06:53 · 216 阅读 · 0 评论 -
35-咸鱼学Java-快速排序的几种优化方式
快速排序介绍 在此文章之前请先阅读快速排序 快速排序的优化主要是再基准的选择上和尽量减少partition的运行。 其基准选择有几种方法1.随机选择法2.三分取中法,等等。 减少partition的方法主要输相同元素聚合。 其实现方法为1.随机选择法原来的选择基准为一直选择low下标的元素,所以在处理某些大量有序的序列的时候就会造成大量的元素在一侧,使得快排没有任何效果。 此时...原创 2018-05-18 00:33:51 · 261 阅读 · 0 评论 -
36-咸鱼学Java-堆排序
简介堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] &gt;= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。——百度百科 在说堆之前...原创 2018-05-18 14:24:42 · 206 阅读 · 0 评论 -
21-咸鱼学Java-Java中的循环单链表
循环单链表图示 代码/** * 循环单链表 * @author 焦焱 * */public class LoopLink { class Entry{ /** * 数据域 */ int data; /** * 指向下一个节点的地址域 */ ...原创 2018-05-05 21:32:57 · 162 阅读 · 0 评论 -
22-咸鱼学Java-Java中的双向链表
双向链表图示 代码/** * 双向链表 * @author 焦焱 * */public class DoubleLink {class Entry{ int data; /** * 后继 */ Entry next; /** * 前驱 */ Entry pre; /** ...原创 2018-05-05 22:05:28 · 186 阅读 · 0 评论 -
Java-数据结构-大顶堆
小顶堆 大顶堆和小顶堆基本相同,只是一些比较的符号不同。代码/** * 大顶堆 * 应用:从n个数据中找最小的m个数字 */public class MaxHeap { private static final int DEFAULT_INITIAL_CAPACITY = 10; private int currentSize; private ...原创 2018-07-07 15:17:03 · 751 阅读 · 0 评论