前端面试总结--数据结构与算法二

栈是一种听从后进先出(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组件的轮子工厂

相关文章
相关标签/搜索