NYOJ467 中缀式变后缀式 【栈】
中缀式变后缀式
- 描写叙述
-
人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式。关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供參看。这里不再赘述,如今你的任务是将中缀式变为后缀式。
- 输入
-
第一行输入一个整数n,共同拥有n组測试数据(n<10)。
每组測试数据仅仅有一行。是一个长度不超过1000的字符串,表示这个运算式的中缀式,每一个运算式都是以“=”结束。
这个表达式里仅仅包括+-*/与小括号这几种符号。当中小括号能够嵌套使用。数据保证输入的操作数中不会出现负数。
数据保证除数不会为0
- 输出
- 每组都输出该组中缀式对应的后缀式,要求相邻的操作数操作符用空格隔开。
- 例子输入
-
2
1.000+2/4=
((1+2)*5+1)/4= - 例子输出
-
1.000 2 4 / + =
1 2 + 5 * 1 + 4 / = - 来源
- 数据结构
- 上传者
-
userid=mix_math" style="text-decoration:none; color:rgb(55,119,188)">mix_math
题意:...
题解:须要两个栈,一个是符号sta栈。一个是后缀式out栈,每次在buf中读取字符时。假设是数字或者‘.’,则直接存到out栈里,假设是别的字符。则将它放入sta栈,前提是保证sta栈内优先级严格递减。
#include <stdio.h>
#include <string.h>
#include <ctype.h> #define maxn 1010 char buf[maxn], out[maxn << 1];
char sta[maxn]; // 符号栈
int id, id2; int getLevel(char ch) {
switch(ch) {
case '(': return 0;
case '+':
case '-': return 1;
case '*':
case '/': return 2;
}
} void check(char ch) {
int level;
if(ch == '(') sta[id2++] = ch;
else if(ch == ')') {
while(sta[id2-1] != '(') {
out[id++] = sta[--id2];
out[id++] = ' ';
}
--id2;
} else {
while(id2 && getLevel(sta[id2-1]) >= getLevel(ch)) {
out[id++] = sta[--id2]; out[id++] = ' ';
}
sta[id2++] = ch;
}
} void solve() {
int i, sign; id = id2 = 0;
for(i = sign = 0; buf[i] != '='; ++i) {
if(isdigit(buf[i]) || buf[i] == '.') {
out[id++] = buf[i]; sign = 1;
} else {
if(sign) {
out[id++] = ' ';
sign = 0;
}
check(buf[i]);
}
}
while(id2) {
if(sign) {
out[id++] = ' ';
sign = 0;
}
out[id++] = sta[--id2];
out[id++] = ' ';
}
out[id] = '\0';
printf("%s=\n", out);
} int main() {
// freopen("stdin.txt", "r", stdin);
int t;
scanf("%d", &t);
while(t--) {
scanf("%s", buf);
solve();
}
return 0;
}
NYOJ467 中缀式变后缀式 【栈】的更多相关文章
- nyoj 467 中缀式变后缀式 (栈)
中缀式变后缀式 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀 ...
- NYOJ 467 中缀式变后缀式
做了表达式求值那道题之后做的 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更"习惯于"后 ...
- NYOJ--257--郁闷的C小加(一)(中缀表达式变后缀表达式 )
郁闷的C小加(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...
- [Code] 中缀式转后缀式
[Code] 中缀式转后缀式 概要 对于一个可带括号的中缀四则运算表达式, 例如30 + 4 / 2 或 30 / ( 4 + 2 ), 下面代码将分别转换为对应的后缀表达形式 30 4 2 / + ...
- 中缀表达式变后缀表达式、后缀表达式(逆波兰)求值(python版本)
定义: 中缀表达式: 在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表达式 后缀表达式: 又叫逆波兰表达式 ,不包含括号,运算符放在两个运算对象的后面,所有的计算 ...
- 栈的简单应用之中缀表达式转后缀表达式(C语言实现逆波兰式)
一.前言 普通人在书写计算式时会选择中缀表达式,这样符合人脑的认知习惯.可计算机处理时后缀表达式才能使处理速度更快,其原因是利用堆栈结构减少计算机内存访问.同时它也是一个很好锻炼栈这个数据结构的应 ...
- SDUT 2133 数据结构实验之栈三:后缀式求值
数据结构实验之栈三:后缀式求值 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 对于一个基于二元运算符的后缀表示式(基本操作数都是 ...
- SDUT-2133_数据结构实验之栈与队列三:后缀式求值
数据结构实验之栈与队列三:后缀式求值 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运算符的后缀表示式 ...
- SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...
随机推荐
- 我对C++的一些疑问
我对C++的一些疑问,最近使用C++,总感觉有些东西自己没有抓住,也可能是自己基础学的不是很扎实,所以对一些基本的东西理解不够透彻导致的.因为自己在学校也学过C#和java,C#它是一个完全的面向对象 ...
- 常用的兼容IE和火狐FF等浏览器的js方法(js中ie和火狐的一些差别)
介绍了网页上常用的IE/火狐兼容性该页的做法,并给出了代码,相当实用了.为了方便大家阅读代码,以下以 IE 代替 Internet Explorer,以 MF/FF 代替 Mozzila Firefo ...
- FreeRTOS 事件标志组
以下转载自安富莱电子: http://forum.armfly.com/forum.php 为什么要使用事件标志事件标志组是实现多任务同步的有效机制之一.也许有不理解的初学者会问采用事件标志组多麻烦, ...
- 起来吧!不要做奴隶的ITproject师们!
本文转自林忠信的博客: http://davylin.blog.163.com/blog/static/8138791201441465328380/ 起来吧! 不要做奴隶的ITproject师们! ...
- PHP中Array的hash函数实现
PHP中使用最多的非Array莫属了,那Array是如何实现的? 在PHP内部Array通过一个hashtable来实现,其中使用链接法解决hash冲突的问题,这样最坏情况下,查找Array元素的复杂 ...
- 【转】【C#】判断当前操作系统
写一个判断操作系统的工具类OSHelper.cs public class OSHelper { // 获取操作系统ID public static System.PlatformID GetPlat ...
- [shell]shell脚本传入不固定参数的写法,如--help等
最近在调试一个wifi模块,需要传一些不固定的参数,一下一个参数解析的函数可以搞定这个事情,里面内容好多部分是从一个example中剽窃而来(窃喜) #!/bin/bash # writen by a ...
- 设计模式-观察者模式(上)<转>
本文参考Head First设计模式一书,感觉书中的例子实在很好,很贴切.对模式的知识点进行总结,并对书的源码做了一定注释. 观察者模式要点有二:主题和观察者. 最贴切的案例是:杂志订阅,杂志是主 ...
- 内核定时器timer_list
内核在时钟中断发生后执行检测各个定时器是否到期,到期后的定时器处理函数将作为软中断在底半部执行.实质上,时钟中断处理程序会唤起TIMER_SOFTIRQ软中断,运行当前处理器上到期的所有定时器.lin ...
- Idea配置sbt(window环境)
近开发spark项目使用到scala语言,这里介绍如何在idea上使用sbt来编译项目. 开发环境:windows 1. 下载sbt http://www.scala-sbt.org/download ...