232. 用栈实现队列 225. 用队列实现栈

232.用栈实现队列

在这里插入图片描述

解法

在这里插入图片描述

c++

class MyQueue {

private:
   //类的私有成员部分,它包含了两个堆栈(stack)对象:inStack和outStack。同时,类中还定义了一个私有成员函数in2out()。
   stack<int> inStack,outStack;
   //in2out()函数的作用是将inStack中的元素转移到outStack中
   void in2out(){
       while(!inStack.empty()){
        //遵循队列先进先出原则
           outStack.push(inStack.top());
           inStack.pop();
       }
   }
public:
    MyQueue() {

    }
    //将元素 x 推到队列的末尾
    void push(int x) {
        inStack.push(x);
    }
    //从队列的开头移除并返回元素
    int pop() {
        if (outStack.empty()) {
            in2out();
        }
        int x = outStack.top();
        outStack.pop();
        return x;
    }
    //返回队列开头的元素
    int peek() {
        if (outStack.empty()) {
            in2out();
        }
        return outStack.top();
    }
    //如果队列为空,返回 true ;否则,返回 false
    bool empty() {
        return inStack.empty() && outStack.empty();
    }

};

225. 用队列实现栈

在这里插入图片描述

解法

在这里插入图片描述
2进queue2,queue1和queue2交换;
9进queue2,queue1的2添加在queue2的9的后面,queue1和queue2交换
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

python

class MyStack(object):
    def __init__(self):
        #初始化队列
#这行代码创建了一个空的双端队列(deque)对象,在Python中,collections.deque是一个双端队列的实现,它可以从两端高效地进行添加(append)和删除(pop)操作。
        self.queue=collections.deque()

    def push(self, x):
        """
        :type x: int
        :rtype: None
        """
        #求队列长度
        n=len(self.queue)
        #首先将新元素x添加到队列的末尾,然后通过循环将队列中除了新元素之外的所有元素逐个取出,再添加到队列的末尾
        self.queue.append(x)
        for _ in range(n):
            #self.queue.popleft(),取出队列的头部元素;从队列的左端(即队列的头部)移除并返回一个元素a[b]->ba  ba[c]->cba
            self.queue.append(self.queue.popleft())

    #取出头部元素,并移除
    def pop(self):
        """
        :rtype: int
        """
        return self.queue.popleft()
    
    #取出头部元素
    def top(self):
        """
        :rtype: int
        """
        #感觉像数组
        return self.queue[0]

    def empty(self):
        """
        :rtype: bool
        """
        #空为false,故加一个not
        return not self.queue

c++

class MyStack {
//方法1 用队列实现栈(先入后出)

//你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。


public:
//定义两个队列,queue1存栈内元素,queue2辅助队列
    queue<int> queue1;
    queue<int> queue2;
    MyStack() {

    }
    //将元素 x 压入栈顶。
    void push(int x) {
        queue2.push(x);
        while(!queue1.empty()){
            queue2.push(queue1.front());
            queue1.pop();
        }
        swap(queue2,queue1);
    }
    //移除并返回栈顶元素
    int pop() {
        int x =queue1.front();
        queue1.pop();
        return x;

    }
    //返回栈顶元素
    int top() {
        int r = queue1.front();
        return r;

    }
    //如果栈是空的,返回 true ;否则,返回 false
    bool empty() {
        
            return queue1.empty();

    }
};


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值