# JS数据结构学习：队列

## 队列的创建

``````function Queue() {
let items = []
}
``````

• enqueue(element)：向队的尾部添加一个新的项
• dequeue()：移除队列第一项，并返回被移除的元素
• front()：返回队列第一项，队列不做任何变动
• isEmpty()：如果队列中没有任何元素返回true，否则返回false
• size()：返回队列包含的元素个数

``````function Queue() {
let items = []
// 向队列的尾部添加新元素
this.enqueue = function (element) {
items.push(element)
}
// 遵循先进先出原则，从队列的头部移除元素
this.dequeue = function () {
return items.shift()
}
// 返回队列最前面的项
this.front = function () {
return items[0]
}
// 返回队列是否为空
this.isEmpty = function () {
return items.length === 0
}
// 返回队列的长度
this.size = function () {
return items.length
}
// 打印队列，方便观察
this.print = function () {
console.log(items.toString())
}
}
``````

## 队列的使用

``````let queue = new Queue()
queue.enqueue('a')
queue.enqueue('b')
queue.enqueue('c')
queue.dequeue()
queue.print()
``````

## es6实现Queue

``````let Queue = (function () {
let items = new WeakMap
class Queue {
constructor () {
items.set(this, [])
}
enqueue (element) {
let q = items.get(this)
q.push(element)
}
dequeue () {
let q = items.get(this)
return q.shift()
}
front () {
let q = items.get(this)
return q[0]
}
isEmpty () {
let q = items.get(this)
return q.length === 0
}
size () {
let q = items.get(this)
return q.length
}
print () {
let q = items.get(this)
console.log(q.toString())
}
}
return Queue
})()
let queue = new Queue()
queue.enqueue('a')
queue.enqueue('b')
queue.enqueue('c')
queue.dequeue()
queue.print()
``````

## 优先队列

``````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)
for (let i = 0; i < items.length; i++) {
//数字越小优先级越高
if (queueElement.priority < items[i].priority) {
items.splice(i, 0, queueElement)
break
}
}
items.push(queueElement)
}
}
this.dequeue = function () {
return items.shift()
}
this.front = function () {
return items[0]
}
this.isEmpty = function () {
return items.length === 0
}
this.size = function () {
return items.length
}
this.print = function () {
for (let i = 0; i < items.length; i++) {
console.log(`\${items[i].priority}-\${items[i].element}`)
}
}
}
let priorityQueue = new PriorityQueue()
priorityQueue.enqueue('a', 3)
priorityQueue.enqueue('b', 2)
priorityQueue.enqueue('c', 1)
priorityQueue.dequeue()
priorityQueue.print()
``````

## 循环队列

``````unction Queue() {
let items = []
this.enqueue = function (element) {
items.push(element)
}
this.dequeue = function () {
return items.shift()
}
this.front = function () {
return items[0]
}
this.isEmpty = function () {
return items.length === 0
}
this.size = function () {
return items.length
}
this.print = function () {
console.log(items.toString())
}
}
function loopQueue(list, num) {
let queue = new Queue()
for (let i = 0; i<list.length; i++) {
queue.enqueue(list[i])
}
while (queue.size() > 1) {
for (let j = 0; j<num; j++) {
queue.enqueue(queue.dequeue())
}
let out = queue.dequeue()
console.log('出队列：' + out)
}
return queue.dequeue()
}
console.log('last：' + loopQueue(['a', 'b', 'c', 'd', 'e'], 3))
``````

## 总结

React.js编程思想
2015-11-12

&lt;font face=&quot;寰�杞�闆呴粦, Arial, sans-serif &quot;&gt;2014骞达紝杞�浠惰�屼笟鍙戝睍杩呴€燂紝鍚勭�嶈��瑷€灞傚嚭涓嶇┓锛屼互婊¤冻鐢ㄦ埛涓嶆柇鍙樺寲鐨勯渶姹傘€傝繖浜涜��...
2015-11-12
jsdom 中文文档（纯翻译）
jsdom是一个纯粹由 javascript 实现的一系列 web标准，特别是 WHATWG 组织制定的DOM和 HTML 标准，用于在 nodejs 中使用。大体上来说，该项目的目标是模拟足够的Web浏览器子集，以便用于测试和挖掘真实世界...
2018-05-14
three.js实现围绕某物体旋转

2017-02-17
JavaScript教程：JS中的原型
Keith Peters 几年前发表的一篇博文，关于学习没有“new”的世界，其中解释了使用原型继承代替构造函数。两者都是纯粹的原型编码。 标准方法（The Standard Way） 一直以来，我们学习的在 JavaScript 里创建对...
2015-11-12
NodeJS参考手册pdf版

2015-11-12
JS中的语音合成——Speech Synthesis API
JS中的语音合成——Speech Synthesis API 简介 HTML5中和Web Speech相关的API实际上有两类，一类是“语音识别(Speech Recognition)”，另外一个就是“语音合成(Speech Synthes...
2018-05-17
Node.js学习(1)----HTTP服务器与客户端
Node.js 标准库提供了 http 模块，其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端。http.Server 是一个基于事件的 HTTP 服务器，它的核心由 Node.js 下层 C++部分实现，而接口由 Jav...
2015-11-12

2017-03-25
Riot.js：不足1KB的MVP客户端框架
Riot.js是一款MVP（模型-视图-呈现）开源客户端框架，其最大的特点就是体积非常小，不足1KB，虽然体积小，但它可以帮助用户构建大规模的Web应用程序。 Riot.js是由Moot公司开发，目前最新版本为v0.9.2，遵循MIT开源许...
2016-03-11