数据结构-javascript实现【队列】
队列是遵循先进先出(FIFO) 原则的一组有序的项,队列在尾部添加新元素,并从首部移除元素。
1.队列可用的的方法
enqueque(elements) : 向队列尾部添加一个或多个新的元素
dequeque(): 移除队列的第一个元素,并返回被移除的元素
front(): 返回队列中第一个元素,最先被添加,也是最先被移除的元素
isEmpty(): 检测队列是否为空
size(): 返回队列中包含的元素个数
2. 队列的实现
class Queue { constructor(){ this.items = []; } enqueue(element) { this.items.push(element); } dequeue(){ return this.items.shift(); } front() { return this.items[0]; } isEmpty() { return this.items.length === 0; } clear() { this.items = []; } size() { return this.items.length; }; print() { console.log(this.items.toString()); } } const queue = new Queue(); console.log(queue.isEmpty()); // true queue.enqueue('John'); queue.enqueue('Jack'); console.log(queue.size()); // 2 queue.dequeue(); queue.print(); // 'Jack'
3. 优先队列,基于优先级进行队列的添加和移除。
实现方案有两种:
第一种:设置优先级,然后在正确的位置添加元素。下面的实现为最小优先队列,优先值越小,优先级别越高。
function priorityQueue() { let items = []; const enqueue = (element, priority) =>{ const queueElement = {element, priority}; if(isEmpty()) { items.push(queueElement); } else { let added = false; for (let i = 0; i < items.length; i++){ if(queueElement.priority < items[i].priority){ items.splice(i, 0, queueElement); added = true; break; } } if(!added){ items.push(queueElement); } } } const dequeue = () => { return items.shift(); }; const front = () => { return items[0]; }; const isEmpty = () => { return items.length === 0; }; const clear = () =>{ items = []; }; const size = () => { return items.length; }; const print = () => { console.log(items.map((item)=> item.element).toString()); }; return { enqueue, dequeue, front, isEmpty, clear, size, print }; } const priorityQueueObj = priorityQueue(); priorityQueueObj.enqueue('John',2); priorityQueueObj.enqueue('Jack',1); priorityQueueObj.enqueue('Camila',1); priorityQueueObj.print();
第二种: 入列添加元素,然后按照优先级移除

浙公网安备 33010602011771号