代码随想录算法训练营第十天 _ 栈与队列_232.用栈实现队列、225. 用队列实现栈。

文章讲述了如何用Java中的栈和队列数据结构实现对方的功能,包括MyQueue类的入队、出队、查看等操作以及MyStack类的压栈、出栈和查看。同时提到了学习进度,如KMP算法的学习和对栈队列API的复习。
摘要由CSDN通过智能技术生成

学习目标:

60天训练营打卡计划!

学习内容:

232.用栈实现队列

  • java中新建栈的方法 : Stack stackIn = new Stack<>();
  • java中体现栈结构的操作方法:
    • peek() - 查看栈顶元素,不弹出。
    • pop() - 弹出栈
    • push(E e) - 压入栈
    • clear() - 清栈
    • size() - 大小
    • empty() - 是否为空?
    • search(Object obj) - 查找元素出现位置
  • 总结规律:有3个p和一个e
  • 使用栈实现队列时,需要一个入栈和一个出栈。经过两个栈后,出栈的顺序就变为先进先出
class MyQueue {
    Stack<Integer> stackIn;
    Stack<Integer> stackOut;

    public MyQueue() {
        this.stackIn = new Stack<>();
        this.stackOut = new Stack<>();
    }
    
    public void push(int x) {
        stackIn.push(x);
    }
    
    public int pop() {
        if(stackOut.isEmpty()){
            while(!stackIn.isEmpty()){
                stackOut.push(stackIn.pop());
            }
        }
        return stackOut.pop();
    }
    
    public int peek() {
        int result = this.pop();
        stackOut.push(result);
        return result;
    }
    
    public boolean empty() {
        return stackIn.isEmpty() && stackOut.isEmpty();
    }
}

3225. 用队列实现栈

  • java中新建队列的方法 : Queue que = new LinkedList<>();
  • java中体现队列结构的操作方法:
    • 加入元素到队列尾部: add(Object obj)/offer(Object obj)
    • 获取队列头部元素,不删除该元素:element()/peek()
    • 获取队列头部元素,并删除该元素: remove()/poll()
    • 清理队列: clear()
    • 得到队列的大小: size()
    • 判断队列是否是空的:isEmpty()
  • 使用队列实现栈时,仅需要一个队列。前n - 1个出队列的元素加入队列尾部,出队列的顺序就变为先进后出
class MyStack {
    Queue<Integer> que;

    public MyStack() {
        que = new LinkedList<>();
    }
    
    public void push(int x) {
        que.add(x);
    }
    
    public int pop() {
        int size = que.size();
        while(size-- > 1){
            this.push(que.poll());
        }
        return que.poll();

    }
    
    public int top() {
        int result = this.pop();
        this.push(result);
        return result;
    }
    
    public boolean empty() {
        return que.isEmpty();
    }
}

学习时间:

  • 上午一小时,下午一个半小时(学习KMP算法),整理文档半小时。
  • 12月14日复习,单队列实现栈的思路有所遗忘。
  • 2024.2.21 复习栈和队列的常用api
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值