1. 程式人生 > >野生前端的數據結構練習(1)——棧

野生前端的數據結構練習(1)——棧

操作數棧 sha ttr src master 彈出 多個 第一個 入棧

技術分享圖片

習題主要選自Orelly出版的《數據結構與算法javascript描述》一書。

參考代碼可見:https://github.com/dashnowords/blogs/tree/master/Structure/Stack

基本練習

  1. 根據棧的特性實現一個Stack類,並在後續題目中需要用棧時使用它。
  2. 編寫一個函數unitTrans(num, unit),num為一個10進制數字,unit要轉換的進制數,求轉換結果。
  3. 編寫一個函數recursion(num),num為一個10進制數字,要求輸出num!的結果。
  4. 編寫一個函數palindrome(str),str是一個字符串,如果它是一個回文字符串,則返回true
    ,否則返回false

課後習題(書中第四節習題)

  1. 一個算數表達式中有{},(),[]三種括號,編寫一個函數,接受一個算數表達式作為參數,如果括號完全匹配則返回true,否則返回括號缺失的位置。
  2. 一個表達式的後綴表達式形式為opt1 opt2 operator,編寫一個函數,接受一個算數表達式作為參數(平時使用的算數表達式形式即為中綴表達式),將其轉換為後綴表達式(可暫不考慮運算優先級)。
  3. 盒子裏從上到下放有不定數量的【紅色】,【白色】,【×××】三種糖果,編寫一個程序,可以使用一個或多個棧,在保證原糖果順序不變的情況下,取出所有的【×××】糖果。

習題思路

  1. 按字符逐個解析表達式,遇到左括號即將其壓入棧中,遇到右括號就從棧頂彈出一個元素,查看兩者是否匹配,若匹配則繼續,若不匹配則返回位置。需要註意的是,如果所有括號均配,則棧的最終狀態需要為空。
  2. 逆向解析原表達式,將操作數操作符分別壓入兩個棧中,接著先從操作數棧中彈出第一個元素,在輪流從操作數棧和操作符棧中彈出元素直至棧為空即可。如果從前到後解析,則棧頂的是最後的元素,出棧時考慮到順序即可。
  3. 只用一個額外的棧即可,將【紅色】【白色】糖果壓入新棧,將×××糖果移除,當糖果盒為空後,再從新的糖果棧中逐個彈出元素重新放回糖果盒的棧即可。

野生前端的數據結構練習(1)——棧