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

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

232.用栈实现队列

题目链接

问题简述:用栈实现队列的初始化、push、pop、peek、empty。

思考:当时学数据结构时候学过。

算法思路:定义两个栈,分别为入栈和出栈。push时,直接将元素push到进入栈;pop时,如果出栈里面没有元素,则将入栈的所有元素推入出栈,此时栈顶则为最早进入的元素,可以pop元素,如果出栈中有元素,出栈栈顶的元素即为最先入栈的元素,直接pop元素;peek同理;empty即判断两个栈是否都为空。

import java.util.Stack;

class MyQueue {
  //定义两个栈分别为入栈和出栈
    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() {
        if (stackout.empty()){
            while (!stackin.empty()){
                stackout.push(stackin.pop());
            }
        }
      //元素从出栈推出
       return stackout.pop();
    }
  //和pop操作一样,只是没有再进行一次pop
    public int peek() {
        if (stackout.empty()){
            while (!stackin.empty()){
                stackout.push(stackin.pop());
            }
        }
        return stackout.peek();
    }
  //判断是否两个栈都为空
    public boolean empty() {
        if (stackout.empty() && stackin.empty()) return true;
        return false;
    }
}

225.用队列实现栈

题目链接

问题简述:用队列实现栈的初始化、push、pop、peek、empty。

思考:感觉要比用栈实现队列更容易一些。

算法思路:用一个队列模拟栈,每次出栈时,将之前入队的n-1个元素出队并再次入队,这样队头则是最后入队的元素。

import java.util.LinkedList;
import java.util.Queue;

class MyStack {
  //用一个队列
    Queue<Integer> queen;
    public MyStack() {
        queen = new LinkedList<>();
    }
  
    public void push(int x) {
        queen.offer(x);
    }
  
    public int pop() {
      //将之前入队的n-1个元素出队并再次入队
        for (int i = 0; i < queen.size() - 1; i++) {
            queen.offer(queen.poll());
        }
        return queen.poll();
    }

    public int top() {
      //将之前入队的n-1个元素出队并再次入队
        for (int i = 0; i < queen.size() - 1; i++) {
            queen.offer(queen.poll());
        }
        int a = queen.peek();
      //记得将这个元素再次插入队尾
        queen.offer(queen.poll());
        return a;
    }

    public boolean empty() {
        return queen.isEmpty();
    }
}

感想

这两天进度慢了些,要继续坚持啊!

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值