队列:
队列是遵循先进先出(FIFO,first in first out)原则的有序集合,队列在尾部添加元素,在顶部移除元素,最新添加的元素必须排在队列的尾部。
比如:排队,打印机的打印队列
队列的实现:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>队列</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<script>
//声明类
function Queue(){
let items = [];
this.enqueue = function(ele){
items.push(ele);
}
this.dequeue = function(ele){
items.shift(ele);
}
this.front = function(){
return items[0];
}
this.isEmpty = function(){
return items.length == 0;
}
this.size = function(){
return items.length;
}
this.print = function(){
return console.log(items.toString())
}
}
let queue = new Queue();
console.log(queue.isEmpty())
queue.enqueue("hello")
queue.print()
console.log(queue.size())
console.log(queue.isEmpty())
queue.dequeue()
queue.print()
//ES6实现Queue类
//用WeakMap来保存私有属性items
// let Queue = (function () {
// const items = new WeakMap();
// class Queue {
// constructor() {
// items.set(this, [])
// }
// enqueue(ele) {
// let s = items.get(this);
// s.push(ele);
// }
// dequeue() {
// let s = items.get(this);
// let r = s.shift();
// return s;
// }
// front() {
// let s = items.get(this);
// return s[0];
// }
// isEmpty() {
// let s = items.get(this);
// return s.length == 0;
// }
// size() {
// let s = items.get(this);
// return s.length;
// }
// print() {
// let s = items.get(this);
// console.log(s.toString())
// }
// }
// return Queue;
// })()
// let queue = new Queue();
// console.log(queue)
// 最小优先队列
// 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);
// 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 = function () {
// let s = items.shift();
// return s;
// }
// this.isEmpty = function () {
// return items.length == 0;
// }
// this.size = function () {
// return items.length;
// }
// this.front = function () {
// return items[0];
// }
// this.print = function () {
// for (let i = 0; i < items.length; i++) {
// console.log(`${items[i].element}-${items[i].priority}`)
// }
// }
// }
// let priorityQueue = new PriorityQueue();
// priorityQueue.enqueue("John", 2);
// priorityQueue.print()
// priorityQueue.enqueue("Willian", 1);
// priorityQueue.print()
// priorityQueue.enqueue("C", 2);
// priorityQueue.print()
// console.log(priorityQueue.size())
// console.log(priorityQueue.isEmpty())
// console.log(priorityQueue.front())
// console.log(priorityQueue.dequeue())
</script>
</body>
</html>