Leetcode刷题——栈与队列

一、栈与队列定义

  • 栈:先进后出,栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。 不像是set 或者map 提供迭代器iterator来遍历所有元素。栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现。
  • 队列:先进先出,同样不允许有遍历行为,不提供迭代器, STL中队列一样是以deque为缺省情况下的底部结构。

二、Leetcode题目

1.用栈实现队列

232. 用栈实现队列

  • 利用两个栈实现队列
  • push实现很简单,pop实现较为复杂
  • pop:将s1元素弹出压入到s2中,再弹出s2的栈顶元素即可实现队列pop.
  • 注:先确认s2是空栈,再while循环将s1所有元素压入s2中。
  • peek:取队列头元素再使用pop后需要再把pop的元素压回去。
  • empty:s1.empty()&s2.empty()
class MyQueue {
    stack<int>s1;
    stack<int>s2;
public:
    MyQueue() {
        
    }
    void push(int x) {
        s1.push(x);
    } 
    int pop() {
        if(s2.empty()){
        while(!s1.empty()){
            s2.push(s1.top());
            s1.pop();
        }}
        int result=s2.top();
        s2.pop();
        return result;
    }
    int peek() {
        int res=this->pop();
        s2.push(res);
        return res;
    }
    bool empty() {
        return s1.empty()&&s2.empty();
    }
};

2.用队列实现栈

225. 用队列实现栈

  • 使用一个队列实现栈
  • push实现很简单,pop实现较为复杂
  • 由于栈是先进后出,所以想办法将队列的尾元素放到队列首部。即进行q.size()-1次循环完成。循环结束后pop出q.front()元素。
  • top:栈的顶即为队列的尾,q.back()取出,也可使用pop再push
  • empty:q.empty()
class MyStack {
    queue<int>q;
public:
    MyStack() {
    }
    void push(int x) {
        q.push(x);
    }
    int pop() {
        int size=q.size()-1;
        while(size>0){
            int temp=q.front();
            q.push(temp);
            q.pop();
            size--;
        }
        int res=q.front();
        q.pop();
        return res;
    }
    int top() {
        return q.back();
    }
    bool empty() {
        return q.empty();
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值