js實現資料結構--棧
棧的定義:
棧是一種遵從後進先出(LIFO)原則的有序集合。新新增的或待刪除的元素都儲存在棧的同一端,稱作棧頂,另一端就叫棧底。
棧的特點:
後進先出:新元素都靠近棧頂,舊元素都接近棧底,所以新元素會比舊元素要先出棧
生活中棧的體現:
放在桌子上的一堆書和餐廳裡堆放的盤子
JS語法定義棧以及相關的方法:
建立棧:建立一個類來表示棧,宣告棧的各種屬性和方法,程式碼如下:
//宣告棧和棧的屬性和方法
function Stack() {
this.items = [];//儲存棧內元素的陣列
this.top = 0;//棧頂元素的位置
this.push = push;//進棧
this.pop = pop;//出棧
this.peek = peek;//棧頂元素
this.clear=clear;//清空棧
this.length=length//判空
}
重寫棧的系列方法,程式碼如下:
function push(element) {//進棧
this.items[this.top++] = element;
}
function pop() {//出棧
return this.items[--this.top];
}
function peek() {//棧頂元素
return this.items[this.top-1];
}
function length() {//當返回0是說明棧是空棧
return this.top;
}
function clear() {//移除棧的所有元素
this.top = 0;
}
以上是棧的基本定義,包括屬性,方法等。
使用Stack類:
首先我們需要初始化Stack類,然後驗證一下棧是不是為空(輸出是true,因為棧內沒有新增元素)
var stack = new Stack();
console.log(stack.length==0);//輸出為true
接下來,往棧裡新增一些元素(這裡新增的是5和8,你也可以新增任何型別的元素)
stack.push(5);
stack.push(8);
檢視棧頂元素
console.log(stack.peek());//輸出8
統計棧內元素個數和判空
console.log(items.length);//輸出2
console.log(stack.length==0);//輸出false
用棧解決問題:
數制之間的轉換,一般的是十進位制的數轉換成2進位制,8進位制,16進位制等。
例如將十進位制的轉換成2進位制的,大概過程是這樣,如下圖:
- 利用該轉換的原理,實現其他的轉換,程式碼如下:
function baseConverter(decNumber,base){
var remStack = new Stack();
var rem, baseString = '',
digits = '0123456789ABCDEF';
while (decNumber > 0){
rem = Math.floor(decNumber % base);
remStack.push(rem);
decNumber = Math.floor(decNumber / base);
}
while ( remStack.length() >0 ){
baseString += digits[remStack.pop()];
}
return baseString;
}
console.log(baseConverter(10,2));//輸出1010
console.log(baseConverter(100345,8));//輸出303771
console.log(baseConverter(100345,16));//輸出187F9
判斷迴文字串
//判斷迴文字串
function isPalindrome(word) {
var s = new Stack();
for (var i = 0; i < word.length; i++) {
s.push(word[i]);
}
var newStr = "";
while (s.length() > 0) {
newStr += s.pop();
}
if(word === newStr){
return true;
}
return false;
}
console.log(isPalindrome("abcdcba"));//輸出true
遞迴計算
//使用棧實現遞迴,計算階乘
function fun(num){
if(num<=1){
return 1;
}else{
return num*arguments.callee(num-1);
}
};
console.log(fun(5));//輸出120
相關文章
- 資料結構-js實現棧和佇列資料結構JS佇列
- js資料結構之棧JS資料結構
- js資料結構--棧(stack)JS資料結構
- 資料結構之php實現棧資料結構PHP
- JS 裡的資料結構 - 棧JS資料結構
- JS資料結構-棧-練習JS資料結構
- js實現資料結構--陣列JS資料結構陣列
- js實現資料結構--佇列JS資料結構佇列
- js實現資料結構--單連結串列JS資料結構
- 資料結構和演算法-切片實現棧資料結構演算法
- php實現基本資料結構之棧、佇列PHP資料結構佇列
- 資料結構 - 棧資料結構
- 資料結構-棧資料結構
- 演算法與資料結構-棧(Stack)-Java實現演算法資料結構Java
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- JS版資料結構第一篇(棧)JS資料結構
- 資料結構(1):棧資料結構
- 資料結構之——棧資料結構
- javascript資料結構 -- 棧JavaScript資料結構
- 資料結構之「棧」資料結構
- 資料結構之棧資料結構
- java實現單連結串列、棧、佇列三種資料結構Java佇列資料結構
- 資料結構 使用2個棧實現一個佇列資料結構佇列
- @資料結構C/C++版(5)《棧的順序儲存結構以及進棧和出棧操作的實現》資料結構C++
- 資料結構與演算法-資料結構(棧)資料結構演算法
- js資料結構與演算法 陣列、棧部分JS資料結構演算法陣列
- 資料結構-棧(通過陣列和單向連結串列實現)資料結構陣列
- 資料結構與演算法 | 棧的實現及應用資料結構演算法
- 資料結構-佇列、棧資料結構佇列
- 資料結構03-棧資料結構
- 資料結構:棧詳解資料結構
- JavaScript資料結構之-棧JavaScript資料結構
- 波波的資料結構-棧資料結構
- Java版-資料結構-棧Java資料結構
- JavaScript資料結構之棧JavaScript資料結構
- python資料結構之棧Python資料結構
- JavaScript資料結構02 - 棧JavaScript資料結構
- 資料結構筆記——棧資料結構筆記