Java数据结构与算法
文章平均质量分 54
数据结构Java版
吴声子夜歌
个人学习记录
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java数据结构与算法——经典趣题
这个问题的大致意思是现在有五家共用一口井,甲、乙、丙、丁、戊五家各有一条绳子汲水:甲绳×2+乙绳=井深,乙绳×3+丙绳=井深,丙绳×4+丁绳=井深,丁绳×5+戊绳=井深,戊绳×6+甲绳=井深,求甲、乙、丙、丁、戊各家绳子的长度和井深。今有五家共井,甲二绠不足如乙一绠,乙三绠不足如丙一绠,丙四绠不足如丁一绠,丁五绠不足如戊一绠,戊六绠不足如甲一绠。鸡兔同笼问题最早记载于1500年前的《孙子算经》,这是我国古代一个非常著名的问题。鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?原创 2026-01-12 19:51:57 · 771 阅读 · 0 评论 -
Java数据结构与算法——数论问题
完全数(Perfect number)是一些特殊的自然整数。完全数等于其所有因子的和。这里所谓的因子是指所有可以整除这个数的数,而不包括该数本身。其实谈到完全数,与之相关的两个概念便是亏数和盈数。一般来说,通过其所有真因子的和来判断一个自然数是亏数、盈数及完全数。例如,4的所有真因子包括1和2,而4>1+2,所以4是一个亏数;6的所有真因子包括1、2、3,而6=1+2+3,因此6是一个完全数;12的所有真因子包括1、2、3、4、6,而12<1+2+3+4+6,所以12是一个盈数。下面举几个典型的完全数的例子原创 2026-01-10 22:47:29 · 818 阅读 · 0 评论 -
Java数据结构与算法——基本数学问题
闰年规则:Java实现,基础版本:二、随机数生成算法2.1、Java中的随机方法编程语言中提供了随机数的生成方法。例如,Java语言中就提供了如下三种随机数生成方法:2.3、java.util.Random2.4、ThreadLocalRandom2.5、SecureRandom2.6、随机数工具类三、π近似值3.1、割圆术割圆术原理:数学公式:Java实现:3.2、蒙特卡罗算法蒙特卡罗法计算 π 的原理:Java实现:3.3、级数公式常见级数公式:Java实现:原创 2026-01-08 21:30:41 · 1012 阅读 · 0 评论 -
数据结构与算法——排序
比较的次数在这种方法中,采用基于比较的次数对排序算法进行分类。对于基于比较的排序算法,在最好情况下时间复杂度为O(nlogn),而在最坏情况下则为O(n2)。基于比较的排序算法通过关键字比较操作来排列序列元素,并且对于大多数输人至少需要O(nlog)次比较。交换的次数在此方法中,排序算法以交换的次数来对算法分类。内存使用有些排序算法是“原地的”(即不占用额外的内存空间),仅需要O(1)或O(1og)的内存开销用于创建临时排序数据的辅助存储位置。递归。原创 2026-01-04 23:10:36 · 648 阅读 · 0 评论 -
数据结构——通用树(N叉树)
上述的具体含义是,如果孩子结点之间有一条链路相连,那么双亲结点就不需要额外的指针指向所有的孩子结点。因此,只要双亲结点用一个指针指向其第一个孩子结点,且同一个双亲结点的所有孩子结点之间都有链路,那么就能解决上面的问题。这棵给定树的深度为4。如果仔细观察可得,只需要从每一个结点开始,跟踪找其双亲结点直到找到一1为止,同时跟踪所有结点深度的最大值,就可以得到问题的解。给定一个双亲结点数组P,其中P[门是树的第个结点的双亲结点(假设根结点的双亲结点用一1表示)。这意味着,需要考察数组对应的树,从而求出树的高度。原创 2025-12-30 18:48:13 · 741 阅读 · 0 评论 -
数据结构——二叉树
如果一棵树中的每个结点有0、1或者2个孩子结点,那么这棵树就称为二叉树。空树也是一棵有效的二叉树。一棵二叉树可以看作由根结点和两棵不相交的子树(分别称为左子树和右子树)组成。如下图所示。严格二叉树:二叉树中的每个节点要么有两个孩子节点,要么没有孩子节点。满二叉树:二叉树中的每个节点恰好有两个孩子节点且所有叶子节点都在同一层。完全二叉树:在定义完全二叉树之前,假定二叉树的高度为h。对于完全二叉树,如果将所有结点从根结点开始从左至右,从上至下,依次编号(假定根结点的编号为1),那么将得到从1~n(n为结点总数原创 2025-12-29 22:38:34 · 1046 阅读 · 0 评论 -
数据结构--广义表
广义表的定义带表名的广义表表示广义表的特性线性结构多层次结构,有深度可共享可递归广义表抽象数据类型package pers.zhang.genList;/** * @author zhang * @date 2020/1/20 - 10:57 * * 广义表抽象数据结构 */public interface GGenList<T> { ...原创 2020-01-20 11:36:41 · 963 阅读 · 0 评论 -
数据结构--稀疏矩阵常用的三种压缩存储(顺序、行单链表、十字链表)
稀疏矩阵表示稀疏矩阵的三元组:稀疏矩阵常用的压缩存储共有3种:顺序存储单链表存储十字链表存储顺序存储稀疏矩阵三元组顺序表:表示稀疏矩阵非零元素的三元组:public class Triple implements Comparable<Triple>{ //行号,列号,元素值 int row, column, value; pu...原创 2020-01-19 15:14:33 · 15159 阅读 · 1 评论 -
数据结构--三角矩阵的压缩存储
三角矩阵三角矩阵的常用压缩方式有两种:线性压缩使用三角形的二维数组压缩线性压缩存储三角矩阵下三角矩阵:上三角矩阵:以下三角矩阵的线性压缩存储为例,进行实现:package pers.zhang.array;/** * @author zhang * @date 2020/1/19 - 13:34 * * 下三角矩阵线性压缩存储 */public cl...原创 2020-01-19 13:56:47 · 13846 阅读 · 3 评论 -
数据结构--数组、使用数组表示矩阵
数组一维数组:多维数组:行主序:列主序:1. 静态顺序存储结构:2. 动态二维数组的存储结构使用数组表示矩阵矩阵类的抽象描述:package pers.zhang.array;/** * @author zhang * @date 2020/1/19 - 10:36 * * 矩阵接口 */public interface MMatrix { ...原创 2020-01-19 13:24:19 · 2451 阅读 · 0 评论 -
数据结构--串的实现
串串定义:S=“s0 S1 … Sn-1”子串:“at” 是 “data” 的子串串比较:两个串可以比较收否相等,也可比较大小。串的顺序存储结构:串的链式存储结构串的抽象数据类型package pers.zhang.string;/** * @author zhang * @date 2020/1/18 - 13:19 * * 串的抽象数据类型 */publi...原创 2020-01-18 14:01:29 · 863 阅读 · 0 评论 -
数据结构--优先队列实现、模拟线程调度
优先队列package pers.zhang.queue;import pers.zhang.linearList.SortedSinglyLinkedList;/** * @author zhang * @date 2020/1/17 - 13:23 * * 优先队列 */public class PriorityQueue<T extends Comparable&...原创 2020-01-17 14:18:26 · 487 阅读 · 1 评论 -
数据结构--队列实现(顺序循环队列、链式队列)
队列队列(queue)是一种特殊的线性表,其插入和删除操作分别在线性表的两端进行。队列的抽象数据类型package pers.zhang.queue;/** * @author zhang * @date 2020/1/17 - 11:35 * * 队列的接口 */public interface QQueue<T> { //判断队列是否为空 ...原创 2020-01-17 12:57:03 · 1327 阅读 · 0 评论 -
数据结构--栈的应用(括号匹配、表达式求值(中缀转后缀))
栈的应用栈是嵌套调用机制的实现基础使用栈以非递归方式实现递归算法判断表达式中圆括号是否匹配package pers.zhang.stack;/** * @author zhang * @date 2020/1/16 - 14:42 * * 栈应用:括号匹配 */public class Exp_bracket { //判断expstr表达式中的圆括号...原创 2020-01-16 15:55:09 · 1735 阅读 · 0 评论 -
数据结构--栈的实现(顺序栈和链栈)
栈栈(stack)是一种特殊的线性表,其插入和删除操作只允许在线性表的一端进行。栈的抽象数据类型package pers.zhang.stack;/** * @author zhang * @date 2020/1/16 - 14:05 * * 栈接口,描述栈的抽象数据类型,泛型参数T表示数据元素的数据类型 */public interface SStack<T>...原创 2020-01-16 14:38:25 · 2558 阅读 · 0 评论 -
数据结构--排序循环双链表
排序循环双链表实现package pers.zhang.linearList;/** * @author zhang * @date 2020/1/15 - 15:16 * * 按升序排序的循环双链表类,继承循环双链表类,E必须实现Comparable<T>接口,支持对象可比较大小 */public class SortedDoublyLinkedList<...原创 2020-01-15 15:26:51 · 1350 阅读 · 0 评论 -
数据结构--循环双链表实现、详解
双链表双链表的插入和删除操作在p节点之前插入值为x的节点在p节点之后插入值为x的节点双链表的删除操作双链表节点package pers.zhang.linearList;/** * @author zhang * @date 2020/1/15 - 11:06 * 双链表节点类 */public class DLinkNode<T> { ...原创 2020-01-15 15:15:41 · 2053 阅读 · 0 评论 -
数据结构--循环单链表
循环单链表实现:package pers.zhang.linearList;/** * @author zhang * @date 2020/1/14 - 15:16 * * 循环单链表 */public class CirSinglyLinkedList<T>{ //头指针,指向循环单链表的头结点 public Node<T> he...原创 2020-01-14 15:29:07 · 622 阅读 · 0 评论 -
数据结构--可排序单链表
可排序单链表实现package pers.zhang.linearList;/** * @author zhang * @date 2020/1/14 - 14:22 * * 按升序排序的单链表类,继承单链表类,T必须实现Comparable<T>接口,支持对象可比较大小 */public class SortedSinglyLinkedList<T ext...原创 2020-01-14 14:32:25 · 519 阅读 · 0 评论 -
数据结构--线性表的链式存储结构(单链表完全实现)、单链表反转
线性表的链式存储结构单链表节点类public class Node<T> { //数据域,保存数据元素 public T data; //地址域,引用后继节点 public Node<T> next; public Node(){ this(null,null); } public Node...原创 2020-01-14 14:21:30 · 837 阅读 · 1 评论 -
约瑟夫环--使用顺序表解决、使用公式法解决
约瑟夫环问题N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。使用顺序表求解package pers.zhang.linearList;/** * @author zhang * @date 2020/1/13 - 18:55 * * 使用顺序表求解约瑟夫环问题 */public ...原创 2020-01-13 19:33:53 · 1893 阅读 · 0 评论 -
数据结构--线性表之顺序表实现
概述线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。基本概念对于同一个线性表,其每一个数据元素的值虽然不同,但必须具有相同的数据类型;数据元素之间具有一种线性的或“一对一”的逻辑关系。第一个数据元素没有前驱,这个数据元素被称为开始节点;最后一个数据元素没有后继,这个数据元素被称为终...原创 2020-01-13 18:18:02 · 770 阅读 · 0 评论
分享