簡單說一說數據結構——棧

數組是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;
}

好了,棧是一種比較簡答的數據結構。在這裏就不再多說了。期待下一個數據結構——隊列。

實例代碼請轉到源代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章