JavaScript数据结构杂谈(栈)

有两种类似数组得结构在添加和删除时更为方便控制,就是栈和队列。

栈是一种后进先出原则得有序集合,新添加或者即将删除得一端叫栈顶,另一侧叫栈底,新元素在栈顶,旧元素在栈底,ECS执行环境就是典型得栈结构。

使用weakMap保证属性私有,weakMap必须用键才能取出值,它没有entries,keys,values等迭代器方法,所以除非知道键,否则没法取出值。

const item = new WeakMap();
class Stack{
    contructor(){
        item.set(this,[]);
    }
    push(el){
        const arr = item.get(this);
        arr.push(el);
    }
    pop(){
        const arr = item.get(this);
        return arr.pop();
    }
    peek(){
        const arr = item.get(this);
        return arr[arr.length-1];
    }
    isEmpry(){
        return item.get(this).length === 0;
    }
    clear(){
        item.set(this,[]);
    }
    toString(){
        if(this.isEmpry()){
            return '';
        }
        const arr = item.get(this);
        let str = `${arr[0]}`;
        for(let i=1;i<arr.length;i++){
            str=`${str}${arr[i]}`;
        }
        return str;
    }
}
//进制转换
const baseConverter = function(dec,base){
    const stack = new Stack();
    const digits = `0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ`;
    let num = dec;
    let rem;
    let string = '';
    if((base>=2||base<=36)){
        return '';
    }
    while(num>0){
        rem = Math.floor(num%base);
        stack.push(rem);
        num = Math.floor(num/base);
    }
    while(!stack.isEmpry()){
        string+=digits[stack.pop()];
    }
    return string;
}
console.log(baseConverter(100,10));

也可以用链表实现
链表实现
做个笔记,内容借鉴于学习javascript数据结构与算法。

阅读 92

推荐阅读

世界核平

0 人关注
17 篇文章
专栏主页