棧和隊(duì)列的相互實(shí)現(xiàn)

兩個(gè)棧實(shí)現(xiàn)隊(duì)列:

一個(gè)棧用來(lái)入,一個(gè)棧用來(lái)出

public class StackToQueue<T> {
    private Stack<T> stackin;
    private Stack<T> stackout;
    
    public StackToQueue() {
        stackin = new Stack<T>();
        stackout = new Stack<T>();
    }
    
    public void add(T a) {
        stackin.add(a);
    }
    
    public T poll() {
        if(stackout.isEmpty()) {
            while(!stackin.isEmpty()) {
                stackout.add(stackin.pop());
            }   
        }
        if (stackout.isEmpty()) {  
            throw new RuntimeException("No more element.");  
        }  
        return stackout.pop();

    }
    
}

兩個(gè)隊(duì)列實(shí)現(xiàn)棧:

入棧的時(shí)候正常存入一個(gè)隊(duì)列,出棧的時(shí)候用另一個(gè)隊(duì)列保存除最后一個(gè)元素以外的元素,并將最后一個(gè)元素出隊(duì)。

public class QueueToStack<T> {
    Queue<T> queueA;
    Queue<T> queueB;
    Boolean isA;
    
    public QueueToStack() {
        queueA = new LinkedList<>();
        queueB = new LinkedList<>();
        isA = true;
    }
    
    public void push(T a) {
        if(isA) {
            queueA.offer(a);
        }else {
            queueB.offer(a);
        }
    }
    
    public T pop() {
        if(isA) {
            int size = queueA.size();
            for(int i = 0; i < size - 1; i++) {
                queueB.offer(queueA.poll());
            }
            isA = false;
            return queueA.poll();
        }else {
            int size = queueB.size();
            for(int i = 0; i < size - 1; i++) {
                queueA.offer(queueB.poll());
            }
            isA = true;
            return queueB.poll();
        }
    }

}

?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 前言 棧和隊(duì)列作為兩種典型的線性表,有著非常鮮明甚至可以說(shuō)是相互對(duì)立的特點(diǎn);棧先進(jìn)后出(后進(jìn)先出),隊(duì)列先進(jìn)先出(...
    IAM四十二閱讀 721評(píng)論 0 2
  • Java byte code 的學(xué)習(xí)意義 為啥要學(xué)java bytecode,這就跟你問(wèn)我已經(jīng)會(huì)python了為...
    shanggl閱讀 1,850評(píng)論 0 3
  • 棧 棧的英文單詞是Stack,它代表一種特殊的線性表,這種線性表只能在固定一端(通常認(rèn)為是線性表的尾端)進(jìn)行插入,...
    Jack921閱讀 1,623評(píng)論 0 5
  • 棧:如何實(shí)現(xiàn)瀏覽器的前進(jìn)和后退功能? 瀏覽器的前進(jìn)、后退功能,我想你肯定很熟悉吧? 當(dāng)你依次訪問(wèn)完一串頁(yè)面 a-b...
    GhostintheCode閱讀 971評(píng)論 0 2
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,632評(píng)論 1 32

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