棧的經(jīng)典實用

在JVM的運行時數(shù)據(jù)區(qū)包括:方法區(qū)、虛擬機(jī)棧螺垢、本地方法棧止剖、堆霞玄、程序計數(shù)器。而虛擬機(jī)棧描述的是JAVA方法執(zhí)行的內(nèi)存模型:每個方法在執(zhí)行的同時都會創(chuàng)建一個棧幀(Stack Frame),用于存儲局部變量表寒跳、操作數(shù)棧、動態(tài)鏈接、方法出口等信息拘领。

對于開頭提到的信息相信每個對JVM有了解的人都明白,但是剛看到棧幀中的操作數(shù)棧樱调,并不知道是做什么的约素?我不知道大家有沒有這樣的經(jīng)歷届良,知道有這么一個操作數(shù)棧,但是具體是做什么的圣猎,運行過程是什么樣兒的士葫,并不是很清楚

下面我們看兩個表達(dá)式

波蘭表達(dá)式法:標(biāo)準(zhǔn)四則運算表達(dá)式, 也稱 中綴表達(dá)式
就是我們從小學(xué)習(xí)的四則運算的表達(dá)式送悔。
例1:9+(3-1)*3+10/2 = ?

逆波蘭表達(dá)式法 - 后綴表達(dá)式
上述例1慢显,轉(zhuǎn)為后綴表達(dá)式為:9 3 1 - 3 * + 10 2 / +

我們在計算例1的中綴表達(dá)式時,我們可以計算出結(jié)果是20欠啤,但是這樣的描述荚藻,計算機(jī)無法實別,而計算機(jī)通過棧結(jié)構(gòu)+后綴表達(dá)式洁段,可以壓棧出棧应狱,得出表達(dá)式的結(jié)果。

操作數(shù)棧的執(zhí)行過程

數(shù)字入棧祠丝,操作符侦香,從棧中彈出操作數(shù),計算結(jié)果纽疟,結(jié)果入棧

第一步: 將后綴表達(dá)式從頭開始依次壓入棧


圖片.png

第二步:當(dāng)遇到操作符“-”時罐韩,從棧中彈出兩個操作數(shù),第一個彈出的作為減數(shù)污朽,第二個作為被減數(shù)散吵,進(jìn)行運算,計算出結(jié)果為2

圖片.png

第三步:將計算出的結(jié)果入棧:

圖片.png

第四步:將3壓入棧中


圖片.png

第五步:處理"*"
從棧中彈出3 作為乘數(shù) 彈出2作為被乘數(shù)蟆肆,并將結(jié)果6壓入棧中矾睦,結(jié)果如下圖

圖片.png

第六步:處理"+"
從棧中彈出6作為加數(shù)彈出9作為被加數(shù),計算 9+6=15炎功,將結(jié)果15入棧


圖片.png

第七步:10入棧枚冗,2 入棧


圖片.png

第八步:處理 "/"
彈出操作數(shù)2作為除數(shù),10作為被除數(shù)蛇损,10/2=5,將結(jié)果5入棧


圖片.png

第九步:處理"+"
彈出操作數(shù)5作為加數(shù)赁温,操作數(shù)15作為被加數(shù),15+5=20淤齐,20即為結(jié)果

上述是整個操作數(shù)棧的執(zhí)行過程股囊。

講到這里,大家應(yīng)該能明白JVM棧中的操作數(shù)棧的具體作用和執(zhí)行過程了更啄,但是有一個問題還沒有解決稚疹,中綴表達(dá)式是怎么轉(zhuǎn)換后后綴表達(dá)式?接下來我們看一下轉(zhuǎn)換過程祭务,其實在中綴轉(zhuǎn)后綴的過程中内狗,使用到的數(shù)據(jù)結(jié)構(gòu)也是棧怪嫌。

轉(zhuǎn)換規(guī)則

- 1、數(shù)字輸出
- 2柳沙、運算符進(jìn)棧
- 3喇勋、括號匹配出棧
- 4、如棧頂優(yōu)先級高偎行,則輸出后一位數(shù)字,再出棧操作符

轉(zhuǎn)換過程

為了方便讀者觀看贰拿,我們把要轉(zhuǎn)換的中綴表達(dá)式蛤袒,在這里再顯示一次,中綴表達(dá)式:9+(3-1)3+10/2
第1步:根據(jù)上面的規(guī)則膨更,數(shù)字9妙真、3、1荚守、輸出珍德,操作符+(-依次進(jìn)棧,可以得到矗漾,棧中的內(nèi)容如下圖:

圖片.png

第2步:這里需要注意一下锈候,因為規(guī)則中,擴(kuò)號匹配出棧敞贡,怎么理解呢泵琳,就是把左號到當(dāng)前棧頂?shù)姆栆来螐棾鰲#拥捷敵鼋Y(jié)果中誊役,
圖片.png

第3步:處理"
",這里要注意一個获列,這個符合規(guī)則 的第4條,“”優(yōu)先級要比現(xiàn)棧頂符號優(yōu)先級高蛔垢,所以先輸出后面的數(shù)字3击孩,然后將*入棧,再依次將操作符出棧鹏漆。

圖片.png

第4步: "+ "入棧巩梢,輸出10


圖片.png

第5步:這時候和第三步情況一下,"/"優(yōu)先級高于棧頂操作符“+”艺玲,所以先輸出“/”后面的數(shù)字“2”且改,將"/"入棧, 依次將棧中操作符出棧板驳,并輸出


圖片.png

最終結(jié)果就是我們所需要的后綴表達(dá)式:
圖片.png

使用java代碼模擬jvm操作數(shù)棧的計算過程

相關(guān)代碼傳送門:
https://github.com/18921569386/datastructure/blob/master/datastructure-base/src/main/java/com/albk/datastructure/base/statck/ext/OperateStack.java

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末又跛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子若治,更是在濱河造成了極大的恐慌慨蓝,老刑警劉巖感混,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異礼烈,居然都是意外死亡弧满,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門此熬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庭呜,“玉大人,你說我怎么就攤上這事犀忱∧蓟眩” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵阴汇,是天一觀的道長数冬。 經(jīng)常有香客問我,道長搀庶,這世上最難降的妖魔是什么拐纱? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮哥倔,結(jié)果婚禮上秸架,老公的妹妹穿的比我還像新娘。我一直安慰自己咆蒿,他們只是感情好咕宿,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜡秽,像睡著了一般府阀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芽突,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天试浙,我揣著相機(jī)與錄音,去河邊找鬼寞蚌。 笑死田巴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挟秤。 我是一名探鬼主播壹哺,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼艘刚!你這毒婦竟也來了管宵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎箩朴,沒想到半個月后岗喉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡炸庞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年钱床,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埠居。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡查牌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滥壕,到底是詐尸還是另有隱情纸颜,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布捏浊,位于F島的核電站,受9級特大地震影響撞叨,放射性物質(zhì)發(fā)生泄漏金踪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一牵敷、第九天 我趴在偏房一處隱蔽的房頂上張望胡岔。 院中可真熱鬧,春花似錦枷餐、人聲如沸靶瘸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怨咪。三九已至,卻和暖如春润匙,著一層夾襖步出監(jiān)牢的瞬間诗眨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工孕讳, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留匠楚,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓厂财,卻偏偏與公主長得像芋簿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子璃饱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容