前言
数组是应用最广泛的数据存储结构。它被植入到大部分编程语言中。由于数组十分容易懂,所以它被用来作为介绍数据结构的起点非常合适。
下面来看一下栈和队列的在数组当中的实现:.pop, .push, .shift和 .unshift
先来看栈的实现
每个人都知道.push可以再数组末尾添加元素,但是你知道可以使用[].push(‘a’, ‘b’, ‘c’, ‘d’, ‘z’)一次性添加多个元素吗?
.pop 方法是.push 的反操作,它返回被删除的数组末尾元素。如果数组为空,将返回void 0 即是(undefined),使用.pop和.push可以创建LIFO (last in first out)
栈。
(last in first out)
栈的特性是后进先出,正向前面的last in first out
的翻译
push()从尾部添加,返回添加后数组的长度
pop()从尾部删除,返回被删除的元素
1 | function Stack () { //声明一个Stack构造函数 |
接下来是队列的实现
使用.shift和 .unshift即可创建FIFO (first in first out)队列。
(first in first out)
栈的特性是先进先出,正向前面的first in first out
的翻译
unshift()从头部添加,返回添加后数组的长度
shift()从头部删除,返回被删除的元素
1 | function Queue () { //声明一个Queue构造函数 |
//使用shift
或者pop
能够很方便的遍历一个数组元素
list = [1,2,3,4,5,6,7,8,9,10]
while (item = list.shift()) {
console.log(item)
}
list
// <- [] //遍历完成
结语
栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现。栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用;栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。咖啡厅内的一摞盘子是现实世界中常见的栈的例子。只能从最上面取盘子,盘子洗净后,也只能摞在这一摞盘子的最上面。结合前面的比喻,再记住后进先出对队列的理解就差不多了;
队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素。队列用于存储按顺序排列的数据,先进先出,这点和栈不一样,在栈中,最后入栈的元素反而被优先处理。可以将队列想象成在银行前排队的人群,排在最前面的人第一个办理业务,新来的人只能在后面排队,直到轮到他们为止。队列被用在很多地方,比如提交操作系统执行的一系列进程、打印任务池等,一些仿真系统用队列来模拟银行或杂货店里排队的顾客;结合前面的比喻,再记住先进先出对队列的理解就差不多了;