双端队列
作者:互联网
双端队列
/**
* 双端队列
*/
class Deque {
constructor() {
// 队列当前索引
this.count = 0
// 队头索引
this.lowestCount = 0
// 存储队列
this.items = {}
}
/**
* 添加到队头
*/
addFront(element) {
if (this.isEmpty()) {
this.addBack(element)
} else if (this.lowestCount > 0) {
this.lowestCount--
this.items[this.lowestCount] = element
} else {
// 将所有元素向后移动一位
for (let i = this.count; i > 0; i--) {
this.items[i] = this.items[i - 1]
}
this.count++
this.lowestCount = 0
this.items[0] = element
}
}
/**
* 添加到队尾
*/
addBack(element) {
this.items[this.count] = element
this.count++
}
/**
* 移除队头
*/
removeFront() {
if (this.isEmpty()) {
return undefined
} else {
const res = this.items[this.lowestCount]
delete this.items[this.lowestCount]
this.lowestCount++
return res
}
}
/**
* 移除队尾
*/
removeBack() {
if (this.isEmpty()) {
return undefined
} else {
this.count--
const res = this.items[this.count]
delete this.items[this.count]
return res
}
}
/**
* 返回队头
*/
peekFront() {
if (this.isEmpty()) {
return undefined
} else {
return this.items[this.lowestCount]
}
}
/**
* 添加到队尾
*/
peekBack() {
if (this.isEmpty()) {
return undefined
} else {
return this.items[this.count - 1]
}
}
/**
* 查看队列是否为空
*/
isEmpty() {
return this.count - this.lowestCount === 0
}
/**
* 查看队列长度
*/
size() {
return this.count - this.lowestCount
}
/**
* 清空队列
*/
clear() {
this.count = 0
this.lowestCount = 0
this.items = {}
}
}
标签:count,return,队列,双端,isEmpty,items,lowestCount 来源: https://www.cnblogs.com/JianXin1994/p/16273510.html