代码随想录 第十天 | ● 理论基础 ● 232.用栈实现队列 ● 225. 用队列实现栈

队列的方法:

  1. 添加元素:
    • add(E e): 将指定的元素添加到队列的尾部,如果队列已满则抛出异常。
    • offer(E e): 将指定的元素添加到队列的尾部,如果队列已满则返回false。
  2. 移除元素:
    • remove(): 移除并返回队列的头部元素,如果队列为空则抛出异常。
    • poll(): 移除并返回队列的头部元素,如果队列为空则返回null。
  3. 获取头部元素:
    • element(): 返回队列的头部元素但不移除,如果队列为空则抛出异常。
    • peek(): 返回队列的头部元素但不移除,如果队列为空则返回null。

在Java中,队列的常见实现类包括LinkedList和ArrayDeque,它们都实现了Queue接口。

栈的方法:

  1. 添加元素:
    • push(E e): 将指定的元素压入栈顶。
  2. 移除元素:
    • pop(): 移除并返回栈顶元素。
  3. 获取栈顶元素:
    • peek(): 返回栈顶元素但不移除。
  4. 判断栈是否为空:
    • empty(): 如果栈为空则返回true,否则返回false。

在Java中,栈的常见实现类是Stack类,它继承自Vector类。

leetcode:232. 用栈实现队列 - 力扣(LeetCode)

思路:用两个栈代替队列,一个输入一个输出。这样反一下正好是队列的先入先出的顺序

 

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() {//
        dumpstackIn();
        return StackOut.pop();
    }

    public void dumpstackIn() {
    //只要输入栈还有就继续将元素移到输出栈中
if(!StackOut.isEmpty()) return; while(!StackIn.isEmpty()){ StackOut.push(StackIn.pop()); } } public int peek() { dumpstackIn(); return StackOut.peek(); } public boolean empty() { if(StackIn.isEmpty() && StackOut.isEmpty()){ return true; } return false; } }

leetcode:225. 用队列实现栈 - 力扣(LeetCode)

思路:其实也很多种,可以用两个队列,也可以用一个队列,主要目的就是将队列里的输入的1234变成4321的顺序输出,达到实现栈目的。我的想法是一输入push就循将加进队列里的数循环一遍再加入到队列里,这样就达成目的了。

 

class MyStack {
     Queue<Integer> Que1;

    public MyStack() {
        Que1 = new LinkedList<>();
    }
    
    public void push(int x) {
         Que1.offer(x);
//循环length-1次
int Quelenth = Que1.size(); for(int i = 0; i < Quelenth -1; i++){ Que1.offer(Que1.poll()); } } public int pop() { return Que1.poll(); } public int top() { return Que1.peek(); } public boolean empty() { return Que1.peek() == null; } }

总结:栈和队列还是比较简单的,能够看懂动画模拟过程就会了,要记住对应的方法!

posted @ 2024-03-02 14:31  22软工冷薄  阅读(6)  评论(0编辑  收藏  举报