java数据结构
专栏主要是针对数据结构以及一些基本的算法,这里主要使用java进行实现。
猪奥奥
武汉理工大学在校学生,在这里分享一些学习心得。主要是对java语言、开发框架、数据结构等java后端开发工程师所需要具备的知识的一些分享。
展开
-
图的深度优先搜索以及广度优先搜索Java实现
图的深度优先搜索以及广度优先搜索一、基本概念1. 图的深度优先搜索(Depth First Search)2. 图的广度优先搜索(Board First Search)二、基本思路三、代码实现一、基本概念1. 图的深度优先搜索(Depth First Search)深度优先遍历,从初始访问节点出发,初始访问节点可能有多个邻接节点2. 图的广度优先搜索(Board First Search)二、基本思路三、代码实现...原创 2020-10-04 11:30:26 · 217 阅读 · 0 评论 -
图的基本介绍以及Java实现
图一、基本介绍二、代码实现一、基本介绍 图是一种非线性的数据结构,一般用它来反映数据所对应元素之间的几何关系和拓扑关系。图中包括可以具有零个或者多个相邻元素的节点(顶点),以及两个节点之间的连线——边,共同构成。在图的使用中,有以下一些常用概念需要了解。顶点(vertex):图的数据元素之一。边(edge):连接顶点的线。路径:从顶点v到v’的一个顶点序列。无向图:如果一个图结构中,所有的边都没有方向性,那么这种图便称为无向图。有向图:一个图结构中,边是有方向性的,那么这种图就称为原创 2020-10-03 12:19:16 · 291 阅读 · 0 评论 -
平衡二叉树(AVL树)Java实现
平衡二叉树(AVL树)一、基本概念二、思路分析三、代码实现一、基本概念平衡二叉树也称平衡二叉搜索树,又被叫做AVL树,可以保证查询效率较高。平衡二叉树的特点:它是一棵空树或者它的左右两个子树高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。图例:二、思路分析1. 平衡二叉树的构建:因为平衡二叉树本质也是一棵二叉排序树,所以我们可以使用旋转的方式来对平衡二叉树进行构建。当右子树高度-左子树高度>1时,我们利用左旋转来增加左子树的高度。如同所示的一棵二叉排序树,很明显,原创 2020-09-28 11:42:51 · 320 阅读 · 2 评论 -
二叉排序树(BST)的构建及基本操作Java实现
二叉排序树一、基本概念二、思路分析三、代码实现一、基本概念二叉排序树,又称二叉查找树,亦称二叉搜索树。对于二叉排序树,二、思路分析三、代码实现原创 2020-09-23 16:48:11 · 12398 阅读 · 1 评论 -
哈夫曼编码实现压缩与解压Java实现
一、基本概念二、思路分析三、代码实现原创 2020-09-14 16:27:49 · 768 阅读 · 2 评论 -
哈夫曼树Java实现
哈夫曼树一、基本概念二、思路分析三、代码实现一、基本概念 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度(WPL)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。几个基本概念:路径和路径长度二、思路分析三、代码实现...原创 2020-09-12 11:02:53 · 580 阅读 · 0 评论 -
顺序存储二叉树及线索化二叉树Java实现
顺序存储二叉树及线索化二叉树一、基本概念二、思路分析三、代码实现一、基本概念二、思路分析三、代码实现原创 2020-09-11 16:38:49 · 164 阅读 · 1 评论 -
二叉树的遍历查找Java实现
二叉树Java实现一、基本概念二、思路分析三、代码实现一、基本概念1、二叉树二叉树(Binary tree)是树形结构的一个重要类型,二叉树(binary tree)是指树中节点的度不大于2的树。关于二叉树有以下术语需要了解:①结点:包含一个数据元素及若干指向子树分支的信息。②结点的度:一个结点拥有子树的数目称为结点的度。③叶子结点:也称为终端结点,没有子树的结点或者度为零的结点 。④分支结点:也称为非终端结点,度不为零的结点称为非终端结点。⑤树的度:树中所有结点的度的最大值。原创 2020-09-10 11:47:17 · 482 阅读 · 0 评论 -
哈希表java实现
哈希表一、基本概念二、代码实现一、基本概念散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。结构哈希表的结构可以使用数组+链表实现,原创 2020-06-10 17:36:33 · 3743 阅读 · 0 评论 -
栈java实现(三)逆波兰(后缀)表达式及简单后缀计算器
栈的应用——逆波兰表达式一、逆波兰(后缀)表达式二、中缀表达式→后缀表达式1、思路分析2、代码实现三、简单逆波兰表达式计算器1、思路分析2、代码实现一、逆波兰(后缀)表达式逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)定义一个表达式E的后缀形式可以如下定义:(1)如果E是一个变量或常量,则E的后缀式是E本身...原创 2020-04-21 12:20:21 · 354 阅读 · 0 评论 -
栈java实现(二)简单中缀计算器实现
一、思路分析 这里我们使用自定义的栈结构完成一个小练习:简单的不带括号的中缀表达式计算器的实现。分析思路如下:首先创建一个类来自定义栈结构以及所需要用到的一些基本方法。实例化两个栈来分别存放数字和符号。建立一个索引index来对中缀表达式进行遍历。开始扫描遍历表达式:如果是数,我们就查看表达式下一位 ,如果下一位也是数,就进行拼接操作,直到下一位不是数,然后将得到的数直接入栈。...原创 2020-04-20 10:57:03 · 246 阅读 · 2 评论 -
栈java实现(一)栈的基本使用
栈的基本使用一、基本介绍二、基本应用场景三、基本操作代码实现一、基本介绍栈(stack)作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。基本特性:栈是一个先入后出的有序列表。栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一点端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。栈按照先进后...原创 2020-04-12 11:10:36 · 860 阅读 · 0 评论 -
链表java实现(三)双向链表的基本使用
一、基本介绍双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。对比于单链表单向链表查找的方向只能是一个方向,而双链表可以向前或者向后查找单链表在删除节点时不能自我删除,需要依靠被删除节点的前一个节点来辅助删除,而双链表则可以自我删除。单链表在插入节点时只能在当...原创 2020-04-01 12:44:25 · 133 阅读 · 0 评论 -
链表java实现(二)单向循环链表基本使用及使用单向循环链表解决Josephu问题
单向循环链表一、基本介绍二、单向循环链表的使用三、Josephu(约瑟夫)问题1、问题分析2、代码实现一、基本介绍 顾名思义,在内存中单向循环链表就是将单链表的最后一个节点的next再指向单链表的第一个节点,在逻辑结构上就是将原来的一条链变成首尾相接的一个圆环,从而实现单链表的一个循环。如下图(此处为无头节点的单向链表):二、单向循环链表的使用1、定义单向循环链表基本结构class...原创 2020-03-31 19:12:30 · 241 阅读 · 0 评论 -
链表java实现(一)单链表的基本使用以及常见面试题
单链表一、基本介绍二、链表的使用三、常用操作1、求单链表中有效节点的个数2、查找单链表中的倒数第k个节点3、单链表的反转4、逆序打印单链表5、测试方法一、基本介绍链表是有序列表,但它在内存中各节点却不一定连续,单链表在内存中的存储如下: 由上图可知:链表以节点方式进行存储,是链式存储。每个节点包含一个data域和next域,data域用来存储数据,next域则用来指向下一个节点。...原创 2020-03-31 11:51:40 · 233 阅读 · 0 评论 -
稀疏数组的基本使用以及写出读入
一、基本介绍1、概念 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用过稀疏数组来保存该数组。2、稀疏数组存储的原理:(1) 记录数组一共几行几列,有多少个不同的值(2)把具有不同值的y元素的行列及值记录在一个小规模的数组中,从而起到缩小规模的作用例如: 一个大部分元素为0的二维的数组:[000220015011000170000−60000000039091000...原创 2020-03-30 11:54:08 · 127 阅读 · 0 评论 -
数组模拟队列java实现
java数组模拟队列一、基本介绍二、数组模拟队列1、基本介绍2、代码实现3、存在的问题三、数组模拟环形队列1、优化思路分析2、代码实现一、基本介绍队列是一个有序列表,可以用数组或者链表实现。遵循先入先出的原则。即:先存入队列的数据,要先取出,后存入的要后取出。二、数组模拟队列1、基本介绍 队列本身是有序列表,若使用数组的形式来存储队列的数据,则队列数组需要声明如下几个变量:...原创 2020-03-30 16:57:14 · 178 阅读 · 0 评论