1. 程式人生 > >用佇列實現棧,用棧實現佇列,聽起來有點繞,都搞懂了就掌握了精髓!

用佇列實現棧,用棧實現佇列,聽起來有點繞,都搞懂了就掌握了精髓!

[toc] #### 一、背景 棧和佇列是資料結構中最常用到的兩種結構,有非常廣泛的運用,該篇文章將通過動畫的手段,展示棧和佇列相互實現的底層原理,讓我們真正搞懂棧和佇列的特性。 #### 二、概念 ##### 2.1 棧 > **棧[Stack]**:是一種限定僅在表尾進行插入和刪除操作的線性表;即後進先出(LIFO-last in first out),最後插入的元素最先出來 - 入棧(push) ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200609133904133.gif) - 出棧 (pop) ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200609133904140.gif) ##### 2.2 佇列 >  佇列[Queue]:是一種限定僅在表頭進行刪除操作,僅在表尾進行插入操作的線性表;即先進先出(FIFO-first in first out):最先插入的元素最先出來。 - 入隊(enqueue) - ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200609140707327.gif) - 出隊(dequeue) ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200609141813876.gif) #### 三、棧和佇列的相互實現 ##### 3.1 用佇列實現棧 - 模擬入棧的實現原理 -- 棧的特性是新加入的元素出現在棧頂,保證後進先出。 -- 佇列的特性為新加入的元素出現在隊尾,佇列的隊尾元素最後出隊。 -- **按以上兩個前提,我們可以讓隊頭至隊尾前的其它所有元素依次出隊再入隊,直至在隊尾新加入的元素被移到隊頭,也即實現了讓新壓入的元素保留在棧頂**。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200609162251126.gif) - 模擬出棧的實現原理 -- 由於在入棧時保證佇列中新加入隊尾的元素被移到了隊頭,出棧只需彈出隊頭元素即可。 - 完整程式碼實現 ```java /** * 用佇列模擬實現棧 * * @author zhuhuix * @date 2020-06-09 */ public class QueueImplStack { // 定義佇列 priva