队列(Queue),它是一种受限的线性表,先进先出(FIFO First In First Out)
- 受限之处在于它只允许在表的前端(front)进行删除操作
- 而在表的后端(rear)进行插入操作
生活中类似的队列结构场景有很多 比如 电影院 商场 甚至是厕所排队 优先排队的人优先处理(买票 结账 WC)
队列的应用:
- 有五份文档需要打印,这些文档会按照次序放入到打印队列中.
- 打印机会依次从队列中取出文档,优先放入的文档,优先被取出,并且对该文档进行打印
- 依次类推,直到队列中不在有新的文档
线程队列
- 在开发中,为了让任务可以进行处理,通常会开启多个线程.
- 但是,我们不能让大量的线程同时进行处理任务 (占用过多的资源)
- 这个时候,如果有需要开启线程处理任务的情况,我们就会使用线程队列
- 线程队列会依照次序来开启线程,并且v护理对应的任务
队列封装 代码如下
function Queue() {
//属性
this.items = []
//方法
// 1.将元素加入到队列中
Queue.prototype.enqueue = function (ele) {
this.items.push(ele)
}
// 2.从队列中删除前端元素
Queue.prototype.delqueue = function () {
return this.items.shift()
}
// 3.查看前端的元素
Queue.prototype.front = function () {
return this.items[0]
}
// 4.查看队列是否为空
Queue.prototype.isEmpty = function () {
return this.items.length == 0
}
// 5.查看队列中元素的个数
Queue.prototype.size = function () {
return this.items.length
}
// 6.toString方法
Queue.prototype.toString = function () {
let resultString = ''
for (let i = 0; i < this.items.length; i++) {
resultString += this.items[i] + ' '
}
return resultString
}
}
//使用队列
let queue = new Queue()
//将元素加入到队列中
queue.enqueue('A')
queue.enqueue('B')
queue.enqueue('C')
// alert(queue)
//将元素移出出队列
queue.delqueue()
// alert(queue)
//查看队列中前端元素
alert(queue.front())
//查看队列是否为空
alert(queue.isEmpty())
//查看队列中元素个数
alert(queue.size())
//toString方法
alert(queue.toString())