数据结构与算法
为祖国添砖JAVA
计算机视觉
展开
-
JAVA数据结构与算法——前缀(波兰表达式)、中缀、后缀表达式(逆波兰表达式)规则
前缀表达式(波兰表达式)规则:运算符位于操作数之前 举例:(3+4)*5-6 对应的前缀表达式是 -*+3456前缀表达式的计算机求值从右到左边依次扫描表达式,遇到数字的时候,将数字压入栈中,遇到运算符,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素和次顶元素),并将结果入栈;重复上述过程直到表达式的最左端,最后运算得出的值即为表达式的结果。 举例:(3+4)*5-6 对应的前缀表达式是 -*+3456 ,针对前缀表达式求值步骤如下:从右至左扫描,将6、5、4、3压入...原创 2020-09-17 12:10:03 · 202 阅读 · 0 评论 -
JAVA数据结构与算法——栈(实现综合计算器)
问题介绍使用栈完成计算一个表达式的结果,如:7*2*2-5+1-5+3-4=?思路分析1、通过一个index值(索引),来遍历表达式2、若index发现的是一个数字,就存入数栈;若发现的是符号,就分如下情况解决。 情况一:若发现符号栈为空,则直接入栈; 情况二:若符号栈有操作符,就进行比较,如果当前操作符的优先级小于或等于栈中的操作符,就从数栈中pop出两个数,再从符号栈中pop出一个符号,进行运算。将运算结果在入数栈。然后把当前的操作符入符号栈。 情况三:若操...原创 2020-09-12 08:51:15 · 159 阅读 · 0 评论 -
JAVA数据结构与算法——栈
目录栈的介绍栈的应用场景数组模拟栈思路分析代码实现输出测试栈的介绍''先入后出''的有序列表 栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,为栈顶(Top),另外一端为固定的一端,为栈底(bottom)。 最先放入的元素在栈底,最后放入的元素在栈顶,删除元素则相反。 出栈和入栈图1-1出栈和入栈栈的应用场景子程序调用:在跳往子程序前,会将下一个指令存到堆栈中,直到子程序执行完后再将地..原创 2020-09-06 14:43:48 · 81 阅读 · 0 评论 -
JAVA数据结构与算法——约瑟夫问题
目录Josephu问题的描述环形链表环形链表的构建环形链表的遍历代码实现环形链表后台输出环形链表约瑟夫问题思路分析约瑟夫出圈代码实现最终输出Josephu问题的描述约瑟夫问题为:设编号为1,2,3....n的n个人围坐在一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又开始从1开始报数,数到m的人又出列,以此列推,直到所有人都出列,由此产生一个出列的编号序列。环形链表环形链表的构建先创建第一个节点,.原创 2020-09-06 12:23:27 · 256 阅读 · 0 评论 -
JAVA数据结构与算法——双向链表
单链表缺点分析单链表查找的方向只能是一个方向的,双向链表可以向前或者向后查找。 单链表不能自我删除,需要依靠辅助节点,而双向链表可以自我删除。双向链表示意图图1-1 双向链表双向链表操作思路遍历:和单链表一样,只是可以向前也可以 向后查找。 添加:(默认添加到链表尾)先找到双向链表的最后这个节点 temp.next = newHeroNode newHeroNode.pre = temp图1-2 双向链表的添加示意图修改:和单项链表一样 删除:由于是双向链表..原创 2020-08-20 13:56:48 · 159 阅读 · 0 评论 -
JAVA数据结构与算法——单链表面试题(新浪、百度、腾讯)
单链表的常见面试题求单链表中有效节点的个数 查找单链表中倒数第k个节点(新浪) 单链表的反转(腾讯) 从尾到头打印单链表(百度,要求方式一:反向遍历。方式二:stack栈)例题1:求有效节点个数思路: 方法:获取有效节点 的个数(如果是带头结点的链表,需要不统计头结点) head是头结点,length是有效节点个数关键代码实现 : public static int getLength(HeroNode head) { if (head.next == nul...原创 2020-08-19 20:53:32 · 234 阅读 · 0 评论 -
JAVA数据结构与算法——单链表(4)
单链表节点的删除思路先找到需要删除的节点的前一个节点(temp) temp.next = temp.next.next 被删除节点将不会有其他引用指向(会被垃圾回收机制回收)代码实现 // 删除节点 // 1.head不能动,因此需要temp辅助节点找到待删除节点的前一个节点。 // 2.在比较的时候,是需要temp.next.no与待删除节点.no进行比较 public void dele(int no) { HeroNode temp = head; boolean fla原创 2020-08-19 17:25:55 · 110 阅读 · 0 评论 -
JAVA数据结构与算法——单链表(3)
单链表节点的修改以及关键代码实现main函数中: // 修改 HeroNode newHeroNode = new HeroNode(2, "小卢", "玉麒麟~~~~~"); System.out.println("修改后:"); singleLinkedList.update(newHeroNode); singleLinkedList.list();SingleLinkedList类中加入修改方法:// 修改节点的信息 public void update(He原创 2020-08-18 20:17:47 · 129 阅读 · 0 评论 -
JAVA数据结构与算法——单链表(2)
基于上一节单链表(1)中的思路改进,按照编号的顺序进行添加节点。上一节的链接:https://blog.csdn.net/qq_42120059/article/details/107963648 思路 首先找到新添加节点的位置,通过辅助变量,然后遍历。(原因:头结点不可随意改动) 新的节点.next=temp.next 将temp.next = 新的节点图1-1 思路图解 代码实现 // 按照方式二加入: singleLinkedList.add2(hero.原创 2020-08-13 20:15:57 · 131 阅读 · 0 评论 -
JAVA数据结构与算法——单链表(1)
单链表的介绍 单链表示意图小结:链表是以节点方式来存储的,是链式存储 每个节点有data域和next域(next域指向下一个节点) 由图可知,每个节点不一定是连续存储的 链表分为带头结点的链表和不带头结点的链表,根据需求来确定 单链表的创建和分析实现 添加:创建一个头结点,作用是表示单链表的头,每添加一个节点,就直接加入到链表的最后。遍历:通过一个辅助变量来帮助遍历整个链表。(头结点不能动,所以需要一个辅助变量)package com.jun._3_linked...原创 2020-08-12 19:36:41 · 128 阅读 · 0 评论 -
JAVA数据结构与算法——数组模拟环形队列
数组模拟队列的实现基础之上,对队列进行优化(数组的复用等),采用环形队列的方式。上一篇数组模拟队列:https://blog.csdn.net/qq_42120059/article/details/107864815思路分析:图1-1队列图思路整理:1.初始值的设定: front初始值为0,rear初始值也为02.变量含义的调整: front变量的含义——指向队列的第一个元素,arr[front]指的是队列的第一个元素。 rear变量的含义——指向队...原创 2020-08-11 00:34:23 · 214 阅读 · 0 评论 -
JAVA数据结构与算法——数组模拟队列代码实现
队列介绍:队列是一个有序列表,可以用数组或是链表来实现 遵循先入先出的原则(先存入的数据先取出)数组模拟队列:队列本身就是有序列表,如果使用数组结构来存储队列的数据,声明如下,其中maxSize是最大容量。 因为的输入输出是分别从前后端来处理的,因此需要用两个变量front和rear来记录队列前后端的下标,front会随着数据的输出而改变,rear随着数据的输入而改变。思路分析:判满(rear==maxSize-1) 判空(front==rear) 加入数据,尾指针后移 取出数据.原创 2020-08-07 17:32:11 · 218 阅读 · 0 评论 -
JAVA数据结构与算法——稀疏数组及其代码实现
稀疏数组介绍:当一个数组中大部分元素是0,或者为同一个值的数组的时候,可以使用稀疏数组来保存该数组。处理方法:记录数组一共有几行几列,有多少个不同的值 把具有不同的值的元素的行列值记录在一个小规模的数组中,从而缩小程序的规模举例说明:图1-1数组举例图1-2处理后的数组注:第一行指的是数组为6行7列,有效数据有8个的数组。压缩后的数组为9*3。应用场景举例:例如:五子棋程序中,有存盘退出和续上盘的功能。思路分析:二维数组转稀疏数组:遍历原始的二维..原创 2020-08-07 00:22:43 · 183 阅读 · 0 评论 -
JAVA数据结构与算法——线性结构与非线性结构
JAVA数据结构与算法——线性结构与非线性结构线性结构线性结构作为常用的数据结构,其特点是数据元素之间存在着一对一的线性关系 有两种不同的存储结构,顺序存储(数组)以及链式存储(链表)。 顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的。 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。 线性结构常见的有:数组、队列、链表和栈。非线性结构非线性结构包括:二维数组、多维数组、广义表、树结构、图结构。注:内容编写于相关学.原创 2020-08-05 21:03:41 · 137 阅读 · 0 评论