首页 > 其他分享 >力扣225 用队列实现栈

力扣225 用队列实现栈

时间:2022-12-27 20:22:42浏览次数:38  
标签:queue 队列 pop 力扣 int push MyStack 225

题目:

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
    void push(int x) 将元素 x 压入栈顶。
    int pop() 移除并返回栈顶元素。
    int top() 返回栈顶元素。
    boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
注意:
    只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
    所使用的语言也许不支持队列。可以使用 list(列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

示例:

输入:
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 2, 2, false]

解释:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False

思路:

  可以用两个队列模拟栈,也可以只用一个。如果只用一个队列,则出栈操作,在队列上,需要先把前n-1个元素重新入队,那么最后一个元素此时就变成了队头元素,弹出即可。

class MyStack {
    Queue<Integer> queue;
    
    public MyStack() {
        queue = new LinkedList<>();
    }
    
    public void push(int x) {
        queue.offer(x);//每 offer 一个数(A)进来,都重新排列,把这个数(A)放到队列的队首
        int size=queue.size();
        size--;
        while(size>0){
            queue.offer(queue.poll());// 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部
            size--;
        }
    }
    
    public int pop() {
        return queue.poll();//此时再弹出就是最后一个元素
    }
    
    public int top() {
       return queue.peek();//查看队头元素
    }
    
    public boolean empty() {
        return queue.isEmpty();
    }
}

 

标签:queue,队列,pop,力扣,int,push,MyStack,225
From: https://www.cnblogs.com/cjhtxdy/p/17008909.html

相关文章

  • 力扣232 用栈实现队列
    题目:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推到队列的末尾......
  • 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue使用场景总结
    适用阻塞队列的好处:多线程操作共同的队列时不需要额外的同步,另外就是队列会自动平衡负载,即那边(生产与消费两边)处理快了就会被阻塞掉,从而减少两边的处理速度差距。当许......
  • 3 栈和队列
    栈:只允许在一端进行插入或删除操作的线性表操作特性:后进先出(LIFO)顺序栈共享栈链栈基本运算:初始化、判栈空、进栈、出栈、读栈顶元素 队列:只允许在表的一端进行......
  • AQS抽象队列同步器
    AbstractQueuedSynchronizer抽象的队列同步器AQS是volatile+CAS机制实现的锁模板,保证了代码的同步性和可见性。AQS定义了一套多线程访问共享资源的同步器框架,封装了线程......
  • 力扣每日一题2022.12.26---1759. 统计同构子字符串的数目
    给你一个字符串s,返回s中同构子字符串的数目。由于答案可能很大,只需返回对109+7取余后的结果。同构字符串的定义为:如果一个字符串中的所有字符都相同,那么该字符......
  • 力扣459 重复的字符串
    题目:给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。示例:输入:s="abab"输出:true解释:可由子串"ab"重复两次构成。输入:s="a......
  • 力扣---217. 存在重复元素
    给你一个整数数组nums。如果任一值在数组中出现至少两次,返回true;如果数组中每个元素互不相同,返回false。示例1:输入:nums=[1,2,3,1]输出:true示例2:输入:nums=[1......
  • 力扣---1991. 找到数组的中间位置
    给你一个下标从0 开始的整数数组 nums ,请你找到最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。中间位置 middleIndex 是满足 nums[0]......
  • 根据身高重建队列
    假设有打乱顺序的一群人站成一个队列,数组people表示队列中一些人的属性(不一定按顺序)。每个people[i]=[hi,ki]表示第i个人的身高为hi,前面正好有ki个身高大于......
  • 消息队列
    消息队列就是一些消息的列表。用户可以在消息队列中添加消息和读取消息等。从这点上看,消息队列具有一定的FIFO特性,但是它可以实现消息的随机查询,比FIFO具有更大的优势。同......