演算法學習記錄五(C++)--->兩個棧實現佇列

Deft_MKJing宓珂璟發表於2017-08-03

描述

*用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。
*棧是先進後出,FILO
*佇列是先進先出,FIFO

思路

這裡寫圖片描述

入隊:將元素進棧A
出隊:判斷棧B是否為空,如果為空,則將棧A中所有元素pop,並push進棧B,棧B出棧;
如果不為空,棧B直接出棧。

class Solution
{
public:
    // 棧1負責入棧
    void push(int node) {
        stack1.push(node);

    }
    // 出棧
    int pop() {
        int a;
        // 當棧2為空的時候
        if(stack2.empty()){
            // 把棧1上的所有資料從棧頂拿出來依次push到棧2
            while(!stack1.empty()){
                a = stack1.top();
                stack2.push(a);
                stack1.pop();
            }
        }
        // 棧2不為空 或者 直接出棧
        a=stack2.top();
        stack2.pop();
        return a;
    }
/*
<分析>:
入隊:將元素進棧A
出隊:判斷棧B是否為空,如果為空,則將棧A中所有元素pop,並push進棧B,棧B出棧;
 如果不為空,棧B直接出棧。
 */
private:
    stack<int> stack1;
    stack<int> stack2;
};

擴充套件->兩個佇列實現棧

這裡寫圖片描述
入棧:將元素進佇列A
出棧:判斷佇列A中元素的個數是否為1,如果等於1,則出佇列,否則將佇列A中的元素 以此出佇列並放入佇列B,直到佇列A中的元素留下一個,然後佇列A出佇列,再把 佇列B中的元素出佇列以此放入佇列A中。

相關文章