有两种类似数组得结构在添加和删除时更为方便控制,就是栈和队列。
栈是一种后进先出原则得有序集合,新添加或者即将删除得一端叫栈顶,另一侧叫栈底,新元素在栈顶,旧元素在栈底,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数据结构与算法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。