前端面試總結--數據結構與算法二

棧是一種聽從後進先出(LIFO)原則的有序集合。新添加的或者待刪除的元素都保存在棧的末尾。稱做棧頂,另外一端就叫棧底。在棧裏,新元素都靠近棧頂,舊元素都接近棧底。vue

棧的建立

function Stack(){
   var items = [];
}

接下來,是棧的方法:git

  1. push(element) -- 添加新元素到棧頂。this

  2. pop() -- 移除棧頂的元素,同時返回被移除的元素。code

  3. peek() -- 返回棧頂的元素,但不對棧作任何操做。ip

  4. isEmpty() -- 若是棧裏沒有任何元素就返回true,不然返回false。element

  5. clear() -- 移除棧裏的全部元素。rem

  6. size() -- 返回棧裏的元素個數。get

棧的完整代碼

function Stack(){
    var items = [];
    
    this.push = function(element){
        items.push(element);
    }
    
    this.pop = function(){
        return items.pop();    
    }
    
    this.peek = function(){
        return items[items.length-1];
    }
    
    this.isEmpty = function(){
        return items.length == 0;
    }
    
    this.size = function(){
        return items.length;
    }
    
    this.clear = function(){
        items = [];
    }
    
    this.print = function(){
        console.log(items.toString());
    }
}

進制轉換問題

如何將十進制與其餘進制進行轉換,能夠用stack來解決這個問題。
好比要把十進制轉化成二進制,能夠將十進制數字和2相除,直到結果是0爲止。it

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;
}

console.log(baseConverter(100345,2));
console.log(baseConverter(100345,8));
console.log(baseConverter(100345,16));

參考書籍:Learning Javascript Data Structures and Algorithmsio

推薦一個找vue,angular組件的輪子工廠

相關文章
相關標籤/搜索