野生前端的數據結構練習(1)——棧
阿新 • • 發佈:2018-10-10
操作數棧 sha ttr src master 彈出 多個 第一個 入棧
習題主要選自Orelly出版的《數據結構與算法javascript描述》一書。
參考代碼可見:https://github.com/dashnowords/blogs/tree/master/Structure/Stack
基本練習
- 根據棧的特性實現一個
Stack
類,並在後續題目中需要用棧時使用它。 - 編寫一個函數
unitTrans(num, unit)
,num
為一個10進制數字,unit
要轉換的進制數,求轉換結果。 - 編寫一個函數
recursion(num)
,num
為一個10進制數字,要求輸出num!
的結果。 - 編寫一個函數
palindrome(str)
,str
是一個字符串,如果它是一個回文字符串,則返回true
false
。
課後習題(書中第四節習題)
- 一個算數表達式中有
{}
,()
,[]
三種括號,編寫一個函數,接受一個算數表達式作為參數,如果括號完全匹配則返回true
,否則返回括號缺失的位置。 - 一個表達式的後綴表達式形式為opt1 opt2 operator,編寫一個函數,接受一個算數表達式作為參數(平時使用的算數表達式形式即為中綴表達式),將其轉換為後綴表達式(可暫不考慮運算優先級)。
- 盒子裏從上到下放有不定數量的【紅色】,【白色】,【×××】三種糖果,編寫一個程序,可以使用一個或多個棧,在保證原糖果順序不變的情況下,取出所有的【×××】糖果。
習題思路
- 按字符逐個解析表達式,遇到左括號即將其壓入棧中,遇到右括號就從棧頂彈出一個元素,查看兩者是否匹配,若匹配則繼續,若不匹配則返回位置。需要註意的是,如果所有括號均配,則棧的最終狀態需要為空。
- 逆向解析原表達式,將
操作數
和操作符
分別壓入兩個棧中,接著先從操作數棧中彈出第一個元素,在輪流從操作數棧和操作符棧中彈出元素直至棧為空即可。如果從前到後解析,則棧頂的是最後的元素,出棧時考慮到順序即可。 - 只用一個額外的棧即可,將【紅色】【白色】糖果壓入新棧,將×××糖果移除,當糖果盒為空後,再從新的糖果棧中逐個彈出元素重新放回糖果盒的棧即可。
野生前端的數據結構練習(1)——棧