鱼C论坛

 找回密码
 立即注册
查看: 2628|回复: 7

[已解决]入队列1、2、3,出队列1,入队列4,再全部出队列

[复制链接]
发表于 2022-3-29 20:21:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
入队列1、2、3,出队列1,入队列4,再全部出队列
最佳答案
2022-3-29 20:51:58
#include <queue>
#include <cstddef>

using std::queue;

int main() {
    queue<size_t> q;
    q.push(1);
    q.push(2);
    q.push(3);
    q.pop();
    q.push(4);
    while(!q.empty()) q.pop();
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-29 20:28:08 | 显示全部楼层
这是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-29 20:51:58 | 显示全部楼层    本楼为最佳答案   
#include <queue>
#include <cstddef>

using std::queue;

int main() {
    queue<size_t> q;
    q.push(1);
    q.push(2);
    q.push(3);
    q.pop();
    q.push(4);
    while(!q.empty()) q.pop();
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-29 21:49:31 | 显示全部楼层

能麻烦再出一个用两个栈实现上述队列的嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-29 22:29:14 | 显示全部楼层
言辞. 发表于 2022-3-29 21:49
能麻烦再出一个用两个栈实现上述队列的嘛

用两个栈实现上述队列?
什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-29 22:32:56 | 显示全部楼层
人造人 发表于 2022-3-29 22:29
用两个栈实现上述队列?
什么意思?

就是利用两个栈的后进先出实现一个队列先进先出的效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-29 23:03:01 | 显示全部楼层
言辞. 发表于 2022-3-29 22:32
就是利用两个栈的后进先出实现一个队列先进先出的效果
#include <stack>
#include <cstddef>

//#define DEBUG

#ifdef DEBUG
#include <iostream>
using std::cout, std::endl;
#endif

using std::stack;

template<typename T>
class queue {
public:
    void push(const T &value) {
        this->lhs.push(value);
    }
    void pop() {
        this->move(this->lhs, this->rhs);
        this->rhs.pop();
        this->move(this->rhs, this->lhs);
    }
    const T top() {
        this->move(this->lhs, this->rhs);
        const T result = this->rhs.top();
        this->move(this->rhs, this->lhs);
        return result;
    }
    bool empty() {
        return this->lhs.empty();
    }
private:
    stack<T> lhs, rhs;

    // lhs to rhs
    static void move(stack<T> &lhs, stack<T> &rhs) {
        while(!lhs.empty()) {
            rhs.push(lhs.top());
            lhs.pop();
        }
    }
};

int main() {
#ifdef DEBUG
    {
        queue<size_t> q;
        q.push(1);
        q.push(2);
        q.push(3);

        cout << q.top() << endl;
        q.pop();

        q.push(4);
        while(!q.empty()) {
            cout << q.top() << endl;
            q.pop();
        }
        return 0;
    }
#endif
    queue<size_t> q;
    q.push(1);
    q.push(2);
    q.push(3);
    q.pop();
    q.push(4);
    while(!q.empty()) q.pop();
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-30 09:11:14 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 11:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表