用栈实现队列

    科技2022-07-13  115

    使用栈实现队列的下列操作:     push(num) -- 将一个元素放入队列的尾部。     pop() -- 从队列首部移除元素。     peek() -- 返回队列首部的元素。     empty() -- 返回队列是否为空。

    示例: StackImplQueue queue = new StackImplQueue(); queue.push(1); queue.push(2);   queue.peek();  // 返回 1 queue.pop();   // 返回 1 queue.empty(); // 返回 false

    说明:     你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。     你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。     假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。

    package com.loo;

    import java.util.Stack;

    public class StackImplQueue {

        private Stack<Integer> s1 = null;     private Stack<Integer> s2 = null;     private int front;     public static void main(String[] srgs) {         StackImplQueue s = new StackImplQueue();         System.out.println("1 isEmpty:" + s.isEmpty());         s.push(9);         System.out.println("2 isEmpty:" + s.isEmpty());         s.push(7);         s.push(23);         s.push(2);         System.out.println("3 isEmpty:" + s.isEmpty() + ",peek:" + s.peek());         System.out.println("4 pop:" + s.pop() + ",peek:" + s.peek());         System.out.println("5 pop:" + s.pop() + ",peek:" + s.peek());     }

        public StackImplQueue() {         s1 = new Stack<Integer>();         s2 = new Stack<Integer>();     }

    /* 首先需要把 s1 中所有的元素移到 s2 中,接着把新元素压入 s2。最后把 s2 中所有的元素弹出,再把弹出的元素压入 s1。 */     public void push(int num) {         if (!s1.isEmpty()) {             while(!s1.isEmpty()) {                 s2.push(s1.pop());             }         } else {             front = num;         }         s2.push(num);         while(!s2.isEmpty()) {             s1.push(s2.pop());         }     }

        public int pop() {         int tmp = s1.pop();         if (!s1.isEmpty()) {             front = s1.peek();         }         return tmp;     }

        public int peek() {         if (!s1.isEmpty()) {             return s1.peek();         }         return front;     }

        public boolean isEmpty() {         return s1.isEmpty();     } }

     

    Processed: 0.009, SQL: 8