http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2484&cid=1182

题目描述

小明在学习了数据结构之后,突然想起了以前没有解决的算术表达式转化成后缀式的问题,今天他想解决一下。
   因为有了数据结构的基础小明很快就解出了这个问题,但是他突然想到怎么求出算术表达式的前缀式和中缀式呢?小明很困惑。聪明的你帮他解决吧。

输入

 输入一算术表达式,以\'#\'字符作为结束标志。(数据保证无空格,只有一组输入)

输出

 输出该表达式转换所得到的前缀式 中缀式 后缀式。分三行输出,顺序是前缀式 中缀式 后缀式。

示例输入

a*b+(c-d/e)*f#

示例输出

+*ab*-c/def
a*b+c-d/e*f
ab*cde/-f*+ 这个题的话,看了白皮书上的那个建树,然后再写上前后中序遍历就可以了,其余的话,注意一下输入就可以,代码中两种输入都可以。
 #include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
using namespace std;
const int maxn = ;
int lch[maxn],rch[maxn];
char op[maxn];
int nc=;
int build_tree(char *s,int x,int y)
{
int i,c1=-,c2=-,p=;
int u ;
if(y-x==)
{
u=++nc;
lch[u]=rch[u] = ;
op[u] = s[x] ;
return u;
} for(i = x ; i < y ; i++)
{
switch(s[i])
{
case '(':
p++;
break;
case ')':
p--;
break;
case '+':
case '-':
if(!p) c1=i;
break;
case '*':
case '/':
if(!p) c2=i;
break;
}
}
if(c1<) c1 = c2 ;
if(c1 < ) return build_tree(s,x+,y-);
u=++nc;
lch[u] = build_tree(s,x,c1);
rch[u] = build_tree(s,c1+,y);
op[u] = s[c1];
return u ;
}
void preorder(int u)
{
if(u)
{
printf("%c", op[u]);
preorder(lch[u]);
preorder(rch[u]);
}
} void inorder(int u)
{
if(u)
{
inorder(lch[u]);
printf("%c", op[u]);
inorder(rch[u]);
}
} void postorder(int u)
{
if(u)
{
postorder(lch[u]);
postorder(rch[u]);
printf("%c",op[u]);
}
}
int main()
{
char s[];
//int count ;
int i=;
for(i = ; ; i ++)
{
scanf("%c",&s[i]);
if(s[i]=='#')
break;
}
s[++i]='\0';
/*scanf("%c",&s[i++]);
while(s[i-1]!='#')
{
scanf("%c",&s[i++]);
}
s[i]='\0';*/
//scanf("%s",s);
int len = strlen(s);
int u = build_tree(s,,len-);
preorder(u);
printf("\n");
inorder(u);
printf("\n");
postorder(u);
printf("\n");
return ;
}

这个题还有很多别的做法,可以借鉴一下大神们的博客

http://blog.csdn.net/lin375691011/article/details/9372245

这个的话贵在也简单在用了栈和队列,

http://www.cnblogs.com/kongkaikai/archive/2013/07/30/3224683.html


SDUT2484算术表达式的转换的更多相关文章

  1. SDUT2484 算术表达式的转换(表达式树)

    题目链接. 分析: 转换成表达式树,然后先序.中序.后序遍历. AC代码如下: #include <stdio.h> #include <string.h> #define m ...

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

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

  3. Project Euler 93:Arithmetic expressions 算术表达式

    Arithmetic expressions By using each of the digits from the set, {1, 2, 3, 4}, exactly once, and mak ...

  4. C++算术运算符与算术表达式

    基本的算术运算符 在本章中主要介绍算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,其他运算符将在以后各章中陆续介绍. 常见算数运算符 运算符 说明 举例 + 加法运算符,或正值 ...

  5. java实现算术表达式求值

    需要根据配置的表达式(例如:5+12*(3+5)/7.0)计算出相应的结果,因此使用java中的栈利用后缀表达式的方式实现该工具类. 后缀表达式就是将操作符放在操作数的后面展示的方式,例如:3+2 后 ...

  6. [Java]算术表达式求值之二(中序表达式转后序表达式方案,支持小数)

    Inlet类,入口类,这个类的主要用途是验证用户输入的算术表达式: package com.hy; import java.io.BufferedReader; import java.io.IOEx ...

  7. [Java]算术表达式求值之一(中序表达式转后序表达式方案)

    第二版请见:https://www.cnblogs.com/xiandedanteng/p/11451359.html 入口类,这个类的主要用途是粗筛用户输入的算术表达式: package com.h ...

  8. 利用栈实现算术表达式求值(Java语言描述)

    利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...

  9. OpenJudge计算概论-简单算术表达式求值

    /*===================================== 简单算术表达式求值 总时间限制: 1000ms 内存限制: 65536kB 描述 2位正整数的简单算术运算(只考虑整数运 ...

随机推荐

  1. Uncaught SyntaxError: Unexpected token ILLEGAL【js错误】

    应该是逗号的中英文状态错了,应该是英文状态的逗号.还有百度应用后面的逗号.college后面的冒号

  2. WP开发笔记——WP APP添加页面跳转动画

    微软的toolkit团队为我们为我们提供了这样一套组件,叫做TransitionServices服务. 简单说一下它具备的效果: turnstile(轴旋转效果): turnstile feather ...

  3. SharedPreferences的基本用法

    获取SharedPreferences的两种方式: 1 调用Context对象的getSharedPreferences()方法 2 调用Activity对象的getPreferences()方法 两 ...

  4. jquery插件formValidator的ajaxValidator传参数问题

    最近在用formValidator插件,遇到一个问题.当我想用ajaxValidator的url传参数时,$("#tbName").val().document.getElemen ...

  5. Mac OS + Nginx + Mysql + PHP 本地环境搭建

    本文是用Mac系统下搭建的环境,使用Linux的童鞋也不要在意,因为很相似,只有下载安装的方式有一点区别.直接进入正文: 1.首先我们需要下载Homebrew,Homebrew简称brew,是Mac ...

  6. 当年的笔记_apache配置虚拟主机

    下午需要,在网上找了一堆,没找到合适的,翻出来自己当年的笔记,还是自己记的容易理解. 解决方案1:通过端口来区分 1>添加一个虚拟主机1.在d盘下新建www目录,如:d:/www. 2.修改ht ...

  7. windows bat脚本实现ftp自动下载 删除

    现在有一个需求就是把远程某个文件下面的图片,下载到本地,并且删除下载成功的的文件,而且远程目录下的那个图片会随时增加.假设一下如果所有的脚本都写好了,那么就需要调用windows上的计划任务定时执行脚 ...

  8. UDP HelloWord

    Client.cpp #include <stdio.h> #include <winsock2.h> #pragma comment (lib,"ws2_32&qu ...

  9. SQL中的类型转换

    SQL中的类型转换一直是以块心病,因为用得比较少,所以每次想用的时候都要想半天,恰好这段时间比较空,整理整理.今天写个标题先.

  10. 批量修改文件后缀(Python)

    近期下载了很多各种教程, 但是不幸的是后缀名都是 ".mp4", 而本人喜欢 ".rmvb" 后缀,由于有轻微洁癖, 受不了后面的 ".mp4&quo ...