前置知识
在 JavaScript 中,栈和队列的实现一般都要依赖于数组,可以把栈和队列都看作是“特别的数组”。
两者的区别在于,它们各自对数组的增删操作有着不一样的限制。
数组的方法
添加元素方法
unshift 方法-添加元素到数组的头部
push 方法-添加元素到数组的尾部
splice 方法-添加元素到数组的任何位置(第三个参数)
删除元素方法
shift 方法-删除数组头部的元素
pop 方法-删除数组尾部的元素
splice 方法-删除数组任意位置的元素
栈(Stack)——只用 pop 和 push 完成增删的“数组”
栈是一种后进先出(LIFO,Last In First Out)的数据结构。
- 只允许从尾部添加元素
- 只允许从尾部取出元素
对应到数组的方法,刚好就是 push 和 pop。因此,我们可以认为在 JavaScript 中,栈就是限制只能用 push 来添加元素,同时只能用 pop 来移除元素的一种特殊的数组。
力扣上关于栈的题目 20,155,232,844,224,682,496
队列(Queue)——只用 push 和 shift 完成增删的“数组”
队列是一种先进先出(FIFO,First In First Out)的数据结构。
- 只允许从尾部添加元素
- 只允许从头部移除元素
也就是说整个过程只涉及了数组的 push 和 shift 方法。