日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

常考数据结构与算法:用两个栈实现队列

發布時間:2025/6/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常考数据结构与算法:用两个栈实现队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

用兩個棧來實現一個隊列,完成隊列的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();} }

?

總結

以上是生活随笔為你收集整理的常考数据结构与算法:用两个栈实现队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。