zoukankan      html  css  js  c++  java
  • 队列的JS实现

            队列和栈相似,都是对插入和删除操作的部位做了限制特殊的线性表。在队列中,只能从一头删除节点,这一头叫做队首;而另一端只能做插入操作,这一头叫做队尾。很容易理解,队列是一个“先进先出”的线性表。队列的应用有一个很常见的例子,就是打印机的作业队列,打印机会维护一个作业队列,先入队的作业先执行~


            同样的,根据存储结构的不同,队列也有顺序队列和链式队列两种实现,代码如下:

    function LinkedQueue () {
            //节点结构定义
    	var Node = function(element){
    		this.element = element;
    		this.next = null;
    	} 
    
    	var length = 0,
    		front,//队首指针
    		rear;//队尾指针
            //入队操作
    	this.push = function(element){
    		var node = new Node(element),
    			current;
    
    		if(length == 0){
    			front = node;
    			rear = node;
    			length++;
    
    			return true;
    		}else{
    			current = rear;
    			current.next = node;
    			rear = node;
    			length++;
    
    			return true;
    		}
    	}
            //出队操作
    	this.pop = function(){
    		if(!front){
    			return 'Queue is null';
    		}else{
    			var current = front;
    			front = current.next;
    			current.next = null;
    			length--;
    			return current;
    		}
    	}
            //获取队长
    	this.size = function(){
    		return length;
    	}
            //获取队首
    	this.getFront = function(){
    		return front;
    	}
            //获取队尾
    	this.getRear = function(){
    		return rear;
    	}
          
    	this.toString = function(){
    		var str = '',
    			current = front;
    
    		while(current){
    			str += current.element;
    			current = current.next;
    		}
    
    		return str;
    	}
            //清除队列
    	this.clear = function(){
    		front = null;
    		rear = null;
    		length = 0;
    		return true;
    	}
    }
    
    
    function ArrayQueue(){
    	var arr = [];
            //入队操作
    	this.push = function(element){
    		arr.push(element);
    		return true;
    	}
            //出队操作
    	this.pop = function(){
    		return arr.shift();
    	}
            //获取队首
    	this.getFront = function(){
    		return arr[0];
    	}
            //获取队尾
    	this.getRear = function(){
    		return arr[arr.length - 1]
    	}
            //清空队列
    	this.clear = function(){
    		arr = [];
    	}
            //获取队长
    	this.size = function(){
    		return length;
    	}
    }


  • 相关阅读:
    401. Binary Watch
    46. Permutations
    61. Rotate List
    142. Linked List Cycle II
    86. Partition List
    234. Palindrome Linked List
    19. Remove Nth Node From End of List
    141. Linked List Cycle
    524. Longest Word in Dictionary through Deleting
    android ListView详解
  • 原文地址:https://www.cnblogs.com/zhuwq585/p/6075114.html
Copyright © 2011-2022 走看看