刷代码随想录有感(28):用栈实现队列

本题不涉及算法,涉及到模拟以及数据结构方法的应用,我还不够熟练,需要多练。题干如下;

模拟思路如下:

两个栈分别对应输入端(队尾)和输出端(队头)。

代码如下:

class MyQueue {
public:
    stack<int> stkIn;
    stack<int> stkOut;
    MyQueue() {//初始化

    }
    
    void push(int x) {
        stkIn.push(x);
    }
    
    int pop() {
        if(stkOut.empty()){
            while(!stkIn.empty()){
                stkOut.push(stkIn.top());
                stkIn.pop();
            }
        }
        int res;
        res = stkOut.top();
        stkOut.pop();
        return res;

    }
    
    int peek() {
        int res = this -> pop();
        stkOut.push(res);
        return res;
    }
    
    bool empty() {
        return (stkIn.empty() && stkOut.empty());

    }
};

实现队头弹出功能时,实际上就是出栈,而出栈可能为空,此时用.empty()方法判断,不为空则是前面加一个!变成!stk.empty(),压入栈就是.push(压入的值)。

要点:①我一开始疑惑,为什么不直接stkOut.push(stkIn.pop())而是要先stkOut.push(stkIn.top())然后再stkIn.pop()。我查了之后才发现pop不返回值,而top返回,所以先要top后再pop。

函数的复用:注意到在peek函数中:

int res = this -> pop();

利用this ->即可调用函数并获取返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值