資料結構和演算法總結--棧

代品品發表於2020-10-07

棧的定義

棧是一種操作受限的線性表,只允許在一端進行插入和刪除操作。

棧的特點

先進後出

為什麼需要棧

雖然陣列和連結串列更加靈活,並且都可以滿足只在一端進行插入和刪除操作的需求,但是由於會暴露其他操作,存在引發錯誤操作的風險,所以,當某個資料集合只涉及在一端進行插入和刪除資料,並且滿足先進後出的操作特性時,應首先使用棧這種資料結構。

如何實現一個棧

棧既可以用陣列來實現,也可以用連結串列來實現
用陣列實現的棧,叫順序棧;用連結串列實現的棧,叫鏈式棧

基本操作的效能

入棧時間複雜度O(1), 空間複雜度O(1)
出棧時間複雜度O(1), 空間複雜度O(1)

棧的應用場景

  • 函式呼叫

為什麼函式呼叫要用棧來儲存臨時變數?
函式呼叫符合後進先出的特性,用棧來實現最為合適。從呼叫函式進入被呼叫函式,變化的是作用域,從根本上講,只要保證每進入一個新函式,都是一個新的作用域就可以,而實現這個,用棧最合適。進入被呼叫函式,分配一段棧空間給這個函式的變數,在這個函式結束的時候,將棧頂復位,正好回到呼叫函式的作用域。

  • 表示式求值(一個棧用於儲存運算元,一個棧用於儲存運算子)
  • 括號匹配

相關文章