SPOJ 4. Transform the Expression

原创 2012年03月26日 17:42:30

将中缀表达式转换为后缀表达式,大家应该都很熟悉。具体过程为先为可能出现的括号和操作符('(','+','-','*','/‘,'^'等)赋一个优先级,其中'('优先级最低。然后顺次扫描输入的表达式(即字符串),

1. 碰到'('时,直接入栈

2. 碰到操作符时,如果优先级大于栈顶操作符的优先级,则入栈,否则将其直接输出

3. 碰到')'时,将栈中的所有操作符出栈直到碰到'('时为止,但并不输出'('

4. 对于操作数直接输出

算法涉及四种输入(左括号,右括号,操作符和操作数)和两种操作(入栈和持续出栈)。另外就是语言方面,python的print默认是换行的,虽然在语句后加逗号可以在同一行,但是会在逗号后加一个空格,如果要既不换行也不加空格,网上的方法都是用sys.stdout.write()。此外,input()和raw_input()最大的区别就是input()返回一个整数而raw_input()返回的是字符串。要访问字符串中的每个字符,在python中可以直接用for c in str。

import sys

priority={'(':0,'+':1,'-':2,'*':3,'/':4,'^':5}
stack=[]
t=input()
while t:
    exp=raw_input()
    for c in exp:
        if c=='(':
            stack.append(c)
        elif c==')':
            while 1:
                p=stack.pop()
                if p<>'(':
                    sys.stdout.write(p)
                else:
                    break;
        elif c=='+' or c=='-' or c=='*' or c=='/' or c=='^':
            if priority[c]>priority[stack[-1]]:
                stack.append(c)
            else:
                sys.stdout.write(c)
        else:
            sys.stdout.write(c)
    print
    t=t-1



SPOJ Transform the Expression 逆波兰式算法题解

把带括号的一般正常的算式,转换成逆波兰式。 输入和输出如下例子: Input: 3 (a+(b*c)) ((a+b)*(z+x)) ((a+t)*((b+(a+c))^(c+d))) Output...
  • kenden23
  • kenden23
  • 2014年04月16日 16:38
  • 934

Transform the Expression

// http://www.spoj.com/problems/ONP/ #include #include #include #include using std::cin; using...
  • spotboy
  • spotboy
  • 2014年01月12日 06:09
  • 313

Spoj数论专场解题报告

Spoj数论专题http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=8035#overview  Problem ...
  • wxfwxf328
  • wxfwxf328
  • 2012年05月29日 11:03
  • 5358

SPOJ GSS

SPOJ GSS系列题目简要题解
  • bhiaibogf
  • bhiaibogf
  • 2016年02月22日 21:37
  • 478

SPOJ HIGH (生成树计数)

HIGH - Highways no tags  In some countries building highways takes a lot of time... Mayb...
  • morejarphone
  • morejarphone
  • 2016年05月05日 21:12
  • 222

SPOJ220:Relevant Phrases of Annihilation(后缀数组)

Description You are the King of Byteland. Your agents have just intercepted a batch of encrypte...
  • libin56842
  • libin56842
  • 2015年06月08日 11:43
  • 1094

SPOJ QTREE 系列

QTREE Query on a tree 树链剖分:QTREE LCT:QTREE QTREE2 Query on a tree II 倍增LCA:QTREE2 PTO7J Query o...
  • u013654696
  • u013654696
  • 2015年08月04日 00:14
  • 812

SPOJ DIVCNT2

题目链接: http://www.spoj.com/problems/DIVCNT2/根据rzz的课件 可以分三段做度教搞出来一种分一次做的方法 看起来很神的样子#include #include...
  • liutian429073576
  • liutian429073576
  • 2016年11月16日 16:19
  • 503

SPOJ DQUERY D-query 主席树

题目:http://www.spoj.com/problems/DQUERY/en/ 题意:给定一个数组,每次询问一个区间内不同元素的个数 思路:看的别人的思路。对于一个数,如果以前没出现过就插入...
  • discreeter
  • discreeter
  • 2016年09月03日 15:16
  • 521

spoj FTOUR2(树的分治)

题目链接 QZC树的分治论文第二道例题, 自己想了想觉得没什么思路, 后来看了论文中的解法看到中间时想到了一个线段树优化dp的解法, 论文中也提到的令dp[L] 标示从当前根结点向下经过L个crow...
  • tjdrn
  • tjdrn
  • 2013年08月17日 11:18
  • 940
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SPOJ 4. Transform the Expression
举报原因:
原因补充:

(最多只允许输入30个字)