數據結構 - 棧和隊列

棧和隊列的定義

  • 棧和隊列是兩種常用的、重要的數據結構
  • 棧和隊列是限定插入和刪除只能在表的 “端點” 進行的 線性表
    • 棧和隊列是線性表的子集(是插入和刪除位置受限的線性表)

棧的定義和特點

棧(stack) 是一個特殊的線性表,是限定僅在一端(通常是表尾)進行插入和刪除操作的線性表。表尾的一端有其特殊含義,稱爲 棧頂(top) ,相應地,表頭稱爲 棧底(bottom)

棧的特點就是 後進先出(LIFO, Last In First Out)

圖解棧的後進先出的特性

爲了更好的理解,我們可以把棧想象成 手電筒、子彈夾。像手電筒裝電池,後進去的電池先拿出來。

子彈夾也是,最後填充的子彈在子彈夾的頂端,最先填充的子彈在尾端。


棧的相關概念

  • 插入元素到 棧頂 的操作,稱爲 入棧(Push)
  • 棧頂 刪除最後一個元素的操作,稱爲 出棧(Pop)

棧的示意圖

棧的示意圖


棧的應用

由於棧的操作具有 後進先出 的固有特性,使得棧成爲程序設計中的有用工具。另外,如果問題解的過程具有 後進先出 的天然特性話,則求解的算法中也必然需要利用 。例如:

數制轉換 表達式求值
括號匹配的檢驗 八皇后問題
行編輯程序 函數調用
迷宮求解 遞歸調用的實現

隊列的定義和特點

在隊列中,只允許在一端進行插入,而在另一端刪除元素。允許插入的一端叫做 隊尾(rear) ,允許刪除的一端則稱爲 隊頭(front)

隊列的特點就是 先進先出(FIFO, First In First Out)

圖解隊列的先進先出的特性


隊列的示意圖

隊列的示意圖


隊列的常見應用

由於隊列的操作具有 先進先出 的特性,使得隊列成爲程序設計中解決突似 排隊問題 的有用工具。

例如:

  • 脫機打印輸出:按申請的先後順序依次輸出。
  • 多用戶系統中,多個用戶排成隊,分時地循環使用CPU和主存。
  • 按用戶的優先級排成多個隊,每個優先級一個隊列。
  • 實時控制系統中,信號按接收的先後順序依次處理。
  • 網絡電文傳輸,按到達的時間先後順序依次進行。

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