两个栈组成的队列

#include <iostream>
#include <stack>
using namespace std;

class TwoStacksQueue {
private:
    stack<int> stackPush;
    stack<int> stackPop;

public:
    TwoStacksQueue() {};
    ~TwoStacksQueue() {};

    void push(int pushInt);
    void pop();
    int front();
};

void TwoStacksQueue::push(int pushInt) {
    stackPush.push(pushInt);
}

void TwoStacksQueue::pop() {
    if (stackPop.empty() && stackPush.empty()) {
        throw runtime_error("Your queue is empty.");
    }
    if (stackPop.empty()) {
        while (!stackPush.empty()) {
            int value = stackPush.top();
            stackPush.pop();
            stackPop.push(value);
        }
    }
    stackPop.pop();
}

int TwoStacksQueue::front() {
    if (stackPop.empty() && stackPush.empty()) {
        throw runtime_error("Your queue is empty.");
    }
    if(stackPop.empty()) {
        while (!stackPush.empty()) {
            int value = stackPush.top();
            stackPush.pop();
            stackPop.push(value);
        }
    }
    return stackPop.top();
}

int main()
{
    TwoStacksQueue test;
    test.push(10);
    test.push(20);
    test.push(30);
    cout << test.front() << endl; // 10
    test.pop();
    cout << test.front() << endl; // 20
    test.pop();
    cout << test.front() << endl; // 30
    test.pop();
    return 0;
}

 

栈可以改变元素出入顺序,两个栈正好可以抵消,实现类似队列先进先出的功能:

  • stackPop为空的时候才能往栈内压;
  • 若向stackPop内压元素,则一次性把stackPush中的元素压完。
posted @ 2019-07-26 19:18  木子石页  阅读(131)  评论(0编辑  收藏  举报