栈的应用-四则运算表达式
生活随笔
收集整理的這篇文章主要介紹了
栈的应用-四则运算表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
后綴(逆波蘭)表示法定義:所有的符號都是在要運算數字的后面出現。
中綴表達式:a+b*c+(d*e+f)/g
后綴表達式:abc*+de*f+g/+
示例:2+3*2+(2*3+4)/2 = 13
232*+23*4+2/+ = 13
后綴表達式的運算:
1.掃描后綴表達式:?
①如果是數字,則讓其進棧?
②若為操作符,則從棧中取出兩個操作數,先取出的作為右操作數,后取出的作為左操作數,然后進行該操作符的運算,并使其結果入棧。?
③重復上述過程,直至表達式掃描完成。?
2.最終棧中只留一個元素—–>即就是結果。
中綴表達式轉化成后綴表達式:
1.遇到操作數,直接輸出;
2.棧為空時,遇到運算符,入棧;
3.遇到左括號,將其入棧;
4.遇到右括號,執行出棧操作,并將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出;
5.遇到其他運算符“+”、“-”、“*”、“÷”時,彈出所有優先級大于或等于該運算符的棧頂元素,然后將該運算符入棧;
6.最終將棧中的元素依次出棧,輸出。?
示例:
例如將 9 + (3 - 1) X 3 + 10 / 2 轉換成后綴表達式,過程如下:1、9是數字,輸出,表達式為:9;
2、“ + ”進棧,“ ( ”進棧,棧內容為:+ (;
3、數字3輸出,表達式為:9 3;
4、“ - ”進棧,棧內容為:+ ( -;
5、數字1輸出,表達式為:9 3 1;
6、遇到“ ) ”,根據規則,棧中符號出棧直到“ ( ”出棧為止,此間遇到“ - ”需要輸出,因此表達式為:9 3 1 -,棧中內容為:+;
7、遇到“ X ”,由于它的優先級比棧頂元素“ + ”高,因此它進棧,棧中內容為:+ X;
8、遇到數字3輸出,表達式為:9 3 1 - 3;
9、之后是“ + ”,優先級比棧頂的“ X ”低,“ X ”出棧輸出,“ + ”變成棧頂,棧頂的“ + ”優先級并不大于外面的“ + ”,因此也需要出棧輸出,此時棧為空了,那么表達式為:9 3 1 - 3 X +,同時外面的“ + ”進棧,棧中內容為:+;
10、遇到10輸出,表達式為:9 3 1 - 3 X + 10;
11、遇到符號“ / ”,優先級比棧頂元素“ + ”高,進棧,棧中內容為:+ /;
12、數字2輸出,表達式為:9 3 1 - 3 X + 10 2;
13、遍歷結束,棧不為空,棧中符號依次出棧輸出,最后表達式為:9 3 1 - 3 X + 10 2 / +。
轉載于:https://www.cnblogs.com/value-code/p/9501381.html
總結
以上是生活随笔為你收集整理的栈的应用-四则运算表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 今天写一个关于浮动的页面,页面高度不能设
- 下一篇: 选山楂做成饮料有什么依据?