用js实现个优先队列吧
队列是一种很常用的数据结构,它是一组遵循先进先出(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 }
人生如逆旅,我亦是行人