一. 棧
- 特性:先進后出的數據結構
- 棧頂,棧尾
-
應用:每個 web 瀏覽器都有一個返回按鈕。當你瀏覽網頁時,這些網頁被放置在一個棧中(實際是網頁的網址)。你現在查看的網頁在頂部,你第一個查看的網頁在底部。如果按‘返回’按鈕,將按相反的順序瀏覽剛才的頁面。
- 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 中的項數。它不需要參數,並返回一個整數。


