棧和隊列的思想應用

棧和隊列的應用

  在日常生活中,很多問題可以歸結到棧和隊列的應用問題。例如,排隊購物的現象就可以看做是隊列。在計算機學科的應用中,棧和隊列的應用就更多了,例如,編譯系統、消息隊列等。

 棧的應用

  棧具有相當廣泛的實際應用,例如,可以顛倒數據串的次序、爲回溯算法提供支持、實現自動機等。
  1.編譯應用
  棧可以應用於括號匹配、行編輯器、表達式求值、算法優先文法等編譯程序中。例如,在表達式中,一般存在大、中、小三種括號,分別定義爲“{}”、“[]”和“()”,要求其只能自我匹配,不能交互匹配,比如“{[()]}”、“[()()()]”等均爲正確匹配,而“({]”、“(])[”、“)(]}”等均爲錯誤匹配。使用棧檢測括號是否匹配的算法描述如下:

  2.轉置應用
  一串數據全部進入棧後再全部出棧,將得到一個次序完全相反的數據串,這是棧的特性之一。因此,棧可以應用於轉置操作,例如,數的進制轉換等。
  例子:已知線性鏈表L,請按從表尾到表頭的順序輸出元素。
  【解析】從頭到尾遍歷鏈表,同時將鏈表元素入棧,再依次出棧,並打印元素信息即可。其算法描述如下:

  3.迷宮問題
  迷宮問題是指在迷宮中從入口尋找出口的問題。此類問題的本質是將迷宮建模成圖,將迷宮中的點建模爲圖中的點,將迷宮中相連並且相通的兩點建模爲圖中的一條邊,一般採用矩陣方式存儲圖,這樣迷宮求解就轉化爲圖的遍歷,採用回溯法窮舉所有從入口點到出口點之間的路徑即可。
  迷宮問題求解算法中一般使用一個棧來存儲訪問過的頂點信息,棧中元素(即頂點信息)由頂點位置和搜索方向兩部分組成,前者記載該頂點在迷宮中的位置,後者記載下一個頂點的訪問方向,例如,右、下、左、上四個相連的方向,編程時可分別使用枚舉類型enum表示。

 隊列的應用

  隊列是一種相當實用的數據結構,可應用於生產、生活的各個方面,例如,共享打印機、消息隊列和廣度優先搜索等。
  1.共享打印機
  目前,打印機提供的網絡共享打印功能採用了緩衝池技術,隊列就是實現這個緩衝技術的數據結構支持。每臺打印機具有一個隊列(緩衝池),用戶提交打印請求被寫入到隊列尾,當打印機空閒時,系統讀取隊列中第一個請求,打印並刪除之。這樣,利用隊列的先進先出特性,就可完成打印機網絡共享的先來先服務功能。
  2.消息隊列
  操作系統中的消息隊列也是隊列的應用之一,消息隊列遵循先進先出的原則,如圖2-5所示,發送進程將消息寫入隊列尾,接收進程則從隊列頭讀取消息。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章