數組是Javascript裏面非常靈活的數據結構,如何用數組來構建棧?
棧是一種遵從後進先出(LIFO)的有序集合。新添加的或刪除的元素都保存在棧的末尾,稱爲棧頂,另一端就叫棧底。在棧裏,新元素都靠近棧頂,舊元素都接近棧底。
現實生活中,書堆就是棧很好的呈現。後面放的就在上面,也是要第一本拿開的。
其他就不多說了,棧也是一種比較簡單的數據結構。下面,爲棧聲明一些方法:
push(element(s)):添加一個或幾個新元素到棧頂。
pop():移除棧頂的元素,同時返回被移除的元素。
peek():返回棧頂的元素,不對棧做任何修改,並不會刪除棧頂的元素。
isEmpty():判斷棧是否爲空,沒有任何元素就返回true,否則返回false。
clear():移除棧裏的所有元素。
size():返回棧裏的元素個數。
基礎實現:
function Stack(){
var items = [];
this.push = function(element){
items.push(element);
}
this.pop = function(){
items.pop();
}
this.peek = function(){
return items[items.length - 1];
}
this.isEmpty = function(){
return items.length === 0;
}
this.size = function(){
return items.length;
}
this.print = function(){
console.log(items.toString());
}
}
純理論的東西實在無聊,下面來點實際應用:
十進制轉爲二進制應用:
function dividedBy2(decNumber){
var remStack = new Stack(),
rem,
binaryString = '';
while(decNumber > 0){
rem = Math.floor(decNumber % 2);
remStack.push(rem);
decNumber = Math.floor(decNumber / 2);
}
while(!remStack.isEmpty()){
binaryString += remStack.pop().toString();
}
return binaryString;
}
十進制轉爲任何進制:
function baseConverter(decNumber , base){
var remStack = new Stack(),
rem,
baseString = '',
digits = '0123456789ABCDEF';
while(decNumber > 0){
rem = Math.floor(decNumber % base);
remStack.push(rem);
decNumber = Math.floor(decNumber / base);
}
while(!remStack.isEmpty()){
baseString += digits[remStack.pop()];
}
return baseString;
}
好了,棧是一種比較簡答的數據結構。在這裏就不再多說了。期待下一個數據結構——隊列。
實例代碼請轉到源代碼