队列和栈相似,都是对插入和删除操作的部位做了限制特殊的线性表。在队列中,只能从一头删除节点,这一头叫做队首;而另一端只能做插入操作,这一头叫做队尾。很容易理解,队列是一个“先进先出”的线性表。队列的应用有一个很常见的例子,就是打印机的作业队列,打印机会维护一个作业队列,先入队的作业先执行~
根据存储结构的不同,队列有顺序队列和链式队列两种实现,代码如下:
链式存储:
function LinkedQueue () {
//节点结构定义
var Node = function(element){
this.element = element;
this.next = null;
}
var length = 0, quequ;
//入队操作
this.push = function(element){
var node = new Node(element);
if(length === 0){
quequ = node;
length++;
return
}else{
current = queue;
current.next = node;
length++;
return
}
}
//出队操作
this.pop = function(){
if(queue){
var current = queue;
queue= current.next;
current.next = null;
length--;
return current;
}else{
return '队列为空';
}
}
//获取队列长度
this.length= function(){
return length
}
//获取队首
this.getFront = function(){
return queue.element
}
this.toString = function(){
var str = '', current = queue;
while(current){
str += current.element;
current = current.next;
}
return str
}
//清除队列
this.clear = function(){
queue= null;
length = 0;
return
}
}
顺序存储
//顺序栈的JS实现 这里直接使用了JS内置的Array对象
function ArrayStack(){
var arr = [];
//压栈操作
this.push = function(element){
arr.push(element);
}
//退栈操作
this.pop = function(){
return arr.pop();
}
//获取栈顶元素
this.top = function(){
return arr[arr.length-1];
}
//获取栈长
this.size = function(){
return arr.length;
}
//清空栈
this.clear = function(){
arr = [];
return
}
this.toString = function(){
return arr.toString();
}
}