後進者先出,先進者後出,就是典型的「棧」結構。
從棧的操作特性上來看,棧是一種**「操作受限」的線性表**,只允許在一端插入和刪除資料。
從功能上來說,陣列或鍊錶可以替代棧,但特定的資料結構是對特定場景的抽象,陣列或鍊錶暴露了太多的操作介面,操作上的確靈活自由,但使用時就比較不可控,自然也就更容易出錯。
當某個資料集合只涉及在一端插入和刪除資料,並且滿足後進先出、先進後出的特性,就應該**首選「棧」**這種資料結構。
棧棧主要包含兩個操作,入棧和出棧,也就是在棧頂插入乙個資料和從棧頂刪除乙個資料。
棧既可以用陣列來實現,也可以用鍊錶來實現。用陣列實現的棧,我們叫作順序棧,用鍊錶實現的棧,我們叫作鏈式棧。
不管是順序棧還是鏈式棧,儲存資料只需要乙個大小為 n 的儲存空間。
在入棧和出棧過程中,只需要一兩個臨時變數儲存空間,所以空間複雜度是 o(1)。
空間複雜度是指除了原本的資料儲存空間外,演算法執行還需要額外的儲存空間。不管是順序棧還是鏈式棧,入棧、出棧只涉及棧頂個別資料的操作,所以時間複雜度都是 o(1)。
資料結構與演算法 4 棧與佇列
目錄 一.棧的定義 1.棧的定義 2.進棧出棧變化形式 二.棧的抽象資料型別 三.棧的順序儲存結構及實現 1.棧的順序儲存結構 2.棧的順序儲存結構 進棧操作 3.棧的順序儲存結構 出棧操作 四.兩棧共享儲存空間 五.棧的鏈式儲存結構 1.棧的鏈式儲存結構 2.棧的鏈式儲存結構 進棧操作 3.棧的鏈...
資料結構與演算法 4棧和佇列
棧的定義 棧 stack 又稱堆疊,它是運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除操作,不允許在其他任何位置進行插入,刪除,查詢等操作。表中進行插入,刪除操作的一端稱為棧頂 top 棧頂儲存的元素稱為 棧頂元素。相對的,表另一端稱為棧底 botton 佇列定義 佇列 queue 簡稱佇...
資料結構與演算法(4) 棧的應用
include include include using namespace std bool matchbrackets char pstr else if pstr i pstr i pstr i else s.top else if s.empty else int main char pt...