java基礎——佇列
阿新 • • 發佈:2018-11-24
目錄
前言
java已經提供了堆和棧的相對應的類,這裡只是模擬一下佇列。
佇列是一種先進先出的線性表。
基礎
java5中新增加了java.util.Queue介面,用以支援佇列的常見操作
LinkedList類實現了Queue介面
使用offer()來加入元素,使用poll()來獲取並移出元素
實現:
public class ceshi { public static void main(String[] args) { //add()和remove()方法在失敗的時候會丟擲異常(不推薦) Queue<String> queue = new LinkedList<String>(); //新增元素 queue.offer("a"); queue.offer("b"); queue.offer("c"); queue.offer("d"); queue.offer("e"); for (String q : queue) { System.out.println(q); } System.out.println("==="); System.out.println("poll=" + queue.poll()); //返回第一個元素,並在佇列中刪除 for (String q : queue) { System.out.println(q); } System.out.println("==="); System.out.println("element=" + queue.element()); //返回第一個元素 for (String q : queue) { System.out.println(q); } System.out.println("==="); System.out.println("peek=" + queue.peek()); //返回第一個元素 for (String q : queue) { System.out.println(q); } } }
兩個佇列模擬一個堆疊
/** * 兩個佇列模擬一個堆疊 * 佇列:先進先出 * 堆疊:先進後出 * 解決方法:兩個佇列始終有一個為空,另一個有全部資料,每次取資料,就取完存入另一個佇列。 */ interface IStack<T> { void push(T newElement); T pop(); T top(); int size(); } class StackImpl<T> implements IStack<T> { private Queue<T> queue1 ; private Queue<T> queue2; private T topRecord; private int size; public StackImpl() { this.queue1 = new LinkedList<>(); this.queue2 = new LinkedList<>(); this.size = 1; } @Override public void push(T newElement) { if (queue2.size() == 0) { queue1.offer(newElement); } else if (queue1.size() == 0) { queue2.offer(newElement); } topRecord = newElement; size++; } @Override public T pop() { T result = null; if (size <= 0) { return null; } if (queue2.size() == 0) { if (queue1.size() == 1) { topRecord = null; result= queue1.poll(); } while (queue1.size() > 1) { result = queue1.poll(); if (queue1.size() == 2) { topRecord = result; } queue2.offer(result); } result = queue1.poll(); } else if (queue1.size() == 0) { if (queue2.size() == 1) { topRecord = null; result= queue2.poll(); } while (queue2.size() > 1) { result = queue2.poll(); if (queue2.size() == 2) { topRecord = result; } queue1.offer(result); } result = queue2.poll(); } size--; return result; } @Override public T top() { return topRecord; } @Override public int size() { return this.size; } }