中缀式变后缀式

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描写叙述
人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式。关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供參看。这里不再赘述,如今你的任务是将中缀式变为后缀式。

输入
第一行输入一个整数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 中缀式变后缀式 【栈】的更多相关文章

  1. nyoj 467 中缀式变后缀式 (栈)

    中缀式变后缀式 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀 ...

  2. NYOJ 467 中缀式变后缀式

    做了表达式求值那道题之后做的 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更"习惯于"后 ...

  3. NYOJ--257--郁闷的C小加(一)(中缀表达式变后缀表达式 )

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...

  4. [Code] 中缀式转后缀式

    [Code] 中缀式转后缀式 概要 对于一个可带括号的中缀四则运算表达式, 例如30 + 4 / 2 或 30 / ( 4 + 2 ), 下面代码将分别转换为对应的后缀表达形式 30 4 2 / + ...

  5. 中缀表达式变后缀表达式、后缀表达式(逆波兰)求值(python版本)

    定义: 中缀表达式: 在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表达式 后缀表达式: 又叫逆波兰表达式 ,不包含括号,运算符放在两个运算对象的后面,所有的计算 ...

  6. 栈的简单应用之中缀表达式转后缀表达式(C语言实现逆波兰式)

    一.前言   普通人在书写计算式时会选择中缀表达式,这样符合人脑的认知习惯.可计算机处理时后缀表达式才能使处理速度更快,其原因是利用堆栈结构减少计算机内存访问.同时它也是一个很好锻炼栈这个数据结构的应 ...

  7. SDUT 2133 数据结构实验之栈三:后缀式求值

    数据结构实验之栈三:后缀式求值 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 对于一个基于二元运算符的后缀表示式(基本操作数都是 ...

  8. SDUT-2133_数据结构实验之栈与队列三:后缀式求值

    数据结构实验之栈与队列三:后缀式求值 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运算符的后缀表示式 ...

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

    数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...

随机推荐

  1. ny788 又见Alice and Bob

    又见Alice and Bob 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 集训生活如此乏味,于是Alice和Bob发明了一个新游戏.规则如下:首先,他们得到一个 ...

  2. 【快速查阅】SQLPLUS连接ORACLE

    使用SQLPLUS连接ORACLE常用的有两种方式. 一.简易方式 sqlplus 用户名/密码@IP或主机名:端口/数据库服务名称 二.预先配置TNSNAMES的方式 在“%ORACLE_HOME% ...

  3. Spark的基本说明

    1.关于Application 用户程序,一个Application由一个在Driver运行的功能代码和多个Executor上运行的代码组成(工作在不同的节点上). 又分成多个Job,每个Job由多个 ...

  4. LINQ架构简单描述

    写在前面的话:课堂上老师只是简单提了一下LINQ,当时听着老师对它的描述,感觉非常神奇,不用去操作繁琐的SQL语句了,读取数据库的操作居然能向写C#代码一样方便,但是一直没有机会去学习使用它. LIN ...

  5. tomcat 的线程池配置,字符编码设置

    优化tomcat配置  ,修改原先的配置 conf/server.xml 配置 <Executor name="tomcatThreadPool" namePrefix=&q ...

  6. dp之二维背包poj1837(天平问题 推荐)

    题意:给你c(2<=c<=20)个挂钩,g(2<=g<=20)个砝码,求在将所有砝码(砝码重1~~25)挂到天平(天平长  -15~~15)上,并使得天平平衡的方法数..... ...

  7. 屏幕亮度(XE10.1+WIN8.164)

    相关资料: http://bbs.csdn.net/topics/390664310 实例代码: unit Unit1; interface uses Winapi.Windows, Winapi.M ...

  8. 【WPF/C#】使用BackgroundWorker实现多线程/异步操作

    做WPF时需要做一个异步加载时的Loading遮罩,搜Stackoverflow看到很多方法,看到了这个插件: BusyIndicator in the extended WPF Toolkit 同时 ...

  9. win7共享文件夹设置无密码

    首先我们要启用guest账户,右键计算机 2 选择管理 3 选择本地用户和组 4 然后选择用户 5 然后选择Guest右键——属性——把账户已禁用勾掉,就可以了 6 然后点击桌面网络右键——属性 7 ...

  10. centos 部署 SparkR

    ---恢复内容开始--- 环境配置—— 操作系统:CentOS 6.5 JDK版本:1.7.0_67 Hadoop集群版本:CDH 5.3.0 安装过程—— 1.(1)安装R yum install ...