資料結構實驗之棧與佇列二:一般算術表示式轉換成字尾式(SDUT 2132)
阿新 • • 發佈:2018-11-08
#include <bits/stdc++.h> using namespace std; typedef long long ll; int ok(char ch, char sh) { if(sh == '(')return 1; if((ch == '*' || ch == '/' || ch == '%') && (sh == '+' || sh =='-')) return 1; else return -1; } int main() { int i = 0,n, top = -1; char exp[1055], str[1005], ch; while(~scanf("%c", &ch) && ch != '#') { if(ch >= 'a' && ch <= 'z')exp[i++] = ch; else if(ch == '(') str[++top] = ch; else if(ch == ')') { while(top != -1) { exp[i ++] = str[top]; top --; if(str[top] == '(') { top --; break; } } } else { if(top == -1 || ok(ch,str[top]) > 0) { str[++top] = ch; } else { while(top >= 0 && ok(ch,str[top]) < 0) { exp[i ++] = str[top--]; } str[++top] = ch; } } } while(top != -1) { exp[i++] = str[top--]; } exp[i] = '\0'; printf("%s\n",exp); return 0; }