1. 程式人生 > >棧之資料結構實驗之棧與佇列三:字尾式求值

棧之資料結構實驗之棧與佇列三:字尾式求值

資料結構實驗之棧與佇列三:字尾式求值
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic Discuss
Problem Description
對於一個基於二元運算子的字尾表示式(基本運算元都是一位正整數),求其代表的算術表示式的值。
Input
輸入一個算術表示式的字尾式字串,以‘#’作為結束標誌。
Output
求該字尾式所對應的算術表示式的值,並輸出之。
Sample Input
59*684/-3*+#
Sample Output
57
Hint
基本運算元都是一位正整數!
Source

#include <stdio.h>
#include <stdlib.h> int top=0,i,stack[1001]; int main() { char a[1001]; scanf("%s",a); for(i=0;a[i]!='#';i++) { if(a[i]>='1'&&a[i]<='9') { stack[++top]=a[i]-'0'; } else if(a[i]=='+') { stack[top-1]=stack[top-1
]+stack[top]; top--; } else if(a[i]=='-') { stack[top-1]=stack[top-1]-stack[top]; top--; } else if(a[i]=='*') { stack[top-1]=stack[top-1]*stack[top]; top--; } else if(a[i]=='/') { stack
[top-1]=stack[top-1]/stack[top]; top--; } } printf("%d\n",stack[top]); return 0; }

THINK:
先把串裡的數先入棧,然後當遇到一個運算子的時候就把棧頂和棧次元素進行相應的運算,接著top指標要後退啊,後退到棧次元素上,仔細想一下就是兩個元素運算完之後會變成一個元素,在棧中表現為退回到棧次元素,最後只剩一個數了就可以輸出