- 博客(20)
- 收藏
- 关注
原创 中缀表达式转换为后缀表达式
中缀表达式转换为后缀表达式后缀表达式适合计算式进行运算,但是人却不太容易写出来,尤其是表达式很长的情况下,因此在开发中,我们需要将 中缀表达式转成后缀表达式。1.转换具体步骤:初始化两个栈:运算符栈s1和储存中间结果的栈s2从左至右扫描中缀表达式遇到操作数时,将其压s2遇到运算符时,比较其与s1栈顶运算符的优先级:1. 如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈2. 否则,若优先级比栈顶运算符的高,也将运算符压入s13. 否则,将s1栈顶的运算符弹出并压入到s2中,再
2021-09-01 12:31:18
1393
原创 栈——逆波兰表达式
栈——逆波兰表达式完成一个逆波兰计算器,需要完成如下任务:输入一个逆波兰表达式(后缀表达式),使用栈(Stack), 计算其结果支持小括号和多位数整数思路分析计算:(3+4)* 5 - 6。首先:得到他的后缀表达式为:3 4 + 5 * 6 -逆波兰表达式求值步骤:1. 从左至右扫描,将3和4push进栈2. 遇到+运算符,pop出4和3,计算出3+4的值得到7,再将7push进栈3. 将5入栈4. 接下来是 * 运算,pop出5和7得到35,将35push进栈5. 让6入栈
2021-08-31 15:58:20
546
原创 栈实现综合计算器(2)
栈实现综合计算器(2)优点:可以实现多位数的加减乘除的计算缺点:中缀表达式的求值是我们人最熟悉的,但是对计算机来说却不好操作。思路分析当我们把表达式存储在一个字符串当中时候,每次用index去扫描,对于多位数,我们就可以看作是多个单个字符串的拼接。因此,每次当我们利用index进行扫描读取数据的时候,还需要考虑index的下一位,如果是数据的话,就继续向下一位扫描,直到是操作符为止然后将数据拼接后,可以利用包装类再将字符串转换成数据的形式,便于接下去的计算操作。代码实现其余部分的代码详细
2021-08-31 13:02:41
189
原创 栈实现综合计算器(1)
栈实现综合计算器主要模拟的是利用栈的先进后出的特性实现中缀表达式的计算功能。1.思路分析:使用栈实现表达式计算的思路首先需要一个index值来扫描遍历我们的表达式,提取出数据和操作符如果是数据,则push进数据栈如果是操作符,则push进操作符栈,其中需要考虑以下几种情况3.1 如果发现当前的符号栈为 空,就直接入栈3.2如果操作符栈有操作符,就进行比较。如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,同时在从符号栈中pop出一个符号,进行运算,并且将得到结
2021-08-31 11:28:58
93
原创 数据结构与算法——栈
数据结构与算法——栈本文基于数组来实现栈的入栈与出栈的功能,除此以外,链表和队列也可实现。栈的介绍栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最
2021-08-30 17:29:19
164
原创 数据结构与算法——双向链表
数据结构与算法——双向链表1.单向链表的缺点分析:单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。单向链表不能自我删除,需要依靠辅助节点;而双向链表,则可以自我删除。2.双向链表思路分析:分析双向链表的遍历、添加、修改、删除的操作思路。(1)遍历:方法和单链表一样,只是可以向前,也可以向后查找(2)添加:默认添加到双向链表的最后先找到双向链表的最后这个节点temp.next = newHeroNodenewHeroNode.pre = temp;(3)
2021-08-30 10:09:18
156
原创 数据结构与算法——单链表(2)
数据结构与算法——单链表(2)在数据结构与算法——单链表(1)的基础上对于添加节点的算法的优化,不是仅仅添加于链表末尾,而是按照编号顺序添加。同时,增加了删除,更新的算法功能。思路分析1.添加算法:根据编号顺序将节点插入到指定位置(如果已经存在,则添加失败)首先找到新添加的节点的位置, 是通过辅助变量(指针), 通过遍历来搞定新的节点.next = temp.next将temp.next = 新的节点2.更新节点算法:首先,通过遍历,找到该节点找到后,令temp.name = ne
2021-08-28 11:59:19
123
原创 数据结构与算法——单链表(1)
数据结构与算法——单链表(1)链表介绍链表是有序的列表,但是它在内存中是存储如下:链表是以节点的方式来存储,是链式存储每个节点包含 data 域, next 域:指向下一个节点的data域如图:发现链表的各个节点不一定是连续存储链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定单链表的介绍单链表(带头结点) 逻辑结构示意图如下使用带头节点的单向链表实现人物的增删改查操作,此处是第一种较为简单的方法,直接添加到链表的尾部。思路分析此处主要演示的是添加(创建)先创建
2021-08-28 09:32:11
454
原创 数据结构与算法——环形队列
数据结构与算法——环形队列数组模拟环形队列单列队列的缺点:浪费内存,当front指针后移之后,front指针前面的内存空间无法再进行利用,且指定数组长度后,无法开辟新的空间进行存储数据。对前面的数组模拟队列的优化,充分利用数组. 因此将数组看做是一个环形的。(通过取模的方式来实现即可)分析说明尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,这个在做判断队列满的时候需要注意 (rear + 1) % maxSize == front ,此时队列已满。rear == f
2021-08-27 19:04:30
658
原创 数据结构与算法——单列队列
数据结构与算法——单列队列队列介绍队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出示意图:使用数组模拟队列示意图数组模拟队列队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及 rear分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear则是随着数据输入而改变。
2021-08-27 13:41:19
402
2
原创 数据结构与算法——稀疏数组
数据结构与算法——稀疏数组(学习内容为尚硅谷韩顺平老师的JAVA数据结构与算法)1、什么是稀疏数组:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。2、稀疏数组的处理方法:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模3、二维数组->稀疏数组转换说明:首先我们需要有一个已知的二维数组,也可以自己创建一个确定行数和列数以及具体数值的二维数组。然后,在已知二维数组的情况下开始创建稀疏数
2021-08-27 10:59:10
180
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人