1. 程式人生 > 實用技巧 >資料結構與演算法--棧和佇列

資料結構與演算法--棧和佇列

概述

棧和佇列主要用於計算過程中臨時儲存資料,這些資料是計算中發現或者產生的, 在後面的計算中可能需要使用到它們。如果需要儲存的資料項數不能事先確定, 就必須使用複雜的機制儲存和管理, 這樣的儲存機制稱為緩衝儲存或者快取, 棧和佇列就是使用最多的緩衝儲存結構

棧、佇列、資料的使用順序

棧和佇列是最簡單的快取結構, 他們只支援資料項的儲存和訪問, 不支援資料項之間的任何關係。

在計算中, 需要考慮中間資料項的順序, 最典型的兩種順序是:

  • 根據資料生成的順序, 較後生成並儲存的資料需要先行使用和處理 -- 棧
  • 按先後順序, 先生成的資料先處理 -- 佇列

棧和佇列的實現結構只需要保證元素的存入和取出的資料, 並不記錄或保證新存入的元素與容器已有元素之間的任何關係。鑑於這兩種結構在儲存元素的儲存時間順序關係方面的特點. 可以得到

  • 棧是保證元素後進先出(後存入者先使用, Last In First Out, LIFO)關係的結構, 簡稱為LIFO結構
  • 佇列是保證元素先進先出(先存入者先使用, First In First Out, FIFO)關係的結構, 簡稱FIFO結構

棧: 概念和實現

棧(stack)是一種容器, 可存入資料元素、訪問元素、刪除元素等。存入棧中的元素之間互相沒有任何具體關係, 只有到來的先後的時間先後順序。

棧抽象資料型別

棧的基本操作是一個封閉的集合(與線性表的情況不同)。現給出一個棧抽象資料型別的描述

ADT Stack:
    Stack(self)             # 建立空棧
is_empty(self) # 判斷棧是否為空, 空時返回True否則返回False push(self, elem) # 將元素elem加入棧, 也常稱為壓入或推入 pop(self) # 刪除棧裡最後壓入的元素並將其返回, 常稱為彈出 top(self) # 取得棧裡最後壓入的元素, 不刪除

棧的線性表實現