棧和隊列學習筆記

一、棧

當某個數據集合只涉及在一端插入和刪除數據,並且滿足後進先出、先進後出的特性,我們就應該首選“棧”這種數據結構。

棧既可以用數組來實現,也可以用鏈表來實現。用數組實現的棧,我們叫作順序棧,用鏈表實現的棧,我們叫作鏈式棧

1.1 如何實現一個“棧”?

  • 在入棧和出棧過程中,只需要一兩個臨時變量存儲空間,所以空間複雜度是 O(1);
  • 不管是順序棧還是鏈式棧,入棧、出棧只涉及棧頂個別數據的操作,所以時間複雜度都是 O(1)。

1.2 支持動態擴容的順序棧

  • 對於出棧操作來說,我們不會涉及內存的重新申請和數據的搬移,所以出棧的時間複雜度仍然是 O(1)。
  • 對於入棧操作來說,當棧中有空閒空間時,入棧操作的時間複雜度爲 O(1);但當空間不夠時,就需要重新申請內存和數據搬移,所以時間複雜度就變成了 O(n)。
  • 對於入棧操作來說,最好情況時間複雜度是 O(1),最壞情況時間複雜度是 O(n),平均情況下的時間複雜度可以用攤還分析法爲O(1)。

二、隊列

先進者先出,這就是典型的“隊列”

三、練習

棧練習

隊列練習

發佈了138 篇原創文章 · 獲贊 146 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章