数据结构实验之栈与队列二:一般算术表达式转换成后缀式

本文主要是介绍数据结构实验之栈与队列二:一般算术表达式转换成后缀式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据结构实验之栈与队列二:一般算术表达式转换成后缀式

Description
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。

Input
输入一个算术表达式,以‘#’字符作为结束标志。

Output
输出该表达式转换所得到的后缀式。

Samples
Sample #1
Input
a*b+(c-d/e)*f#

Output
abcde/-f+

分析:

一般表达式转换后缀式的规则:

   首先,表达式有字母、加减号、乘除号、左括号和右括号组成,理清优先顺序,如果当前操作符大于栈顶操作符,则入栈;若小于,则弹出栈顶操纵符,直至满足入栈要求,或直至栈空字母:不需要入栈,直接输出加减号:优先级小于乘除号,入栈时大于左括号乘除号:优先级最大,入栈时大于左括号左括号:入栈时优先级最高(因为先算括号里面的),所以直接入栈,不需要判断,入栈后优先级最低,等待右括号的到来右括号:作用是弹出栈中遇到左括号之前的所有操作符,然后将左括号pop一下(左括号不能输出)

同级操作符的优先级:

按照运算从左至右的顺序,举个例子:当前判断的元素是’+‘,栈顶元素是’+‘或’-‘,那么栈顶元素需弹出,因为在一般表达式中栈顶元素在当前判断元素的左边,所以先运算

#include<iostream>
#include<stack>
#include<string>
using namespace std;int main()
{stack<char> mystack;string s;cin>>s;for(int i = 0;s[i]!='#';i++){if(s[i]>='a'&&s[i]<='z')cout<<s[i];else if(s[i]=='(')mystack.push(s[i]);else if(s[i]==')'){while(mystack.top()!='('){cout<<mystack.top();mystack.pop();}mystack.pop();}else if(s[i]=='+'||s[i]=='-'){while(mystack.size()!=0&&mystack.top()!='('){cout<<mystack.top();mystack.pop();}mystack.push(s[i]);}else if(s[i]=='*'||s[i]=='/'){while(mystack.size()!=0&&mystack.top()!='('&&(mystack.top()=='*'||mystack.top()=='/')){cout<<mystack.top();mystack.pop();}mystack.push(s[i]);}}while(mystack.size()!=0){cout<<mystack.top();mystack.pop();}return 0;
}

这篇关于数据结构实验之栈与队列二:一般算术表达式转换成后缀式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/718886

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

hdu1180(广搜+优先队列)

此题要求最少到达目标点T的最短时间,所以我选择了广度优先搜索,并且要用到优先队列。 另外此题注意点较多,比如说可以在某个点停留,我wa了好多两次,就是因为忽略了这一点,然后参考了大神的思想,然后经过反复修改才AC的 这是我的代码 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

poj 3190 优先队列+贪心

题意: 有n头牛,分别给他们挤奶的时间。 然后每头牛挤奶的时候都要在一个stall里面,并且每个stall每次只能占用一头牛。 问最少需要多少个stall,并输出每头牛所在的stall。 e.g 样例: INPUT: 51 102 43 65 84 7 OUTPUT: 412324 HINT: Explanation of the s

poj 2431 poj 3253 优先队列的运用

poj 2431: 题意: 一条路起点为0, 终点为l。 卡车初始时在0点,并且有p升油,假设油箱无限大。 给n个加油站,每个加油站距离终点 l 距离为 x[i],可以加的油量为fuel[i]。 问最少加几次油可以到达终点,若不能到达,输出-1。 解析: 《挑战程序设计竞赛》: “在卡车开往终点的途中,只有在加油站才可以加油。但是,如果认为“在到达加油站i时,就获得了一

多重背包转换成0-1背包

http://acm.hdu.edu.cn/showproblem.php?pid=2191 多重背包特点: 一种物品有C个(既不是固定的1个,也不是无数个) 优化的方法: 运用神奇的二进制,进行物品拆分,转化成01背包 物品拆分,把13个相同的物品分成4组(1,2,4,6) 用这4组可以组成任意一个1~13之间的数! 原理:一个数总可以用2^