一、简单队列
function Queue() {
let items = [];
this.enqueue = element => {
items.push(element);
}
this.dequeue = () => {
return items.shift();
}
this.front = () => {
return items[0];
}
this.isEmpty = () => {
return items.length == 0;
}
this.clear = () => {
items = [];
}
this.size = () => {
return items.length;
}
this.print = () => {
console.log(items.toString());
}
}
let queue = new Queue();
console.log(queue.isEmpty());
queue.enqueue("John");
queue.enqueue("Jack");
queue.enqueue("Camila");
queue.print();
queue.dequeue()
queue.print();
二、优先队列(priority 值越小,优先级越大,越靠前)
function PriorityQueue() {
let items = [];
function QueueElement(element, priority) {
this.element = element;
this.priority = priority;
}
this.enqueue = function(element, priority) {
let queueElement = new QueueElement(element, priority);
if (this.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);
}
}
};
this.dequeue = () => {
return items.shift();
}
this.front = () => {
return items[0];
}
this.isEmpty = () => {
return items.length == 0;
}
this.clear = () => {
items = [];
}
this.size = () => {
return items.length;
}
this.print = () => {
let itemsStr = "";
for(let i=0; i<items.length; ++i) {
let pot = ",";
if (i == 0) {
pot = "";
}
itemsStr += pot + items[i].element;
}
console.log(itemsStr);
}
}
let priorityQueue = new PriorityQueue();
priorityQueue.enqueue("John", 2);
priorityQueue.enqueue("Jack", 1);
priorityQueue.enqueue("Camila", 1);
priorityQueue.print();
console.log(priorityQueue.size())