zoukankan      html  css  js  c++  java
  • 剑指 | 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
  • 相关阅读:
    java实现万年历
    XCTF 逆向 re1-100
    iOS多线程开发之GCD
    Hexo Next统计文章访问量
    Name/Value 配對和物件
    Mac系统Git生成ssh公钥
    《大话数据结构》三
    C++指针和引用
    英语语法讲解第一课句子成分-表语
    String-mainipulation7
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7298653.html
Copyright © 2011-2022 走看看