棧的JS實現

        棧,是一種特殊的線性表,其插入及刪除的操做都在線性表的同一端進行。這一端稱爲棧頂,另外一端稱爲棧底。就相似於餐廳裏的一摞盤子,後放的盤子在上方,也會先被人拿走。棧具備「後進先出」的邏輯特性。棧在計算機科學中有着普遍的應用,遞歸函數的實現就利用了棧這種數據結構,在遞歸時,計算機會維護一個遞歸工做棧,當一個遞歸函數被調用時,被調函數的局部變量、形參的值以及一個返回地址就會儲存在遞歸工做棧中。運行時按照後進先出的順序,進行函數執行,完成遞歸操做。編譯原理中也屢次使用棧這種數據結構~   javascript


        棧是一種特殊的線性表,故其在存儲結構上也有鏈式存儲和順序存儲兩種。代碼以下:java

/*鏈棧的JS實現*/
function LinkedStack(){
        //節點結構定義
        var Node = function(element){
		this.element = element;
		this.next = null;
	}

	var length = 0,
		top; //棧頂指針
	//壓棧操做	
	this.push = function(element){
		var node = new Node(element),
			current;
		
		if(!top){
			top = node;
			length++;
			return true;
		}else{
			node.next = top;
			top = node;
			length++;
			return true;
		}
	}
        //退棧操做
	this.pop = function(){
		var current = top;
		if(top){
			top = current.next;
			current.next = null;
			length--;
			return current;
		}else{
			return 'null stack';
		}
	}
        //獲取棧頂節點
	this.top = function(){
		return top;
	} 
        //獲取棧長
	this.size = function(){
		return length; 
	}
        
	this.toString = function(){
		var string = '',
			current = top;

		while(current){
			string += current.element;
			current = current.next;
		}

		return string;
	}
        //清空棧
	this.clear = function(){
		top = null;
		length = 0;

		return true;
	}
}

//順序棧的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 true;
	}

	this.toString = function(){
		return arr.toString();
	}
}
相關文章
相關標籤/搜索