首页 > 其他分享 >232. 用栈实现队列

232. 用栈实现队列

时间:2023-10-09 17:06:44浏览次数:46  
标签:MyQueue 队列 outStack pop int 用栈 232 push empty

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

说明:

  • 你 只能 使用标准的栈操作 —— 也就是只有 push to toppeek/pop from topsize, 和 is empty 操作是合法的。
  • 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。

示例 1:

输入:
["MyQueue", "push", "push", "peek", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 1, 1, false]

解释:
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false

 

class MyQueue {
private:
    stack<int> inStack, outStack;

    void intoout(){
        while(!inStack.empty()){
            outStack.push(inStack.top());
            inStack.pop();
        }
    }

public:
    MyQueue() {

    }
    
    void push(int x) {
        inStack.push(x);
    }
    
    int pop() {
        if(outStack.empty()){
            intoout();
        }
        int x = outStack.top();
        outStack.pop();
        return x;
    }
    
    int peek() {
        if (outStack.empty()) {
            intoout();
        }
        return outStack.top();
    }
    
    bool empty() {
        return inStack.empty() && outStack.empty();
    }
};

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue* obj = new MyQueue();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->peek();
 * bool param_4 = obj->empty();
 */

大概懂一点,但是还是有点懵。

标签:MyQueue,队列,outStack,pop,int,用栈,232,push,empty
From: https://blog.51cto.com/u_16123878/7779575

相关文章

  • 头歌-03 - 队列
    第一关#include<stdio.h>#include<stdlib.h>#include"SeqQueue.h"SeqQueue*SQ_Create(intmaxlen)//创建顺序队列,队列最多存储maxlen个队列元素。{SeqQueue*sq=(SeqQueue*)malloc(sizeof(SeqQueue));sq->data=(T*)malloc(sizeof(T)*(maxlen+1)......
  • springAMQP--DirectExchange(在监听方法上用注解声明交换机队列和key,发送消息时会带一
         ......
  • 【多线程笔记】多线程处理队列数据
    usingSystem.Collections.Concurrent;usingSystem.Diagnostics;{intthreadCount=20;List<Task>tasks=newList<Task>();ConcurrentQueue<int>queues=newConcurrentQueue<int>();for(inti=0;i<1000;i++)......
  • Java 队列Queue的一些基本操作与概念!!!!!!!!
    首先Java中的队列(Queue)是一种先进先出的数据结构。其中常见的一些基本操作与方法,包括:1、创建队列对象。例如:ArrayDeque、LinkedList等。2、入队操作。将元素添加到队列的末尾处,使用offer()方法。3、出队操作。从队列的头部移除并返回元素,使用poll()方法。......
  • FreeRTOS入门教程(队列详细使用示例)
    (文章目录)前言上篇文章我们已经讲解了队列的概念和队列相关的API函数,那么本篇文章的话就开始带大家来学习使用队列。一、队列基本使用这个例子将会创建三个任务,其中两个任务用来发送数据到队列中,另一个任务用来从队列中读取数据。voidTask1Function(void*param){ intv......
  • springAMQP-Work Queue 工作队列(一个队列绑定多个消费者)
         ......
  • SpringAMQP—入门案例消息发送(rabbitmq是一个存放消息队列的中转站,发布者将消息队列发
        ......
  • MQTT(消息队列遥测传输)
    MessageQueuingTelemetryTransport--消息队列遥测传输协议MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代......
  • 队列的API
    2023.10.61.poll,peek,element相同点:都是返回队列首个元素不同点:poll:将首个元素从队列中弹出,如果队列是空的,就返回nullpeek:查看首个元素,不会移除首个元素,如果队列是空的就返回nullelement:查看首个元素,不会移除首个元素,如果队列是空的就抛出异常NoSuchElementException ......
  • 【UVA 514】Rails 题解(栈+队列)
    PopPush市有一个著名的火车站。那个里的乡村是令人难以置信的丘陵。车站建于上世纪。不幸的是,当时资金极其有限。有可能仅建立表面轨迹。此外,事实证明,该站可能只是一个死胡同(见图片),由于缺乏可用空间,它只能有一个轨道。当地的传统是,每一列从A方向到达的火车都会继续朝A方向行驶......