题解 | 【模板】队列

【模板】队列

https://www.nowcoder.com/practice/afe812c80ad946f4b292a26dd13ba549

#include <iostream>
#include <bits/stdc++.h>
#include <string>

using namespace std;

class QueueWithStacks {
private:
    stack<int> st1;  // 输入栈
    stack<int> st2;  // 输出栈

    // 辅助函数:当输出栈为空时,将输入栈数据转移过来
    void move_st1_to_st2() {
        while (!st1.empty()) {
            st2.push(st1.top());
            st1.pop();
        }
    }

public:
    // 入队操作
    void push(int num) {
        st1.push(num);
    }

    // 获取队首元素
    void front() {
        if (st1.empty() && st2.empty()) {
            cout << "error" << endl;
            return;
        }
        if (st2.empty()) {
            move_st1_to_st2();
        }
        cout << st2.top() << endl;
    }

    // 出队操作
    void pop() {
        if (st1.empty() && st2.empty()) {
            cout << "error" << endl;
            return;
        }
        if (st2.empty()) {
            move_st1_to_st2();
        }
        cout << st2.top() << endl;
        st2.pop();
    }
};


 
int main() {
    int n;
    cin >> n;

    QueueWithStacks queue; // 创建队列对象
    for (int i = 0; i < n; ++i) {
        string cmd;
        cin >> cmd;
        
        if (cmd == "push") {
            int num;
            cin >> num;
            queue.push(num);
        } 
        else if (cmd == "front") {
            queue.front();
        } 
        else if (cmd == "pop") {
            queue.pop();
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

使用双栈实现队列,模拟先进先出,push压入栈1,front和pop,将栈1的数据迁移到栈2

全部评论

相关推荐

03-29 14:19
门头沟学院 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
这就是上等人的社会吗:都先停一停,有没有hxd告诉我在哪里点京东外卖,捣鼓半天,注册成了专送骑手查看图片
投递美团等公司6个岗位 > 京东美团大战,你怎么看?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务