1. 程式人生 > >兩個棧實現一個佇列以及兩個佇列實現一個棧(Java)

兩個棧實現一個佇列以及兩個佇列實現一個棧(Java)

兩個棧實現一個佇列

import java.util.Stack;

public class Demo07 {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();

    public void push(int node) {
        stack1.push(node);
    }

    public int pop() {
        if(stack2.size()<=0
){ while(stack1.size()>0){ /*int data = stack1.peek();//檢視棧頂元素,但不移除它 stack1.pop();//彈出棧頂元素 stack2.push(data);//壓入 */ stack2.push(stack1.pop()); } } if(stack2.isEmpty()){ try
{ throw new Exception("queue is empty."); } catch (Exception e) { } } /** * int head = stack2.peek(); * stack2.pop(); */ int head = stack2.pop(); return head; } }

兩個佇列實現一個棧

import java.util.ArrayDeque;
import java.util.Queue;

public
class Demo08 { Queue<Integer> queue1 = new ArrayDeque<>(); Queue<Integer> queue2 = new ArrayDeque<>(); public void push(int node) { //兩個棧都為空時,優先考慮queue1 if (queue1.isEmpty()&&queue2.isEmpty()) { queue1.add(node); return; } //如果queue1為空,queue2有元素,直接放入queue2 if (queue1.isEmpty()) { queue2.add(node); return; } if (queue2.isEmpty()) { queue1.add(node); return; } } public int pop() { //兩個棧都為空時,沒有元素可以彈出 if (queue1.isEmpty()&&queue2.isEmpty()) { try { throw new Exception("stack is empty"); } catch (Exception e) { } } //如果queue1為空,queue2有元素, 將queue2的元素依次放入queue1中,直到最後一個元素,我們彈出。 if (queue1.isEmpty()) { while (queue2.size()>1) { queue1.add(queue2.poll()); } return queue2.poll(); } if (queue2.isEmpty()) { while (queue1.size()>1) { queue2.add(queue1.poll()); } return queue1.poll(); } return (Integer) null; } public static void main(String[] args) { Demo08 demo08 = new Demo08(); demo08.push(1); demo08.push(2); demo08.push(3); demo08.push(4); System.out.println(demo08.pop()); System.out.println(demo08.pop()); demo08.push(5); System.out.println(demo08.pop()); System.out.println(demo08.pop()); System.out.println(demo08.pop()); } }