
常见数据结构的java实现
将数据结构c语言版的教材上的c风格伪代码学习案例,用java实现一遍,并添加注释。
以便与java语言基础者学习和掌握
qq_20009015
欢迎关注我的公众号《程序员与王子喵》
展开
-
基于二叉堆实现的优先级队列
import java.util.Arrays;/** * 优先级队列 * <p> * 优先级队列不再遵循先入先出的原则,而是分为两种情况: * 最大优先级队列,无论入队顺序如何,都是当前最大的元素优先出队 * 最小优先级队列,无论入队顺序如何,都是当前最小的元素优先出队 * <p> * <p> * 最大堆的堆顶是整个堆中的最大元素 * 最...原创 2019-08-24 08:56:49 · 298 阅读 · 0 评论 -
二叉堆的原理和构建、调整
/** * 二叉堆 * <p> * 本质上是一种完全二叉树,分为最大堆和最小堆 * 最大堆: 任何一个父节点的值都大于等于它左右孩子节点的值 * 最小堆:任何一个父节点的值,都小于或者等于它左右孩子节点的值 * 二叉堆的根节点叫堆顶,最大堆的堆顶是整个堆中的最大元素,最小堆的堆顶是整个堆中的最小元素 * <p> * <p> * 常规操作: *...原创 2019-08-24 00:34:49 · 799 阅读 · 0 评论 -
二叉树的构建和前序遍历、中序遍历、后序遍历、层次遍历的递归和栈实现
import java.util.Arrays;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;/** * @ClassName treeDemo * @Author laixiaoxing * @Date 2019/8/19 下午11:43 * @Description 二叉树的...原创 2019-08-24 00:32:47 · 616 阅读 · 0 评论 -
一个有N个格子组成的直线道路,每次可以前进1格或者2格,一种有多少种方式可以走到终点?
用递归或者递推f(n)=f(n-1) +f(n-2) n>=2当只有1个格子的时候 只有1种方式 f(1)=1当有2个格子的时候 有2种方式 f(2)=2递归条件结束就是 0<=n<=2时候 f(n)=npublic int f(int n){if(n<=2){return n;}else{return f(n-1)+f(n-2);}}这...原创 2019-06-06 14:40:05 · 2424 阅读 · 0 评论 -
快速排序的难点思路(右哨兵先走)
之前写了快速排序,然后过了两个星期回来再写一次,发现自己居然写错!!诶,说明掌握的不熟。再复习一次:1.快排的思路,一个无序数组,选中一个值作为中值,从左右两个端点开始,定义两个左右指针2.从右向左找比这个值要大的数,找到就停止,否则指针继续向左移动一个位置,直到找到或者已经比左指针位置小。3.从左向右找比这个值要小的数,找到就停止,否则指针继续向右移动一个位置,直到找到或者已经比右指针...原创 2019-04-13 21:53:02 · 2748 阅读 · 0 评论 -
快速排序
package src.swap_sort.Quick_sort;import java.util.Arrays;import java.util.List;//快速排序 原理是分治法的应用//是对冒泡排序的一种改进//原理//通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,// 然后再按此方法对这两部分数据分别进行快速排序,整...原创 2019-04-03 09:49:59 · 186 阅读 · 0 评论 -
字符串匹配算法之KMP算法详情
package demo;/*字符串匹配算法 */public class StringKMP { //找出从第一个字符开始 子串T在主串S的第一个位置 如果没有则返回-1 public static int index(String S, String T) { int tag = 0; int i = 0; int j...原创 2018-11-27 01:10:15 · 192 阅读 · 0 评论 -
java实现串的匹配算法
串的匹配算法遍历算法package demo;/** * 串的模式匹配算法 */public class StringIndex { /** * 求子串的定位函数,返回从pos位置起的第一个子串的位置 * 返回子串T在主串S中第pos个字符之后第位置,若不存在 则函数值为0 * * @return */ public...原创 2018-11-19 00:03:20 · 1031 阅读 · 0 评论 -
java串的数组实现
串的数组实现package impl;import Interface.IString;/** * 定长顺序存储表示串 * &amp;lt;p&amp;gt; * 用一组地址连续的存储单元存储串值的字符序列 * 在串的定长顺序存储结构中,按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区 * 串的实际长度 可以在定长范围内随意 * &amp;lt;p&amp;gt; * 定长数组,超出部分自动...原创 2018-11-18 17:36:48 · 346 阅读 · 0 评论 -
java数据结构之串的定义
串的接口定义package Interface;import impl.ArrayString;/** * 串 是由零个或者多个字符组成的有限序列 * 串中字符的数目n称为串的长度 零个字符的串称为空串 它的长度为零 * 串中任意个连续字符字符组成的子序列称为该串的子串 包含子串的串相应的称为主串 * 通常称字符在序列中的序号为该字符在串中的位置 子串的位置则是以该子串...原创 2018-11-18 17:35:51 · 818 阅读 · 0 评论 -
队列应用之银行排队 离散事件模拟
package demo;import impl.LinkedQueue;import org.omg.CORBA.DynAnyPackage.Invalid;import java.util.ArrayList;import java.util.Date;import java.util.List;/** * 队列的应用之离散事件模拟 * 假设某银行有4个窗口,每个窗口某一...原创 2018-11-16 14:50:10 · 1198 阅读 · 0 评论 -
java循环队列的实现
package impl;import Interface.IQueue;/** * 循环队列 * &lt;p&gt; * 注意:判空和判满的两种情况: * 情况1.另设一个标识位区别队列是空还是满 * 情况2.少用一个元素空间,约定以"队列头指针在队尾指针的下一位位置上" 作为队列满的标志 * * @param &lt;T&gt; */public class Cyc...原创 2018-11-15 10:33:05 · 6562 阅读 · 0 评论 -
java队列的链表实现
package Interface;/** * 队列接口 * &lt;p&gt; * 队列是一种先进先出的线性表 * 只能在表的一端进行插入,另一段进行删除 * 允许插入的一端叫队尾,允许删除的一端叫队头() * * * ps:还存在一种 双端队列 即队头和队尾都可以进行插入和删除的操作,队头和队尾在这里叫端点 * 以及输入受限的双端队列(一端输入和删除,另一端只能删除) ...原创 2018-11-15 10:30:50 · 2560 阅读 · 0 评论 -
java队列的数组实现
队列接口:package Interface;/** * 队列接口 * &lt;p&gt; * 队列是一种先进先出的线性表 * 只能在表的一端进行插入,另一段进行删除 * 允许插入的一端叫队尾,允许删除的一端叫队头() * * * ps:还存在一种 双端队列 即队头和队尾都可以进行插入和删除的操作,队头和队尾在这里叫端点 * 以及输入受限的双端队列(一端输入和删除,另一端只...原创 2018-11-15 10:32:26 · 6501 阅读 · 0 评论 -
java递归之汉诺塔问题
package stack.demo;/** * 汉诺塔问题: * 假设有三根柱子,x y z * x上有3个圆盘,从底部开始从大到小编号为n 到 1 * 若每次只能移动一个圆盘,且大圆盘不能在小圆盘上面 * 现在需要将3个圆盘 都从x柱子上都移动到z柱子上,且保持原来的顺序, * 需要移动多少次? 若是n个圆盘呢? */public class Hanoi { ...原创 2018-11-09 10:43:58 · 751 阅读 · 1 评论 -
java栈应用之表达式求值
package stack.demo;import java.io.IOException;import java.util.Scanner;import java.util.Stack;/** * 表达式求值 算符优先法 * 3*(5-2)# #在这里表示结尾 * * 思路: * 使用两个栈,分别是操作数栈 存储数字 和操作符栈 存储运算符 * 读入表达式时 * ...原创 2018-11-08 23:37:23 · 4053 阅读 · 1 评论 -
java使用栈解迷宫问题
迷宫求解从当前入口出发,顺某一方向前进,若则走通,则继续走,否则沿原路退回,换一个方向继续走,直到到达终点或者所有的可能的通路都走过为止需要一个后进先出的结构来保存入口到当前位置的路径,这个结构就是栈关键点在于:要判断一个位置 ,是否可通。 可通是指,可以通过,且之前没有来过package stack.demo;import java.util.ArrayList;import ...原创 2018-11-08 10:21:35 · 3654 阅读 · 0 评论 -
栈应用之行编辑器
栈应用之行编辑器内容:#表示退格 @表示退行比如 whli##ilr#e(s#*s)outcha@putchar(*s=#++)实际有效的是如下while(*s)putchar(*s++)思路:用栈存储输入,直到输入结束为止’\n’表示,则输出 ,期间如果遇到#则出栈 ,遇到@则清空栈代码如下:public class LineEdit { public stati...原创 2018-11-06 15:49:01 · 553 阅读 · 0 评论 -
栈的应用之括号匹配
源码的github地址,可以下载到本地运行package stack.demo;import stack.stack;/** * 栈的应用之括号匹配的检验 * 输入一系列括号 返回是否匹配 * 比如 ([]())返回匹配 * [([][])]返回匹配 * [(] 返回不匹配 * [())返回不匹配 * (()]返回不匹配 * * 原理 最需要匹配的那个括号永远在...原创 2018-06-18 18:45:43 · 575 阅读 · 4 评论 -
栈的应用之数制转换
package stack.demo;import stack.stack;/** * 栈的应用之数制转换 * 1.十进制数N和其他d进制数的转换 * 原理 N=(N /d)xd+ N%d /为整除 %为取模 * 比如 十进制数10 * 满足 10=(10/2)x2 +10%2 * * 1.例如 十进制数1348 转为八进制数就是2504 这里的N必须是十进制数...原创 2018-06-18 18:44:03 · 3242 阅读 · 0 评论 -
java栈的实现(链表型)
//节点对象package stack;public class LinkNode<T> { private T date; private LinkNode next; public T getDate() { return date; } public void setDate(T date) { th...原创 2018-06-18 13:06:02 · 2655 阅读 · 1 评论 -
java栈的实现(数组型)
//实现类package stack;/** * 栈是限定在表尾进行插入或者删除操作的线性表 * 因为表尾叫栈顶 * 表头叫栈底 * 不含元素的叫空栈 * 特点是后进先出LIFO */public class stack<T> { //栈底指针 private int base; //栈顶指针 private int top; ...原创 2018-06-18 13:02:06 · 462 阅读 · 0 评论 -
java实现一元多项式相加
项的类 package demo;//一元多项式的项public class term { //系数 int coef; //指数 int expn; public term() { } public term(int coef, int expn) { this.coef = coef; ...原创 2018-06-17 18:53:29 · 8600 阅读 · 1 评论 -
java实现双向链表
//头节点package Impl;//双向链表的头节点public class DuLNode<T> { private T date; //前指针 private DuLNode prior; //后指针 private DuLNode next; public T getDate() { return...原创 2018-06-17 00:46:24 · 247 阅读 · 0 评论 -
java实现静态链表
/*** 静态链表* 借用一维数组来描述线性链表* 这种描述方法便于在不设指针类型的高级程序设计语言中使用链表结构* 数组的一个分量表示一个节点,第0个分量看作是头节点 游标代替指针指示节点在数组中的位置* <p>* 与数组型线性表的区别* 1.有节点 每个节点包含 date 和 next游标* 2.需要自己实现malloc和free函数* 思路:将...原创 2018-06-16 16:10:32 · 1273 阅读 · 0 评论 -
java实现数组型线性表
线性表接口如下package IntefaceList;public interface IList<T> { /** * 构造一个空的线性表 进行初始化 */ void InitList(); /** * 销毁线性表 */ IList DestroyList(); /** * 将...原创 2018-06-14 09:21:21 · 539 阅读 · 1 评论 -
java实现链表型线性表
线性表接口如下package IntefaceList;public interface IList<T> { /** * 构造一个空的线性表 进行初始化 */ void InitList(); /** * 销毁线性表 */ IList DestroyList(); /** * 将...原创 2018-06-14 09:15:18 · 950 阅读 · 1 评论