1. 程式人生 > >資料結構之JavaScript實現棧(Stack)

資料結構之JavaScript實現棧(Stack)

什麼是棧?

棧是一種特殊的列表,棧內的元素只能在列表的一段訪問,這一端被稱為棧頂。棧是一種後入先出的資料結構

下面就是JavaScript實現棧:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>JavaScript實現stack</title>
</head>
<body>
	
	<script>
		/*定義棧建構函式*/
		function Stack(){
			this.dataStore = [];
			this.top = 0;
			this.length = length;
			this.empty = empty;//判空
			this.push = push;  //入棧
			this.pop = pop;    //出棧
			this.clear = clear;//清空
			this.peak = peak;  //返回棧頂元素
		}

		/*實現相關函式*/

		//length:棧中元素總數
		function length(){
			return this.top;
		}

		//empty:判空
		function empty(){
			if(this.top == 0){
				return true;
			}
			return false;
		}

		//push:入棧
		function push(element){
			this.dataStore[this.top++] = element;
		}

		//pop:出棧
		function pop(){
			var topEle = this.dataStore[--this.top];
			this.dataStore.length = this.top;
			return topEle;
		}

		//peek:返回棧頂元素
		function peak(){
			return this.dataStore[this.top-1];
		}

		//clear:清空
		function clear(){
			this.top = 0;
			this.dataStore =  [];
		}

		//測試
		var stack = new Stack();
		stack.push("one");
		stack.push("two");
		stack.push("three");
		stack.push("four");
		
	</script>
</body>
</html>

 

 

此外,介紹幾個棧的實際應用。

 

棧的使用之數制轉換:可以利用棧將數字從一種進位制轉換成另外一種進位制。下面的方法之適合基數為2~9的情況。

//棧的使用之數制轉換
		function change(num,base){
			var S = new Stack();
			while(num>0){
				S.push(num%base);
				num = Math.floor(num/=base);
			}
			var result = "";
			while(S.length()>0){
				result+=S.pop();
			}
			return result;
		}
		//測試
		console.log(change(100,2));//"1100100"

 

棧的使用之迴文:迴文是指這樣一種現象,一個單詞、短語、數字,可以從前往後和從後往前寫都是一樣。比如:121,“abcba”。使用棧可以輕鬆判斷字串是否是迴文。

//棧的使用之迴文
		function huiwen(word){
			var S = new Stack();
			for(var i=0;i<word.length;i++){
				S.push(word[i]);
			}
			var rword = "";
			while(S.length()>0){
				rword+=S.pop();
			}
			if(word == rword){
				return true;
			}else{
				return false;
			}
		}
		//測試
		huiwen("abcba");//true