TsingHuaDSA-棧和隊(duì)列

該文章為清華大學(xué)數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)MOOC課程讀書筆記.

1. 棧

1.1 接口

棧接口

LIFO后進(jìn)先出

1.2 棧實(shí)現(xiàn)

  • 基于向量


    向量實(shí)現(xiàn)stack
  • 基于列表
    思路:維持棧頂?shù)闹羔?/p>

1.3 應(yīng)用

stack典型應(yīng)用

1)conversion -> 進(jìn)制轉(zhuǎn)換

  • 問題:給一個(gè)十進(jìn)制非負(fù)整數(shù)勾习,將其轉(zhuǎn)化為??進(jìn)制表示

  • 思路:n對(duì)??反復(fù)取模(即求余數(shù))蛤肌,整除弄砍。最終各取模結(jié)構(gòu)逆序輸出則為結(jié)果。

    進(jìn)制轉(zhuǎn)換算法

  • 實(shí)現(xiàn)


    進(jìn)制轉(zhuǎn)換實(shí)現(xiàn)

2)遞歸嵌套 -> 括號(hào)匹配

  • 思路
    左括號(hào)入棧态坦,右括號(hào)如果棧不為空,出棧棒拂,若為空伞梯,則適配玫氢。


    括號(hào)匹配算法
  • 若括號(hào)同類型,則可以用計(jì)數(shù)器(本質(zhì)上就是在統(tǒng)計(jì)棧中的元素個(gè)數(shù))
    計(jì)數(shù)器算法
  • 若括號(hào)不同類型谜诫,則計(jì)數(shù)器算法失效漾峡,棧算法依然有效。
  • 擴(kuò)展
    • 不一定是括號(hào)喻旷,只要是能夠構(gòu)成匹配對(duì)的符號(hào)都可以使用生逸,比如xml,html的tag*

3) 遞歸嵌套 -> 椙以ぃ混洗stack permutation

  • 棽郯溃混洗中:每個(gè)元素被push一次也被pop一次
  • 括號(hào)匹配中:左括號(hào)對(duì)應(yīng)了一次push與右括號(hào)對(duì)應(yīng)一次pop

結(jié)論:n個(gè)數(shù)棧混洗與n對(duì)括號(hào)的有效排列是一一對(duì)應(yīng)的

椃嫘常混洗與括號(hào)匹配

4)延遲緩沖 -> 中綴(infix)表達(dá)式計(jì)算

  • 思想
    關(guān)鍵:對(duì)前綴進(jìn)行緩沖

    中綴表達(dá)式計(jì)算思想

    關(guān)鍵:當(dāng)遇到的運(yùn)算符比棧頂運(yùn)算符優(yōu)先級(jí)低遍尺,說明棧定的運(yùn)算符可以進(jìn)行計(jì)算了。
    這也說明了涮拗,棧中的操作符乾戏,優(yōu)先級(jí)高的排在上,優(yōu)先級(jí)低的排在下多搀。
    中綴表達(dá)式Stack實(shí)現(xiàn)思想

  • 實(shí)現(xiàn)
    關(guān)鍵:兩個(gè)stack歧蕉,一個(gè)存operator,另一個(gè)存operand

5) 逆波蘭表達(dá)式Reversed Polish Notation

  • 特點(diǎn)
    通過后綴(postfix)表達(dá)式來避免了括號(hào)康铭,讓運(yùn)算符出現(xiàn)的順序代表運(yùn)算的順序惯退。

    RPN

  • 思路

    • 讀到數(shù)入棧
    • 讀到運(yùn)算符,數(shù)出棧參運(yùn)算从藤,并將結(jié)果再次入棧
RPN求值
  • 中綴表達(dá)式轉(zhuǎn)換 -> RPN

  • 思路
    在中綴表達(dá)式算法中略作修改:

    • 遇到數(shù)字:直接續(xù)接到RPN尾部
    • 遇到運(yùn)算符:
      • 比棧頂運(yùn)算符優(yōu)先級(jí)催跪,將該運(yùn)算符直接連接到RPN尾部
      • 比棧頂運(yùn)算符優(yōu)先級(jí),將棧頂運(yùn)算符連接到RPN尾部
        RPN轉(zhuǎn)換

2. 隊(duì)列

2.1 隊(duì)列接口

隊(duì)列接口

FIFO

2.2 隊(duì)列實(shí)現(xiàn)

關(guān)鍵:維持頭夷野,尾兩個(gè)指針

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末懊蒸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子悯搔,更是在濱河造成了極大的恐慌骑丸,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妒貌,死亡現(xiàn)場(chǎng)離奇詭異通危,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)灌曙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門菊碟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人在刺,你說我怎么就攤上這事逆害⊥纺鳎” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵魄幕,是天一觀的道長相艇。 經(jīng)常有香客問我,道長梅垄,這世上最難降的妖魔是什么厂捞? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮队丝,結(jié)果婚禮上靡馁,老公的妹妹穿的比我還像新娘。我一直安慰自己机久,他們只是感情好臭墨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膘盖,像睡著了一般胧弛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侠畔,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天结缚,我揣著相機(jī)與錄音,去河邊找鬼软棺。 笑死红竭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的喘落。 我是一名探鬼主播茵宪,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼瘦棋!你這毒婦竟也來了稀火?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤赌朋,失蹤者是張志新(化名)和其女友劉穎凰狞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沛慢,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡服球,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颠焦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡往枣,死狀恐怖伐庭,靈堂內(nèi)的尸體忽然破棺而出粉渠,到底是詐尸還是另有隱情,我是刑警寧澤圾另,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布霸株,位于F島的核電站,受9級(jí)特大地震影響集乔,放射性物質(zhì)發(fā)生泄漏去件。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一扰路、第九天 我趴在偏房一處隱蔽的房頂上張望尤溜。 院中可真熱鬧,春花似錦汗唱、人聲如沸宫莱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽授霸。三九已至,卻和暖如春际插,著一層夾襖步出監(jiān)牢的瞬間碘耳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國打工框弛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辛辨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓功咒,卻偏偏與公主長得像愉阎,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子力奋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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