码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-25 23:04:59      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:   stack   

题目描述: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

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:   stack   

原文地址:http://blog.csdn.net/quzhongxin/article/details/47060289

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!