?? stack.sh
字號:
#!/bin/bash# stack.sh: 模擬下推堆棧# 類似于CPU棧, 下推堆棧依次保存數據項, #+ 但是取數據時, 卻反序進行, 后進先出. BP=100 # 棧數組的基址指針. # 從元素100開始. SP=$BP # 棧指針. # 將其初始化為棧"基址"(棧底). Data= # 當前棧的數據內容. # 必須定義為全局變量, #+ 因為函數所能夠返回的整數存在范圍限制. declare -a stackpush() # 壓棧.{if [ -z "$1" ] # 沒有可壓入的數據項? then returnfilet "SP -= 1" # 更新棧指針. stack[$SP]=$1return}pop() # 從棧中彈出數據項. {Data= # 清空保存數據項的中間變量. if [ "$SP" -eq "$BP" ] # 棧空? then returnfi # 這使得SP不會超過100, #+ 例如, 這可以防止堆棧失控. Data=${stack[$SP]}let "SP += 1" # 更新棧指針. return}status_report() # 打印當前狀態. {echo "-------------------------------------"echo "REPORT"echo "Stack Pointer = $SP"echo "Just popped \""$Data"\" off the stack."echo "-------------------------------------"echo}# =======================================================# 現在, 來點樂子. echo# 看你是否能從空棧里彈出數據項來. popstatus_reportechopush garbagepopstatus_report # 壓入garbage, 彈出garbage. value1=23; push $value1value2=skidoo; push $value2value3=FINAL; push $value3pop # FINALstatus_reportpop # skidoostatus_reportpop # 23status_report # 后進, 先出! # 注意: 棧指針在壓棧時減, #+ 在彈出時加. echoexit 0# =======================================================# 練習:# -----# 1) 修改"push()"函數, # + 使其調用一次就能夠壓入多個數據項. # 2) 修改"pop()"函數, # + 使其調用一次就能彈出多個數據項. # 3) 給那些有臨界操作的函數添加出錯檢查. # 說明白一些, 就是讓這些函數返回錯誤碼, # + 返回的錯誤碼依賴于操作是否成功完成, # + 如果沒有成功完成, 那么就需要啟動合適的處理動作. # 4) 以這個腳本為基礎, # + 編寫一個用棧實現的四則運算計算器.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -