1. 程式人生 > >資料結構筆記_棧和佇列

資料結構筆記_棧和佇列

一. 棧(Stack)

棧的認識:

  • 棧是一種線性結構;
  • 相比陣列,棧對應的操作是陣列的子集;
  • 只能從一端新增元素,也只能從一端取出元素,這一端稱為棧頂;
  • 棧是一種後進先出的資料結構(Last In First Out:LIFO);
  • 棧看似簡單,但在計算機世界裡擁有著不可思議的作用
  • 通過棧來記錄需要匹配的元素 ,棧頂元素反映了在巢狀的層次關係(如,函式的巢狀,括號匹配...)中,最近的需要匹配的元素.

棧的應用:

  • 無處不在的Undo操作(撤銷)
  • 程式呼叫使用的系統棧,用於記錄函式呼叫過程中的中斷點,保證子過程執行完可以自動的回到上層呼叫的中斷處
  • 括號匹配--編譯器  (leetcode 20)https://mp.csdn.net/postedit/83870184

 

二.佇列(Queue)

佇列的認識:

  • 佇列也是一種線性結構
  • 相比陣列,佇列對應的操作是陣列的子集 
  • 只能從一端(隊尾)新增元素,從另一端(隊首)取出元素
  • 佇列是一種先進先出的資料結構(First in First Out: FIFO)
  • 對列應用到一些需要排隊的請求

 

佇列的分類:

  1. 陣列佇列:侷限性是在每次取出隊首元素時,都要將後面的元素依次向前移動一步,這將導致隊列出隊的時間複雜度為O(n);
  2. 迴圈佇列:1>. 解決陣列佇列的缺陷,在底層陣列中維護兩個指標 "front" 和 "tail"。

                           2>. 迴圈的實現是是通過陣列指標加一再對長度取餘來實現的。

                           3>. 規定佇列為空與佇列為滿的條件如下圖。為了保證佇列為空與佇列為滿是兩個不同的條件,迴圈佇列會浪 費掉底層陣列的一個空間。