![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
好汤圆
耐得住寂寞 守得住繁华
热爱Java 热爱后端开发 欢迎交流!
展开
-
递归算法的实现
递归一、递归的概念递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。二、递归调用机制代码示例:package com.hsy.recursion;/** * @author hsy * @create 2021-06-13 * @注意 本内容仅限于dev414内部传阅,禁止外泄以及用于其他的商业目的 */public class RecursionTest { public static void main(Stri原创 2021-06-14 12:43:11 · 1128 阅读 · 0 评论 -
栈:中缀转后缀表达式(或许只有学习了数据结构和算法之后才能真正体会到编程的魅力叭!)
栈:中缀转后缀表达式(或许只有学习了数据结构和算法之后才能真正体会到编程的魅力叭!)思路分析1.初始化两个栈:运算符栈s1 和储存中间结果的栈(数栈)s22.从左至右扫描中缀表达式3.遇到操作数时,将其压s24.遇到运算符时,比较其与s1 栈顶运算符的优先级: 4.1.如果s1 为空,或栈顶为左括号“(”,则直接将此运算符入栈; 4.2.否则,若优先级比栈顶运算符的高,也将运算符压入s1; 4.3.否则,将s1 栈顶的运算符弹出并压入到s2 中,再次转到(4-1)与s1 中新的栈顶运算原创 2021-04-14 14:23:55 · 98 阅读 · 0 评论 -
栈:前缀、中缀、后缀表达式
前缀、中缀、后缀表达式及其转换一、什么是前缀、中缀、后缀表达式前缀表达式1、前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前2、举例说明: (3+4)×5-6 对应的前缀表达式就是 - × + 3 4 5 6前缀表达式的计算机求值从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 和 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果例如: (3+4)×5-6 对应的前缀表达式就是原创 2021-04-13 22:10:06 · 1092 阅读 · 5 评论 -
栈:栈的基本操作总结
栈的基本操作总结一、什么是栈二、栈的应用场景三、对栈的一些具体操作四、代码实现一、什么是栈栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元原创 2021-03-22 12:10:05 · 1782 阅读 · 0 评论 -
单向环形链表:约瑟夫问题
单向环形链表:约瑟夫问题单向环形链表Joseph(约瑟夫、约瑟夫环) 问题Joseph 问题为:设编号为1,2,… n 的n 个人围坐一圈,约定编号为k(1<=k<=n)的人从1 开始报数,数到m 的那个人出列,它的下一位又从1 开始报数,数到m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n 个结点的单循环链表,然后由k 结点起从1 开始计数,计到m 时,对应结点从链表中删除,然后原创 2021-03-17 14:49:54 · 139 阅读 · 2 评论 -
双向链表:java实现双向链表的增删改
双向链表:java实现双向链表的增删改单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找单向链表不能自我删除,需要靠辅助节点,而双向链表,则可以自我删除1、遍历方和单链表一样,只是可以向前,也可以向后查找2、 添加(默认添加到双向链表的最后)(1) 先找到双向链表的最后这个节点(2) temp.next = newHeroNode(3) newHeroNode.pre = temp3、修改思路和原来的单向链表一样4、删除(1) 因为是双向链表,因此,我们可以实现自我删原创 2021-03-16 09:26:57 · 174 阅读 · 0 评论 -
单链表:java实现单链表中的增删改
实现单链表中的增删改查什么是链表单链表的增删改应用实例代码输出结果什么是链表链表是有序的列表,但是它在内存中是存储如下小结:链表是以节点的方式来存储,是链式存储每个节点包含data 域, next 域:指向下一个节点.如图:发现链表的各个节点不一定是连续存储.链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定单链表(带头结点) 逻辑结构示意图如下单链表的增删改应用实例使用带head 头的单向链表实现——三国英雄排行榜管理完成对英雄人物的增删改查操作增原创 2021-03-10 16:59:10 · 204 阅读 · 0 评论 -
队列:数组模拟环形队列
数组模拟环形队列1、问题分析2、代码实现之前上一个问题我们发现出现了一些问题——数组使用一次就不能用, 没有达到复用的效果现在我们来解决一下这个问题,我们可以使用一些小算法,使用数组模拟环形队列的方式解决复用的问题1、问题分析尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,这个在做判断队列满的时候需要注意(rear + 1) % maxSize == front 满]rear == front [空]2、代码实现package com.hsy.queue;i原创 2021-03-05 18:16:57 · 94 阅读 · 0 评论 -
队列:数组模拟实现队列
数组模拟实现队列1、什么是队列2、数组模拟队列思路3、代码实现4、问题分析并优化1、什么是队列队列是一个有序列表,可以用数组或是链表来实现遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出2、数组模拟队列思路队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front 及rear 分别记录队列前后端的下标,front 会随着数据输出而改变,而re原创 2021-03-05 15:33:50 · 117 阅读 · 0 评论 -
稀疏数组:原来稀疏数组这么简单!!
原来稀疏数组这么简单!!1、基本介绍2、举个例子3、思路分析4、代码实现5、运行结果比如有一个十分庞大的二维数组,但这个数组里有很多的默认值0,那么这个数组就记录了很多没有意义的数据1、基本介绍当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模2、举个例子这是一个二维数组,他存放了8个数据那么这个就是二维数组所对应的稀疏数原创 2021-03-03 21:21:02 · 433 阅读 · 8 评论 -
概述:线性结构和非线性结构
线性结构和非线性结构线性结构非线性结构数据结构包括:线性结构和非线性结构线性结构线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息线性结构常见的有:数组、队列、链表和栈,后面我们会详细讲解非线性结构非线性结构包括:二维数组,多维数组,广义表原创 2021-03-03 18:22:56 · 198 阅读 · 1 评论 -
概述:数据结构和算法的关系
数据结构和算法的关系数据 data 结构structure是一门研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构可以编写出更加漂亮,更加有效率的代码。要学习好数据结构就要多多考虑如何将生活中遇到的问题,用程序去实现解决.程序 = 数据结构 + 算法数据结构是算法的基础, 换言之,想要学好算法,需要把数据结构学到位。...原创 2021-03-02 20:28:56 · 191 阅读 · 0 评论