劍指offer第二版-9.用兩個(gè)棧實(shí)現(xiàn)隊(duì)列

本系列導(dǎo)航:劍指offer(第二版)java實(shí)現(xiàn)導(dǎo)航帖

面試題9:用兩個(gè)棧實(shí)現(xiàn)隊(duì)列

題目要求:
用兩個(gè)棧,實(shí)現(xiàn)隊(duì)列的從隊(duì)尾插入元素offer()和從隊(duì)頭拋出元素poll()
相關(guān):用隊(duì)列實(shí)現(xiàn)棧

思路:
(1)對(duì)于插入操作,棧與隊(duì)列都是從隊(duì)尾進(jìn)行,因此一行代碼就可以完成offer()
(2)對(duì)于彈出操作,隊(duì)列先進(jìn)先出從隊(duì)頭開始,而棧后進(jìn)先出從隊(duì)尾開始,要想取到隊(duì)頭元素,就得需要第二個(gè)棧stack2的協(xié)助:彈出時(shí)將stack1的元素依次取出放到stack2中,此時(shí)stack2進(jìn)行彈出的順序就是整個(gè)隊(duì)列的彈出順序。而如果需要插入,放到stack1中即可。
總結(jié)下,stack1負(fù)責(zé)插入,stack2負(fù)責(zé)彈出,如果stack2為空了,將stack1的元素依次彈出并存放到stack2中,之后對(duì)stack2進(jìn)行彈出操作。

代碼:

package chapter2;
import java.util.Stack;

/**
 * Created by ryder on 2017/6/20.
 * 用兩個(gè)棧實(shí)現(xiàn)隊(duì)列
 */
class MyQueue<T>{
    private Stack<T> stack1 = new Stack<>();
    private Stack<T> stack2 = new Stack<>();
    
    public void offer(T data){
        stack1.push(data);
    }
    public T poll(){
        if(!stack2.isEmpty()){
            return stack2.pop();
        }
        else if(!stack1.isEmpty()){
            while(!stack1.isEmpty())
                stack2.push(stack1.pop());
            return stack2.pop();
        }
        else
            return null;
    }
}

public class P68_QueueWithTwoStacks {
    public static void main(String[] args){
        MyQueue<Integer> myQueue = new MyQueue<>();
        System.out.println(myQueue.poll());
        myQueue.offer(1);
        myQueue.offer(2);
        myQueue.offer(3);
        System.out.println(myQueue.poll());
        System.out.println(myQueue.poll());
        myQueue.offer(4);
        System.out.println(myQueue.poll());
        System.out.println(myQueue.poll());
        System.out.println(myQueue.poll());
    }
}

運(yùn)行結(jié)果

null
1
2
3
4
null
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本系列導(dǎo)航:劍指offer(第二版)java實(shí)現(xiàn)導(dǎo)航帖 用隊(duì)列實(shí)現(xiàn)一個(gè)棧題目要求:用兩個(gè)隊(duì)列,實(shí)現(xiàn)棧的從隊(duì)尾插入元...
    ryderchan閱讀 2,932評(píng)論 2 2
  • 棧 棧的英文單詞是Stack,它代表一種特殊的線性表,這種線性表只能在固定一端(通常認(rèn)為是線性表的尾端)進(jìn)行插入,...
    Jack921閱讀 1,631評(píng)論 0 5
  • 用兩個(gè)棧實(shí)現(xiàn)隊(duì)列 題目描述 用兩個(gè)棧來實(shí)現(xiàn)一個(gè)隊(duì)列,完成隊(duì)列的Push和Pop操作。 隊(duì)列中的元素為int類型。 ...
    echoVic閱讀 2,024評(píng)論 0 2
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評(píng)論 25 708
  • 南方的小城市放眼過去舊綠色,在前些日子宿舍樓下一排排的樹枝被修剪本來應(yīng)該咯吱,風(fēng)吹過發(fā)出響聲??上绱斯铝⒌拇嬖趽?..
    云端的人閱讀 452評(píng)論 0 1

友情鏈接更多精彩內(nèi)容