隊列是一種很常用的數據結構,它是一組遵循先進先出(FIFO)規則的項。在現實生活中,最常見的隊列的例子就是排隊。隊列有一些方法,入隊、出隊、隊列的長度,清空隊列等。用js實現一個普通的隊列代碼如下:
function Queue() { var queue = []; // 隊列元素個數 this.size = function () { return queue.length; }; // 入隊 this.enqueue = function (item) { queue.push(item); }; // 出隊 this.dequeue = function () { return queue.shift(); }; // 隊列是否為空 this.isEmpty = function () { return !queue.length; }; // 隊列第一個元素 this.front = function () { return queue[0]; }; // 清空隊列 this.clear = function () { queue = []; } }
如果是優先隊列,其實就是 給每個需要排隊的元素加個優先級,優先級高的在前面,優先級低的就只好在后面了。隊列的其他方法不變,只是入隊的方法變了,需要根據元素的優先級排隊,實現代碼如下:
1 function PriorityQueue() { 2 var queue = []; 3 // 隊列是否為空 4 this.isEmpty = function () { 5 return !queue.length; 6 }; 7 this.value = function (){ 8 return queue; 9 }; 10 this.enqueue = function (item) { 11 if (this.isEmpty()) { 12 queue.push(item); 13 } else { 14 var flag = false; //判斷是否排隊 15 for (let i = 0; i < queue.length; i++) { 16 if (queue[i].priority <= item.priority) { 17 queue.splice(i, 0, item); 18 flag = true; 19 break; 20 } 21 } 22 // 循環后未入隊,優先級最大,插入到第一位 23 if (!flag) { 24 queue.push(item); 25 } 26 } 27 }; 28 }