【OJ.2132】資料結構實驗之棧與佇列二:一般算術表示式轉換成字尾式
阿新 • • 發佈:2018-12-15
資料結構實驗之棧與佇列二:一般算術表示式轉換成字尾式
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
對於一個基於二元運算子的算術表示式,轉換為對應的字尾式,並輸出之。
Input
輸入一個算術表示式,以‘#’字元作為結束標誌。
Output
輸出該表示式轉換所得到的字尾式。
Sample Input
a*b+(c-d/e)*f#
Sample Output
ab*cde/-f*+
程式碼
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <algorithm> #define Maxsize 2000 using namespace std; typedef struct node { char *data; int maxsize; int top; }stack; void in(stack &s) { s.data = new char[Maxsize]; s.maxsize = Maxsize; s.top = -1; } void push(stack &s, char k) { s.data[++s.top] = k; } void pop(stack &s) { s.top--; } int isempty(stack s) { return(s.top==-1); } char top(stack &s) { return s.data[s.top]; } int main() { stack s; in(s); char ch; while((ch = getchar())!='#') { switch(ch) { case ')': while(1) { if(top(s) == '(') { pop(s); break; } putchar(top(s)); pop(s); } break; case '+': case '-': while(top(s) != '(' && !isempty(s)) { putchar(top(s)); pop(s); } push(s, ch); break; case '*': case '/': case '(': push(s, ch); break; default: putchar(ch); } } while(!isempty(s)) { putchar(top(s)); pop(s); } cout<<endl; return 0; }