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

本文详细介绍了栈这种数据结构的实现方式及其核心方法,包括push、pop、peek等,并通过一个具体的进制转换问题展示了栈的应用场景。

栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或者待删除的元素都保存在栈的末尾。称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。

栈的创建

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

接下来,是栈的方法:

  1. push(element) -- 添加新元素到栈顶。

  2. pop() -- 移除栈顶的元素,同时返回被移除的元素。

  3. peek() -- 返回栈顶的元素,但不对栈做任何操作。

  4. isEmpty() -- 如果栈里没有任何元素就返回true,否则返回false。

  5. clear() -- 移除栈里的所有元素。

  6. size() -- 返回栈里的元素个数。

栈的完整代码

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为止。

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 Algorithms

推荐一个找vue,angular组件的轮子工厂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值