常考数据结构与算法:用两个栈实现队列
題目描述
用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素為int類型。
分析
? ?隊列的特性是:“先入先出”,棧的特性是:“先入后出”
?
當我們向模擬的隊列插入數 1,2,3?時,假設插入的是 stack1,此時的棧情況為:
? ?棧 stack1:{1,2,3}
? ?棧 stack2:{}
當需要彈出一個數,根據隊列的"先進先出"原則,1?先進入,則 1應該先彈出。但是此時 1在 stack1 的最下面,將 stack1 中全部元素逐個彈出壓入 stack2,現在可以正確的從 stack2 中彈出 1,此時的棧情況為:
? 棧 stack1:{}
? 棧 stack2:{3,2}
繼續彈出一個數,2比 3?先進入"隊列",2?彈出,注意此時 2在 stack2 的棧頂,可直接彈出,此時的棧情況為:
? 棧 stack1:{}
? 棧 stack2:{3}
此時向模擬隊列插入一個數 4,還是插入 stack1,此時的棧情況為:
? 棧 stack1:{4}
? 棧 stack2:{3}
彈出一個數,3?比 4 先進入,3 彈出,注意此時 3 在 stack2 的棧頂,可直接彈出,此時的棧情況為:
? 棧 stack1:{4}
? 棧 stack2:{}
?
根據上述栗子可得出結論:
? 當插入時,直接插入 stack1.
??當彈出時,當 stack2 不為空,彈出 stack2 棧頂元素,如果 stack2 為空,將 stack1 中的全部數逐個出棧入棧 stack2,再彈出 stack2 棧頂元素
?
?
import java.util.Stack;public class StackQueue {Stack<Integer> stack1 = new Stack<Integer>();Stack<Integer> stack2 = new Stack<Integer>();public void push(int node) {stack1.push(node);}public int pop() {if(stack2.size() <= 0){while(stack1.size() != 0){stack2.push(stack1.pop());}}return stack2.pop();} }?
總結
以上是生活随笔為你收集整理的常考数据结构与算法:用两个栈实现队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c库IO函数
- 下一篇: 常考数据结构与算法:查找第K大元素算法