Skip to main content

佇列(Queue)

佇列(Queue)又稱排隊,是一種資料結構。也就是排隊的特性:先進先出(First-In-First-Out)

通常 Queue 的資料結構至少會實作兩種方法:

  1. 從排隊的隊伍後面加入。(後面來的繼續往後排隊)
  2. 從排隊的隊伍最前面拿出。(最先排隊的最先出去)

圖示

我們就來看看 JavaScript 跟 Java 如何實作 Queue 資料結構吧!

JavaScript 實作

  1. JS 可以用 Array.unshift() 來從隊伍的後方加入新成員(陣列最左)
  2. JS 可以用 Array.pop() 來從隊伍的最前方移出成員(陣列最右)
class Queue {
constructor() {
this.data = [];
}

add(car) {
this.data.unshift(car);
}

remove() {
return this.data.pop();
}
}

Java 實作 Queue

Java 本身就有 LinkedList 物件來實作 Queue 介面

要注意的是 Java 的 LinkedList 的 add 是由左而右的先進先出,所以是往右邊加進去。

Queue<String> carQueue = new LinkedList<String>();
//Add elements to the Queue
carQueue.add("car1");
carQueue.add("car2");
carQueue.add("car3");
carQueue.add("car4");
carQueue.add("car5");
System.out.println("Elements in Queue:"+carQueue);

這時的輸出是

[car1, car2, car3, car4, car5]

這時使用 LinkedList 的 remove() 就會把最先進去的移除了

[car2, car3, car4, car5]

另外,在 Java 中如果一定要從左邊加進去,要用 LinkedList 為主要型態而使用 addFirst() 方法,而不能使用原始的 Queue 來實作了。

LinkedList<String> carQueue2 = new LinkedList<String>();
//Add elements to the Queue
carQueue2.addFirst("car1");
carQueue2.addFirst("car2");
carQueue2.addFirst("car3");
carQueue2.addFirst("car4");
carQueue2.addFirst("car5");
System.out.println("Elements in Queue2:"+carQueue2);

這時就會輸出如最初始的圖那樣增加

Elements in Queue2:[car5, car4, car3, car2, car1]

此文同時發佈於鐵人賽