一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是按照“先进先出”或“后进后出”的原则组织数据的。队列中没有元素时,称为空队列。
与栈相似,但有不同,栈遵循的是先进后出,也就是最先放入栈的节点会最后被弹出,而队列则是先进先出,第一个放入的节点最先被弹出,最后放入的节点最后被弹出。
在往栈里放入节点时,先是将头指针和尾指针都指向第一个节点,随后尾指针不变,头指针一直指向新加入的节点,也就是一点有新的节点进入栈,位置不变,头指针一直在变化。而队列则是头指针不变化,尾指针一直指向新插入的节点。还有一点不同就是在栈中一直都是新插入的节点指向旧节点,而队列一直是旧节点指向新节点。
用js编写一个队列:
先创建一个代表节点的类:
function Node(value){
this.value = value;
this.point = null; //会在插入队列的时候进行复制 指向下一个要插入的节点
}
function Stack(){
this.head = null; //头指针
this.tail = null;//尾指针
this.push = function(value){
let node = new Node(value);
if(this.tail!=null){
this.tail.point = node;
this.tail = node;
}else{
this.head = node;
this.tail = node;
}
}
this.pop = function(){
let node = null;
if(this.head!= null){
node = this.head;
this.head = node.point;
}
}
}