队列的特点:
1、队列结构也是一种特殊的受限结构 FIFO (first in first out)
2、受限之处在于它只允许在表的前端(front) 进行删除操作 (对应数组shift)
3、 而在表的后端(rear) 进行插入操作
类似生活中例子:
1、生活中的电影院 商场 甚至是厕所排队
2、优先排队的人优先处理 后排队的后处理
3、打印队列 等等
开发中的场景:
1、为了让任务可以并行处理 通常开启多个线程。
2、但是不可以让大量的线程同事运行处理任务 (内存、cpu会爆的)
3、这个时候 我们就需要线程处理任务情况 这就是线程队列 让这些线程 依次按照顺序来启动 来处理任务
封装一个栈以及栈常见的操作:
1、enqueue()插入操作 向尾部添加一个或者多个新的项目
2、dequeue()删除操作 移除队列的第一个项 并返回被移除元素
3、front()返回队列中的第一个元素————类似于stack 的peek
4、isEmpty()判断是否为空
5、size()返回队列的大小
6、toString()将队列中的内容转换成字符串的形式
代码实现一下下
class Queue {
constructor() {
this.container = []
}
// 插入操作 向尾部添加一个或者多个新的项目
enqueue(element) {
this.container.push(element)
}
// 删除操作 移除队列的第一个项 并返回被移除元素
dequeue() {
return this.container.shift()
}
// 返回队列中的第一个元素————类似于stack 的peek
front() {
return this.container[0]
}
// 判断是否为空
isEmpty() {
return this.container.length == 0
}
// 返回队列的大小
size() {
return this.container.length
}
// 将队列中的内容转换成字符串的形式
toString() {
let str = ""
for (let i = 0; i < this.container.length; i++) {
str += this.container[i] + " "
}
return str;
}
}
//给你们打印一下下
let queue = new Queue();
queue.enqueue('1')
queue.enqueue("bac")
queue.enqueue("abc")
queue.enqueue("cbd")
console.log(queue.container);
console.log(queue.isEmpty());
console.log(queue.front())
console.log(queue.dequeue())
console.log(queue.container);
console.log(queue.size())
queue.enqueue('1')
console.log(queue.toString())