1. 前言
数据结构一般是在C/C++提到比较多,但是数据结构本身无关语言,是数据存储的设计思想。本文基于前端语言ES6(ECMAScript 2015)的类class,实现栈、队列、双端队列。
2. 栈(Stack)
栈(Stack),是一种后进先出(LIFO,Last In First Out)的数据结构,可以存入数据元素、访问元素、删除元素,仅允许在一端进行操作,即栈顶和栈尾在同一端。 浏览器BOM上的对象history就是这样的一种存储方式,浏览器的前进和后退按钮,就是进栈和出栈的过程。
栈的操作方法包含:
- push(item):将一条新数据元素推入栈中(入栈),新推入的数据都在栈顶,不返回内容;
- pop():读取并删除栈顶元素(出栈),返回栈顶item;
- peek():读取栈顶元素(不出栈,仅读取),返回栈顶item,peek和pop都是返回栈顶元素,但是pop会删除栈顶元素,peek不会删除;
- clear():清空栈中所有元素;
- isEmpty():判断栈是否为空,返回布尔值;
- size():读取栈中item的数量,返回整数值;
- toString:打印栈中所有元素。
本文利用JavaScript对象保存数据元素,添加lenght属性控制栈顶的操作。栈的实现源码如下:
class Stack {
constructor() {
this.items = {};
this.length = 0;
}
push(item) {
this.items[this.length] = item;
this.length++;
}
pop() {
if(this.isEmpty()) {
return undefined;
}
const item = this.items[this.length -