棧和隊列的定義
- 棧和隊列是兩種常用的、重要的數據結構
- 棧和隊列是限定插入和刪除只能在表的 “端點” 進行的 線性表
- 棧和隊列是線性表的子集(是插入和刪除位置受限的線性表)
棧的定義和特點
棧(stack) 是一個特殊的線性表,是限定僅在一端(通常是表尾)進行插入和刪除操作的線性表。表尾的一端有其特殊含義,稱爲 棧頂(top) ,相應地,表頭稱爲 棧底(bottom) 。
棧的特點就是 後進先出(LIFO, Last In First Out)。
爲了更好的理解,我們可以把棧想象成 手電筒、子彈夾。像手電筒裝電池,後進去的電池先拿出來。
子彈夾也是,最後填充的子彈在子彈夾的頂端,最先填充的子彈在尾端。
棧的相關概念
- 插入元素到 棧頂 的操作,稱爲 入棧(Push) 。
- 從 棧頂 刪除最後一個元素的操作,稱爲 出棧(Pop) 。
棧的示意圖
棧的應用
由於棧的操作具有 後進先出 的固有特性,使得棧成爲程序設計中的有用工具。另外,如果問題解的過程具有 後進先出 的天然特性話,則求解的算法中也必然需要利用 棧。例如:
數制轉換 | 表達式求值 |
---|---|
括號匹配的檢驗 | 八皇后問題 |
行編輯程序 | 函數調用 |
迷宮求解 | 遞歸調用的實現 |
隊列的定義和特點
在隊列中,只允許在一端進行插入,而在另一端刪除元素。允許插入的一端叫做 隊尾(rear) ,允許刪除的一端則稱爲 隊頭(front) 。
隊列的特點就是 先進先出(FIFO, First In First Out)。
隊列的示意圖
隊列的常見應用
由於隊列的操作具有 先進先出 的特性,使得隊列成爲程序設計中解決突似 排隊問題 的有用工具。
例如:
- 脫機打印輸出:按申請的先後順序依次輸出。
- 多用戶系統中,多個用戶排成隊,分時地循環使用CPU和主存。
- 按用戶的優先級排成多個隊,每個優先級一個隊列。
- 實時控制系統中,信號按接收的先後順序依次處理。
- 網絡電文傳輸,按到達的時間先後順序依次進行。