剑指 | 7-利用两个栈构建一个队列

题目描写叙述:http://ac.jobdu.com/problem.php?pid=1512
用两个栈来实现一个队列,完毕队列的Push和Pop操作。
队列中的元素为int类型。


解析:
定义2个栈s1, s2
1. 開始时。将元素push进s1
2. front()或pop()时,将s1的数据,出栈。顺序压入s2; 此时发现 s2 的出栈顺序即队列的出队列顺序。


3. 再次push时,仍然 push 进 s1
4. front()或pop()时,假设 s2 为空,则将 s1 的全部数据压入 s2

将 s1 作为入队列的栈,将 s2 作为出队列的栈,当 s2 为空时,将 s1 的全部内容压入 s2

#include <iostream>
#include <stack>
using namespace std;
template <class T>
class MyQueue {
private:
    stack<T> s1, s2;
public:
    void push(T val) {
        s1.push(val);
    }
    T front() {
        if (s2.empty()) {
            if (s1.empty())
                return -1; //队列为空,返回-1
            while (s1.empty() == false) {
                s2.push(s1.top());
                s1.pop();
            }
        }
        return s2.top();
    }
    void pop() {
        if (s2.empty()) {
            if (s1.empty())
                return;
            while (s1.empty() == false) {
                s2.push(s1.top());
                s1.pop();
            }
        }
        s2.pop();
        return;
    }
};
int main() {
    MyQueue<int> q;
    q.push(1);
    q.push(2);
    int val = q.front();
    q.pop();
    cout << val << endl;
    q.push(3);
    q.pop();
    val = q.front();
    cout << val << endl;
}
结果为:
1
3
posted @ 2017-08-07 13:21  zhchoutai  阅读(110)  评论(0编辑  收藏  举报