iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 13
0
Software Development

One Punch 一拳搞定前後端面試系列 第 13

[One Punch 一拳搞定前後端面試] DAY-13 - Queue

佇列(Queue)

此文同時發佈於好讀版

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

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

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

圖示

queue

我們就來看看 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]

此文同時發佈於好讀版


上一篇
[One Punch 一拳搞定前後端面試] DAY-12 - 記憶化
下一篇
[One Punch 一拳搞定前後端面試] DAY-14 - Stack
系列文
One Punch 一拳搞定前後端面試30

尚未有邦友留言

立即登入留言