最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

5.5-5.7 關于棧的案例和中綴表達式轉后綴表達式

2021-12-12 16:56 作者:取悅疾風  | 我要投稿

內容來自尚硅谷Java數據結構與java算法(Java數據結構與算法)_嗶哩嗶哩_bilibili

寫在前面:本文內容大致和原視頻內老師的筆記內容相同,會偶爾插入自己的注釋和理解,盡量會完成作業(yè)

本次有一個加入括號的作業(yè),但是老師提到了后面會講,所以當時想了一小會,然后決定繼續(xù)學習[del]其實就是不會[/del]

5.5棧實現綜合計算器(中綴表達式)

使用棧來實現綜合計算器

請輸入一個表達式

計算式:[7*2*2-5+1-5+3-3]

思路分析(圖解):

代碼實現

1.???? 先實現1位數的運算

2.???? 擴展到多位數的運算


5.6逆波蘭計算器

1.????? 輸入一個逆波蘭表達式(后綴表達式),使用棧(Stack),計算其結果

2.????? 支持小括號和多位數整數,因為這里我們主要講的是數據結構,因此計算器進行簡化,只支持對整數的計算。

3.????? 思路分析

例如:(3+4)×5-6對應的后綴表達式就是34+5 ×6-,針對后綴表達式求值步驟如下:

Step1.從左至右掃描,將3和4壓入堆棧;

Step2.遇到+運算符,因此彈出4和3(4為棧頂元素,3為次頂元素),計算出3+4的值,得7,再將7入棧;

Step3.將5入棧;

Step4.接下來是*運算符,因此彈出5和7,計算出7×5=35,將35入棧;

Step5.將6入棧;

最后是-運算符,計算出35-6的值,即29,由此得出最終結果

4.????? 代碼完成

5.7中綴表達式轉換為后綴表達式

大家看到,后綴表達式適合計算式進行運算,但是人卻不太容易寫出來,尤其是表達式很長的情況下,因此在開發(fā)中,我們需要將中綴表達式轉成后綴表達式。

5.7.1具體步驟如下:

1.初始化兩個棧:運算符棧s1和儲存中間結果的棧s2;

2.從左至右掃描中綴表達式;

3.遇到操作數時,將其壓s2;

4.遇到運算符時,比較其與s1棧頂運算符的優(yōu)先級:

4.1如果s1為空,或棧頂運算符為左括號“(”,則直接將此運算符入棧;

4.2否則,若優(yōu)先級比棧頂運算符的高,也將運算符壓入s1;

4.3否則,將s1棧頂的運算符彈出并壓入到s2中,再次轉到(4-1)與s1中新的棧頂運算符相比較;

5.遇到括號時:

5.1如果是左括號“(”,則直接壓入s1

5.2如果是右括號“)",則依次彈出s1棧頂的運算符,并壓入s2,直到遇到左括號為止,此時將這一對括號丟棄

6.重復步驟2至5,直到表達式的最右邊

7.將s1中剩余的運算符依次彈出并壓入s2

8.依次彈出s2中的元素并輸出,結果的逆序即為中綴表達式對應的后綴表達書

5.7.2舉例說明

將中綴表達式”1+((2+3)*4)-5”轉換為后綴表達式的過程如下

此結果為:”1 2 3 + 4 * + 5 -”

5.7.3代碼實現中綴表達式轉為后綴表達式

思路分析

代碼實現:


5.5-5.7 關于棧的案例和中綴表達式轉后綴表達式的評論 (共 條)

分享到微博請遵守國家法律
平昌县| 张家口市| 淄博市| 杨浦区| 宜州市| 汕尾市| 临泉县| 长寿区| 绿春县| 南郑县| 桂东县| 随州市| 栾川县| 扶余县| 丰顺县| 巫溪县| 马鞍山市| 彰武县| 玛曲县| 长丰县| 青岛市| 新闻| 祁东县| 石柱| 伊春市| 商水县| 千阳县| 五常市| 嵊泗县| 扎兰屯市| 抚顺市| 日照市| 阳春市| 陆良县| 溆浦县| 湖南省| 名山县| 淮北市| 定南县| 东辽县| 偃师市|