《数据结构与算法分析-java语言描述》 -- 栈结构在编程中的应用例子(平衡符号、后缀表达式求值、中缀转后缀、方法调用)
发布日期:2021-06-30 16:57:18
浏览次数:2
分类:技术文章
本文共 1621 字,大约阅读时间需要 5 分钟。
文章目录
平衡符号
说明
- 通过栈的特性。 模拟编译器检查程序的语法错误。
- (简化版)只检查 [、{、(、}、]、}、)、},是否有前有后。
- 运行时间O(N)
代码
package cn.edut.test_stack;import java.util.Arrays;import java.util.Stack;import org.junit.Test;public class Demo_Stack { @Test public void test001() { String sTrue = "public boolean isLegal(String inputString) {\r\n" + " StacksIndex = new Stack<>() ; // 存符号对应index的栈\r\n" + " char[] cs = inputString.toCharArray();\r\n" + " char[] prevChar = {'[','{','('};\r\n" + " char[] endChar = {']','}',')'};" + " }" ; //true System.out.println(isLegal(sTrue)); //true String sFalse = "public boolean isLegal(String inputString) {" ; System.out.println(isLegal(sFalse)); //false } public boolean isLegal(String inputString) { Stack sIndex = new Stack<>() ; // 存符号对应index的栈 char[] cs = inputString.toCharArray(); char[] prevChar = { '[','{','('}; char[] endChar = { ']','}',')'}; for(int i=0 ; i 0) { // sIndex.push(index); } if(!sIndex.isEmpty()) { //栈有值,进入循环, int temp = sIndex.pop(); if(endChar[temp] != cs[i] ) { sIndex.push(temp) ; } } } if(sIndex.isEmpty()) { return true; } return false; }}
后缀表达式求值
说明
- 数字、符号间需要用空格隔开
- 运行时间O(N)
中缀转后缀写了一个完整的计算器
仅后缀表达式求值的代码:()
中缀转后缀(递归实现)
说明
- 尝试用迭代写的(网上好多都是传统算法)
- 时间复杂度O(N)
算法思路
-
定义一个全局的指针,记录遍历到的位置
-
没有遇到“(”前,使用传统算法:
2.1. 遍历表达式, 2.2. 遇到数字就进结果,遇到运算符就取出栈顶,进行运算符的优先级比较,最后进栈 (栈顶比较规则:栈顶优先级高,就进运算结果。否则就返回栈顶次位。) -
当遇到“(”后,进入迭代,新创建一个空的栈和List返回值。从现在的位置继续遍历表达式。直到遇到“)”。
-
当遇到“)”,立即返回。返回值和上一个迭代的返回值合并(如果有的话)。然后,继续上一级迭代的遍历。
-
当全局指针指向末尾,指针初始化,返回计算的值。
代码
结合上面的后缀求值,就直接写了一个完整的Calculator。
代码链接:转载地址:https://lawsssscat.blog.csdn.net/article/details/102962279 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月26日 19时17分20秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【python练习题】遍历1
2019-04-30
【matlab】显示图片且下方显示文字
2019-04-30
关于greater<int>以及类模板的一些理解
2019-04-30
对于时间复杂度的通俗理解
2019-04-30
如何输入多组数据并输出每组数据的和?
2019-04-30
基于CentOS 7的Linux常用命令行命令
2019-04-30
行阶梯型矩阵
2019-04-30
信号量机制
2019-04-30
临界资源与临界区
2019-04-30
matlab中uint8,double,im2double和im2uint8的区别
2019-04-30
数字图像处理总复习
2019-04-30
图像去噪(包含修正的阿尔法均值滤波及通用滤波方法代码)
2019-04-30
SVM进行人脸检测
2019-04-30
C++学习笔记
2019-04-30
图像处理学习笔记
2019-04-30
Machine Learning Onramp on MATLAB 学习笔记
2019-04-30
Machine Learning with MATLAB 1.1 to 2.2
2019-04-30
Learning DSP with MATLAB
2019-04-30
用MATLAB实现m序列的生成(MATLAB 2021a适用)
2019-04-30
MATLAB函数备忘(定期更新)
2019-04-30