栈(Stack)
栈:又称为栈或堆叠,是计算机科学中的一种抽象数据类型,只允许在有序的线性数据集合的一端(称为堆栈顶端,英语:top)进行加入数据(英语:push)和移除数据(英语:pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作。(来自维基百科)
由于栈后进先出,有操作如下:入栈(push),出栈(pop),获取栈顶元素(peek),JavaScript中Array自带push(), pop()操作,用Array[Array.length-1]来实现peek操作,所以可以用Array实现Stack类型;
方法说明:
push(element):添加新元素到栈顶
pop():移除栈顶元素,同时返回被移除的元素
peek():返回栈顶元素,不对栈做任何修改
isEmpty():判断栈是否为空
size():返回栈里的元素个数
clear():清空栈
队列(Queue)
队列:又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。(来自维基百科)
由于队列后先进先出,有操作如下:入对(enqueue),出对(dequeue),JavaScript中Array自带push(), shift()操作;
方法说明:
enqueue(element):向队列尾部添加新的项
dequeue():移除队列第一项,同时返回被移除的元素
peek():返回队列中第一个元素,不对栈做任何修改
isEmpty():判断队列是否为空
size():返回队列的元素个数
clear():清空队列
双端队列
双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的抽象数据类型。双端队列中的元素可以从两端弹出,插入和删除操作限定在队列的两边进行。(来自维基百科)
双端队列把栈和队列相结合,同时遵守了先进先出和后进先出的原则。
方法说明:
addFront(element):向双端队列前端添加新的项
addBack(element):向双端队列后端添加新的项
removeFront():从双端队列前端移除第一个元素
removeBack():从双端队列后端移除第一个元素
peekFront():返回双端队列前端第一个元素
peekBack():返回双端队列后端第一个元素
双端队列的应用
下面采用双端队列实现一个回文检查器,算法如下: