棧的簡單介紹
????棧就像是一摞放在一起的碟子倍谜,都是從下往上一個一個的放,取得時(shí)候從上往下一個一個的拿叉抡。實(shí)際上尔崔,棧可以用數(shù)組來實(shí)現(xiàn)叫順序棧褥民,如果用鏈表來實(shí)現(xiàn)季春,叫鏈?zhǔn)綏!?/b>
① 用數(shù)組來實(shí)現(xiàn)一個棧:
②用鏈表來嘗試:
棧的實(shí)際應(yīng)用
①比較經(jīng)典的一個應(yīng)用場景就是函數(shù)調(diào)用棧:
????如下消返,操作系統(tǒng)為每個線程分配了一塊獨(dú)立的內(nèi)存空間载弄,這塊內(nèi)存被組織成“棧”結(jié)構(gòu)侦副,用來儲存函數(shù)調(diào)用的臨時(shí)變量侦锯,每進(jìn)入一個函數(shù),就會把一個變量作為一個棧幀入棧秦驯,當(dāng)被調(diào)用函數(shù)執(zhí)行完成尺碰,就會將這個函數(shù)出棧。
②棧在表達(dá)式求值中的應(yīng)用
????比如說一個只包含加減乘除的算法:3+5*8-6。對于這個運(yùn)算畫成圖就如下:
????從左到右開始遍歷表達(dá)式亲桥,如果遇到數(shù)字洛心,就把他直接壓入數(shù)字操作棧,當(dāng)遇到運(yùn)算符题篷,就與運(yùn)算符的棧頂元素作比較词身,如果比棧頂運(yùn)算符的優(yōu)先級高,就把他放到棧中番枚,如果比棧頂運(yùn)算符優(yōu)先級低或相同法严,從運(yùn)算符棧中取棧頂運(yùn)算符,從操作數(shù)棧的棧頂取2個操作數(shù)葫笼,然后進(jìn)行計(jì)算深啤,再把計(jì)算完的結(jié)果壓入操作數(shù)棧,繼續(xù)比較路星。
(本文是個人聽課筆記溯街,不少東西摘取于王爭老師的原文,原文鏈接http://gk.link/a/10aMZ)