基本概念理解:
/*
栈(stack)又名堆栈,它是一种运算受限的线性表。
其限制是仅允许在表的一端进行插入和删除运算。
这一端被称为栈顶,相对地,把另一端称为栈底。
向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,
而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。
*/
栈图片" class="has" height="270" src="https://img-blog.csdnimg.cn/20190325095248920.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI3OTU0NjQz,size_16,color_FFFFFF,t_70" width="250" />
堆 队列
JavaScript代码实现:
//两个数组模拟栈的行为
var stack1=[],//存储栈
stack2=[];//辅助栈
//栈是后入先出(LIFO,last in first out),队列是先入先出(FIFO,first in first out)
//队列插入元素函数
function push(ele)
{
//模拟队列的push操作,直接往存储栈stack1中推入即可
//但是要考虑辅助栈stack2中还存在值的情况,需要先将辅助栈中的值推回存储栈中
while(stack2.length !== 0){
stack1.push(stack2.pop());
}
stack1.push(ele);
}
//队列删除元素函数
function pop()
{
//模拟队列的pop操作则要考虑栈的后入先出特性,需要先将存储栈stack1中的数组,推入辅助栈stack2,然后辅助栈弹出元素
while(stack1.length !== 0){
stack2.push(stack1.pop());
}
return stack2.pop();
}