队列实现栈

先来看栈有什么特性呢?
遵从先进后出的原则,就比如说一个容器,正常情况下,先放进去的当然是后出来了。(FILO)
再来看看队列有什么特性?
队列在我们生活中就类似于排队,比如在在去食堂吃饭的时候就需要排队去买饭,排在前边的人自然先买到饭(FIFO)
清楚了这些基本概念之后,那么如何利用队列实现栈呢?先看下图
在这里插入图片描述
大方框里边的小方框(没有闭合)代表一个队列,你可以把它想象成一列正在排队等候打饭的同学,里边有A、B、C同学,外边用一个黑盒子包起来。内部怎么操作外边是看不见的。然后A在最前边,先出来,经过红色的路径,再次排在C的后边,同理B也出来,排在A后边。那么就可以得到下图。
在这里插入图片描述
此时在让C先出来,接着B再A,此时就如同栈一样,先入栈的A最后出栈,相反,后入栈的C最先出栈
下面贴出详细代码(leetcode亲测无误哦)

class MyStack {
public:
    queue<int>   q;    //首先定义一个int类型的队列q
    /** Initialize your data structure here. */
    MyStack() {
        
    }
    
    /** Push element x onto stack. */
    void push(int x) {//将元素压入栈中
        q.push(x);
        
    }
    
    /** Removes the element on top of the stack and returns that element. */
    int pop() {
        int size=q.size();//移动size-1个元素,因为最后一个元素不用移动,把前几个元素都移到后边去了,自然最后一个元素就成了第一个
        for(int i=0;i<size-1;i++)
        {
            int v=q.front();
            q.pop();//弹出栈后再压入栈
            q.push(v);
        }
        int v=q.front();
        q.pop();
        return v;
    }
    
    /** Get the top element. */
    int top() {//返回栈顶元素
    int size=q.size();
        for(int i=0;i<size-1;i++)
        {
            int v=q.front();
            q.pop();
            q.push(v);
        }
        int v=q.front();
        q.pop();
        q.push(v);
        return v;    
        
    }
    
    /** Returns whether the stack is empty. */
    bool empty() {
        return q.empty();
        
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值