資料結構之JavaScript實現棧(Stack)
阿新 • • 發佈:2019-01-08
什麼是棧?
棧是一種特殊的列表,棧內的元素只能在列表的一段訪問,這一端被稱為棧頂。棧是一種後入先出的資料結構。
下面就是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