力扣:栈和队列互相实现java

力扣:栈和队列互相实现java

栈实现队列

流程:

  1. 设置俩个栈(Satck stackIn,stackOut)
  2. 设置构造函数,对两个栈赋值(stackIn = new Stack<>()和stackOut = new Stack<>())
  3. 设置Push()。对输入栈push(x)
  4. 设置pop()。如果输出栈为空,则将输入栈全部元素输入到输出栈,然后输出栈pop()
  5. 设置peek()。使用本类的pop()方法,(this.pop())并再将该值输入到输入栈中。
  6. 设置isEmpyt()。判断输入输出栈是否为空。
class MyQueue {
    Stack<Integer> stIN;//设置输入栈和输出栈
    Stack<Integer> stOUT;
    public MyQueue() {//构造函数初始化输入,输出栈
        stIN = new Stack<>();
        stOUT = new Stack<>();
    }
    public void push(int x) {//向队列输入值
        stIN.push(x);//对输入栈输入x
    }
    public int pop() {
        if(stOUT.isEmpty()){//判断输出栈是否为空,为空则不断将输入栈的全部元素输入到输出栈中
            while(!stIN.isEmpty()){
                stOUT.push(stIN.pop());
            }
        }
        return stOUT.pop();//对输出栈输出
    }
    public int peek() {//获取输出,但不输出
        int res = this.pop();//使用本类的输出函数,输出当前值
        stOUT.push(res);//再将输出值存入输出栈
        return res;
    }
    public boolean empty() {
        return stOUT.isEmpty()&&stIN.isEmpty();//判断两个栈是否都为空
    }
}

队列实现栈

流程:

  1. 设置两个队列属性(Queue queue1,queue2)
  2. 构造函数。初始化双队列(queue1 = new LinkedList<>()和queue2 = new LinkedList<>())
  3. 输入函数push()。将输入的x输入queue2,然后对queue1的所有元素输入到queue2中。最后利用temp,将queue1和queue2对调。
  4. 输出函数pop()。因为此时queue1里就是栈的顺序,直接对queue1进行offer()。
  5. 选择函数peek()。对queue1进行peek()。
  6. 判断空isEmpyt()。判断queue1是否为空就可以。
class MyStack {
    Queue<Integer> queue1;//设置队列属性
    Queue<Integer> queue2;
    public MyStack() {//构造函数初始化对列
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();

    }
    
    public void push(int x) {//输入函数
        queue2.offer(x);//将x输入到queue2中,再将queue1的所有元素输入到queue2中
        while(!queue1.isEmpty()){
            queue2.offer(queue1.poll());

        }
        Queue<Integer> temp = queue1;//使用temp对queue1和queue2对调
        queue1 = queue2;
        queue2 = temp;

    }
    
    public int pop() {//输出函数,此时的queue1已经是栈的顺序,直接输出就可以
        return queue1.poll();
    }
    
    public int top() {//直接对queue1获取就可以
        return queue1.peek();
    }
    
    public boolean empty() {//只判断queue1是否为空就可以
        return queue1.isEmpty();
    }
}


你可能感兴趣的:(java,leetcode,开发语言)