1.開始在棧中壓入乙個#。然後從中綴表示式的左邊開始遍歷,如果遇到數字直接放入佇列。如果是操作符則和棧頂比較,
如果優先順序大於棧頂則入棧,否則將棧頂壓入佇列並將當前操作符入棧。
2.如果遇到'('。則無條件入棧不用和棧頂進行比較。
3.如果遇到')'。不用入棧,從棧頂開始將棧內元素彈出並壓入佇列中,直到遇到'('。將'('彈出棧。
字尾表示式運算規則:需要設立乙個棧用於存放計算結果。
1.從佇列中取元素,如果是運算元直接出隊入棧。
2.如果是運算子則出隊,並且彈出棧的兩個元素運算並將運算結果壓入棧內。直到隊列為空。
#include #include #include using namespace std;
stacks;
queueq;
int operator(char ch)
}int priority(char ch)
}double caculate(double a,char ch,double b)
}void change(char *ch)
else
else if (ch[i] == ')')
s.pop();
i++;
}else
else}}
}/*將剩餘的棧內的元素彈出棧存在佇列中*/
while (s.top() != '#')
}double result()
else
}cout << s.top() << endl;
}int main()
中綴表示式轉字尾表示式 以及 字尾表示式求值
字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字首先放入棧中,此時棧如下所示 2 接著讀到 則彈出3和2,執行3 2,計算結果等於5,並將5壓入到棧中。3 讀到8,將其直接放入棧中。4 讀到 彈...
中綴表示式轉字尾表示式,並求值
資料結構之棧的應用 先實現求值這一步吧,已知字尾表示式 轉換這一環節待更新 上 中綴表示式轉字尾表示式 seqstack 以及求值 version 1.0 求值,需要自己輸入字尾表示式 2.0 加上轉化功能 演算法 建立乙個運算元棧,自左向右遍歷字尾表示式,遇到乙個運算元就入棧,遇到乙個操作符就從棧...
中綴表示式轉字尾表示式
using system using system.collections.generic using system.text namespace 中綴表示式轉字尾表示式 class convert public void run top break case case while top 1 st...