栈
栈是一种线性的、后进先出的数据结构。
进栈:
![](https://i-blog.csdnimg.cn/blog_migrate/ec272816511ccdaf935edff3ba5b3e26.png)
出栈:
使用 JS 实现栈:
class Stack {
/**存储栈中的数据 */
stack = [];
/**
* 添加一个元素到栈中(进栈)
* @param {*} item 数据
*/
push(item) {
this.stack.push(item);
}
/**
* 获取栈的最后一个元素(出栈)
* @returns "栈为空" || 元素
*/
pop() {
return this.isEmpty() ? "栈为空" : this.stack.pop();
}
/**
* 判断栈是否为空
* @returns 是否为空(true:为空;false:不为空)
*/
isEmpty() {
return this.size() === 0;
}
/**
* 获取栈的长度
* @returns 栈的长度
*/
size() {
return this.stack.length;
}
}
队列
队列是一种先进先出的、线性的数据结构,与栈的结构类似,只是最新入队到队列的数据,会第一个出队,这与栈相反。
入队:
入队就是把数据添加到队列中
出队:
出队就是从队列中取出数据
使用JS实现队列:
class Queue {
/**保存队列中的数据 */
items = [];
/**
* 添加一个元素到队列的尾部(入队)
* @param {*} item 数据
*/
enqueue(item) {
this.items.push(item);
}
/**
* 获取队列的第一个元素(出队)
* @returns "队列为空" || 元素
*/
dequeue() {
if (this.isEmpty()) {
return "队列为空";
}
return this.items.shift();
}
/**
* 判断队列是否为空
* @returns 是否为空(true:为空;false:不为空)
*/
isEmpty() {
return this.size() === 0;
}
/**
* 获取队列长度
* @returns 队列的长度
*/
size() {
return this.items.length;
}
}
const queue = new Queue();
// 添加元素(入队)
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
// 查看队列大小
console.log(`队列大小:${queue.size()}`) // 队列大小:3
// 获取元素(出队)
console.log(`出队元素:${queue.dequeue()}`) // 出队元素:1