標籤:java blog 運算優先順序 structure href 第一個 參數 使用 tac
習題主要選自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)——棧