棧之資料結構實驗之棧與佇列三:字尾式求值
阿新 • • 發佈:2019-02-03
資料結構實驗之棧與佇列三:字尾式求值
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指標要後退啊,後退到棧次元素上,仔細想一下就是兩個元素運算完之後會變成一個元素,在棧中表現為退回到棧次元素,最後只剩一個數了就可以輸出