数据结构实验之栈二:一般算术表达式转换成后缀式
2012-11-07 20:02
288 查看
数据结构实验之栈二:一般算术表达式转换成后缀式
Time Limit: 1000MS Memory limit: 65536K
题目描述
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。输入
输入一个算术表达式,以‘#’字符作为结束标志。输出
输出该表达式转换所得到的后缀式。示例输入
a*b+(c-d/e)*f#
示例输出
ab*cde/-f*+
学了书上的二叉树建树后,想将表达式建成树然后采用后序遍历的方式输出后缀式,写出来后发现与书上建成的树,有点不一样,查了很多便,也没出现什么原因,在学校的oj上交了之后却发现对了,才知道书上的建树建错了,数据结构 P129上的。与大家分享一下
#include <iostream> #include <string.h> #include <stdio.h> using namespace std; class num { public: char c; num *rchild,*lchild; }; num *statck1[1000000]; char statck2[1000000]; char s1[1000000]; int main() { num *newnode(); void post(num *p); int i,j,n,m,s,t; int l; int top1,top2; num *pr,*pl,*p,*head; gets(s1); l=strlen(s1); top1=top2=0; for(i=0;i<=l-2;i++) { if(s1[i]=='+'||s1[i]=='-'||s1[i]=='*'||s1[i]=='/'||s1[i]=='(') { if(top2==0||s1[i]=='('||statck2[top2-1]=='(') { statck2[top2++]=s1[i]; }else if(s1[i]=='*'||s1[i]=='/') { if(statck2[top2-1]=='*'||statck2[top2-1]=='/') { p=newnode(); p->c=statck2[top2-1]; pr=statck1[--top1]; pl=statck1[--top1]; p->lchild=pl; p->rchild=pr; statck1[top1++]=p; statck2[top2-1]=s1[i]; }else { statck2[top2++]=s1[i]; } }else if(s1[i]=='+'||s1[i]=='-') { p=newnode(); p->c=statck2[top2-1]; pr=statck1[--top1]; pl=statck1[--top1]; p->lchild=pl; p->rchild=pr; statck1[top1++]=p; statck2[top2-1]=s1[i]; } }else if(s1[i]==')') { while(statck2[top2-1]!='(') { p=newnode(); p->c=statck2[--top2]; pr=statck1[--top1]; pl=statck1[--top1]; p->lchild=pl; p->rchild=pr; statck1[top1++]=p; } top2-=1; }else if(s1[i]!=' ') { p=newnode(); p->c=s1[i]; statck1[top1++]=p; } } while(top2>=1) { p=newnode(); p->c=statck2[--top2]; pr=statck1[--top1]; pl=statck1[--top1]; p->lchild=pl; p->rchild=pr; statck1[top1++]=p; } head=statck1[0]; post(head); printf("\n"); return 0; } num *newnode() { num *p=new(num); p->rchild=NULL; p->lchild=NULL; return p; } void post(num *p) { if(p) { post(p->lchild); post(p->rchild); printf("%c",p->c); } }
相关文章推荐
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式 (sdut oj 2132)
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 寒假第三天--栈和队列--数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成前缀式,中缀式,后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式(栈)
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式(java实现)