棧和隊列互相轉換

棧實現隊列解題思路

  1. 隊列具備的屬性是先進先出,棧具備屬性是先進後出,因此如果要用棧實現隊列,那就需要考慮用兩個棧來實現元素出隊,入隊。

  2. 這兩個棧中的元素和就是推入進來的所有元素。

棧實現隊列解題代碼

import java.util.Stack;

/**
 * @description:
 * @author: lilang
 * @version:
 * @modified By:[email protected]
 */
public class StackToQueue {

    private Stack<Integer> stack;
    private Stack<Integer> stack2;


    public StackToQueue() {
        stack = new Stack();
        stack2 = new Stack<>();
    }

    /**
     * 添加元素到隊尾
     */
    public void push(int x) {
        stack.push(x);
    }

    /**
     * 刪除隊頭的元素並返回
     */
    public int pop() {

        peek();

        if (stack2.isEmpty()) {
            return -1;
        }
        return stack2.pop();
    }

    /**
     * 返回隊頭元素
     */
    public int peek() {
        /**
         * 這步判斷尤其重要,這是決定兩個棧的元素個數之和等於推入的所有元素個數之後
         */
        if (stack2.isEmpty()) {

            while (!stack.isEmpty()) {
                stack2.push(stack.pop());
            }
        }
        if (!stack2.isEmpty()) {
            return stack2.peek();
        }
        return -1;
    }

    /**
     * 判斷隊列是否爲空
     */
    public boolean empty() {
        return stack2.isEmpty() && stack.isEmpty();
    }


}

隊列實現棧

該實現方式很簡單,代碼如下:

/**
 * @description:
 * @author: lilang
 * @version:
 * @modified By:[email protected]
 */
public class QueueToStack {

    private LinkedList<Integer> queue;

    public QueueToStack() {
        queue = new LinkedList<Integer>();
    }

    /**
     * 添加元素到棧頂
     */
    public void push(int x) {
        queue.offerLast(x);
    }

    /**
     * 刪除棧頂的元素並返回
     */
    public int pop() {
        return queue.pollLast();
    }

    /**
     * 返回棧頂元素
     */
    public int top() {
       return queue.peekLast();
    }

    /**
     * 判斷棧是否爲空
     */
    public boolean empty() {
        return queue.isEmpty();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章