棧和隊列

一. 棧

  • 特性:先進後出的數據結構
  • 棧頂,棧尾
  • 應用:每一個 web 瀏覽器都有一個返回按鈕。當你瀏覽網頁時,這些網頁被放置在一個棧中(實際是網頁的網址)。你如今查看的網頁在頂部,你第一個查看的網頁在底部。若是按‘返回’按鈕,將按相反的順序瀏覽剛纔的頁面。html

     
    • Stack() 建立一個空的新棧。 它不須要參數,並返回一個空棧。
    • push(item)將一個新項添加到棧的頂部。它須要 item 作參數並不返回任何內容。
    • pop() 從棧中刪除頂部項。它不須要參數並返回 item 。棧被修改。
    • peek() 從棧返回頂部項,但不會刪除它。不須要參數。 不修改棧。
    • isEmpty() 測試棧是否爲空。不須要參數,並返回布爾值。
    • size() 返回棧中的 item 數量。不須要參數,並返回一個整數。

1. 手寫一個棧

 

 2. 模擬瀏覽器回退按鈕

二. 隊列

  • 隊列:先進先出
  • 應用場景:
    •   咱們的計算機實驗室有 30 臺計算機與一臺打印機聯網。當學生想要打印時,他們的打印任務與正在等待的全部其餘打印任務「一致」。第一個進入的任務是先完成。若是你是最後一個,你必須等待你前面的全部其餘任務打印

   

  • Queue() 建立一個空的新隊列。 它不須要參數,並返回一個空隊列。
  • enqueue(item) 將新項添加到隊尾。 它須要 item 做爲參數,並不返回任何內容。
  • dequeue() 從隊首移除項。它不須要參數並返回 item。 隊列被修改。
  • isEmpty() 查看隊列是否爲空。它不須要參數,並返回布爾值。
  • size() 返回隊列中的項數。它不須要參數,並返回一個整數。

 1. 手寫一個隊列

 

 

 2. 案例: 燙手的山芋

  • 燙手山芋遊戲介紹:6個孩子圍城一個圈,排列順序孩子們本身指定。第一個孩子手裏有一個燙手的山芋,須要在計時器計時1秒後將山芋傳遞給下一個孩子,依次類推。規則是,在計時器每計時7秒時,手裏有山芋的孩子退出遊戲。該遊戲直到剩下一個孩子時結束,最後剩下的孩子獲勝。請使用隊列實現該遊戲策略,排在第幾個位置最終會獲勝。

 

 

 

 3. 雙端隊列

  • 同同列相比,有兩個頭部和尾部。能夠在雙端進行數據的插入和刪除,提供了單數據結構中棧和隊列的特性
 
  • Deque() 建立一個空的新 deque。它不須要參數,並返回空的 deque。
  • addFront(item) 將一個新項添加到 deque 的首部。它須要 item 參數 並不返回任何內容。
  • addRear(item) 將一個新項添加到 deque 的尾部。它須要 item 參數並不返回任何內容。
  • removeFront() 從 deque 中刪除首項。它不須要參數並返回 item。deque 被修改。
  • removeRear() 從 deque 中刪除尾項。它不須要參數並返回 item。deque 被修改。
  • isEmpty() 測試 deque 是否爲空。它不須要參數,並返回布爾值。
  • size() 返回 deque 中的項數。它不須要參數,並返回一個整數。

 

 

 

 

相關文章
相關標籤/搜索