数据结构基础:逆波兰式转换

来源:互联网 发布:java 方法命名规范 编辑:程序博客网 时间:2024/05/24 05:01
题目:点击打开链接
数据结构实验之栈二:一般算术表达式转换成后缀式
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
Input
输入一个算术表达式,以‘#’字符作为结束标志。
Output
输出该表达式转换所得到的后缀式。
Example Input


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


Example Output


ab*cde/-f*+

Hint
 
Author
   代码:#include<iostream>#include<cstdio>#include<cstring>#include<stack>using namespace std;stack <int> s;int main(){    int i;    char c[1000];    gets(c);    while(!s.empty()){        s.pop();    }    for(i=0;c[i]!='#';i++){        if(c[i]>='a'&&c[i]<='z'){///不是运算符直接输出            printf("%c",c[i]);        }        else{            if(c[i]=='(')      ///括号之间的运算符保留在栈中                s.push(c[i]);            else if(c[i]==')'){         ///输出括号之间的内容                while(s.top()!='('){                    printf("%c",s.top());                    s.pop();                }                s.pop();            }            else if(c[i]=='+'||c[i]=='-'){///空栈时进栈,否则弹栈直到空栈或弹完括号之间内容                while(!s.empty()){                    if(s.top()=='(')                       break;                    printf("%c",s.top());                    s.pop();                }                s.push(c[i]);            }            else if(c[i]=='*'||c[i]=='/'){  ///乘除号直接进栈                s.push(c[i]);            }        }        }        while(!s.empty()){  ///遍历结束,弹完剩余在栈中的内容            printf("%c",s.top());            s.pop();        }        cout<<endl;    return 0;}











革命尚为成功! 
0 0
原创粉丝点击