代码随想录算法训练营第十天|理论基础 232.用栈实现队列 225. 用队列实现栈

理论基础 

自己看java八股

 232.用栈实现队列 

大家可以先看视频,了解一下模拟的过程,然后写代码会轻松很多。

文章讲解/视频讲解:代码随想录

题目链接:232. 用栈实现队列

    Stack<Integer> stackIn;
    Stack<Integer> stackOut;

    public MyQueue() {
        stackIn = new Stack<>();
        stackOut = new Stack<>();
    }
    
    public void push(int x) {
        stackIn.push(x);

    }
    
    public int pop() {
        isUpdata();
        return stackOut.pop();
    }
    
    public int peek() {
        isUpdata();
        return stackOut.peek();
    }
    
    public boolean empty() {
        return (stackIn.empty() && stackOut.empty());
    }

    private void isUpdata(){
        if(!stackOut.isEmpty()){
            return;
        }else{
            while (!stackIn.isEmpty()){
                stackOut.push(stackIn.pop());
        }
        }
    }

栈(Stack)的常用方法:

  • push(element):将元素压入栈顶。
  • pop():弹出并返回栈顶的元素。
  • peek():返回栈顶的元素,但不进行弹出操作。
  • isEmpty():判断栈是否为空,如果栈为空则返回true,否则返回false
  • size():返回栈中元素的个数。

队列(Queue)的常用方法:

  • offer(element):将元素插入队尾。
  • poll():移除并返回队头的元素。
  • peek():返回队头的元素,但不进行移除操作。
  • isEmpty():判断队列是否为空,如果队列为空则返回true,否则返回false
  • size():返回队列中元素的个数。

Deque(双端队列)的常用方法:

  • offerFirst(element):将元素插入双端队列的头部。
  • offerLast(element):将元素插入双端队列的尾部。
  • pollFirst():移除并返回双端队列的头部元素。
  • pollLast():移除并返回双端队列的尾部元素。
  • peekFirst():返回双端队列的头部元素,但不进行移除操作。
  • peekLast():返回双端队列的尾部元素,但不进行移除操作。
  • isEmpty():判断双端队列是否为空,如果双端队列为空则返回true,否则返回false
  • size():返回双端队列中元素的个数。

  225. 用队列实现栈 

可以大家惯性思维,以为还要两个队列来模拟栈,其实只用一个队列就可以模拟栈了。 

文章讲解/视频讲解:代码随想录

题目链接: 225. 用队列实现栈 

class MyStack {

    Queue<Integer> queue1; // 和栈中保持一样元素的队列
    Queue<Integer> queue2; // 辅助队列

    public MyStack() {
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();
    }
    
    public void push(int x) {
        queue1.add(x);
    }
    
    public int pop(){
        while(queue1.size()>1){
            queue2.add(queue1.poll());
            
        }
        int temp = queue1.poll();
        while(queue2.size() !=0){
            queue1.add(queue2.poll());
        }
        return temp;
    }
    
    public int top() {
        while(queue1.size()>1){
            queue2.add(queue1.poll());
            
        }
        int temp = queue1.peek();
        queue2.add(queue1.poll());
        while(queue2.size() !=0){
            queue1.add(queue2.poll());
        }
        return temp;
    }
    
    public boolean empty() {
        return queue1.isEmpty() && queue2.isEmpty();
    }
}

在Java中,Queue和Deque可以使用以下类进行创建:

创建 Queue(队列):

  • LinkedList
  • PriorityQueue
  • ArrayDeque

创建 Deque(双端队列):

  • LinkedList
  • ArrayDeque

具体选择使用哪个类来创建Queue或Deque取决于你的需求和场景:

  • 如果需要使用优先级队列(Priority Queue)实现Queue,可以选择使用PriorityQueue类。
  • 如果需要在队列的两端进行插入和删除操作,以及支持栈的特性,可以选择使用ArrayDeque类或LinkedList类。
  • LinkedList类实现了Queue和Deque接口,因此可以用来创建Queue和Deque对象。
  • ArrayDeque类同样也实现了Queue和Deque接口,并且具有更高的性能,适用于大部分的Queue和Deque场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值