1.栈的概念
栈是一种先进后出(LIFO)原则的有序集合。新添加或待删除的元素都保存在栈顶,新元素都靠近栈顶,旧元素都接近栈底。现实生活中弹夹就是一个栈的例子,最后压进去的子弹,最先被击发。
2.创建一个栈
class Stack{ constructor(){ //下划线命名用来标记一个属性为私有属性。 this._count =0;//用来记录元素的个数 this._item = {};//用来存储元素 } }
3.添加元素(进栈)
push(element){ this._item[this._count] = element; this._count++; }
4.检查栈是否为空
isEmpty(){
return this._count == 0;
}
5.删除元素(出栈)
pop(){ if(this.isEmpty()) return 'Stack is null';//进行出栈的操作需要先检查栈是否为空 this._count--; let result = this._item[this._count]; delete this._item[this._count]; return result; }
6.查看栈顶元素
peek(){ return this._item[this._count-1]; }
7.清空栈元素
clear(){ this._count = 0; this._item = {}; }
8.toString方法(打印栈内的所有元素)
toString(){ if(this.isEmpty())return 'Stack is null'; let objString = `${this._item[0]}`; for(let i = 1; i < this._count; i++){ objString = `${objString},${this._item[i]}`; } return objString; }
9.完整代码
class Stack{ constructor(){ //下划线命名用来标记一个属性为私有属性。 this._count =0;//用来记录元素的个数 this._item = {};//用来存储元素 } push(element){ this._item[this._count] = element; this._count++; } isEmpty(){ return this._count == 0; } size(){ return this._count; } pop(){ if(this.isEmpty()) return 'Stack is null';//进行出栈的操作需要先检查栈是否为空 this._count--; let result = this._item[this._count]; delete this._item[this._count]; return result; } peek(){ return this._item[this._count-1]; } clear(){ this._count = 0; this._item = {}; } toString(){ if(this.isEmpty())return 'Stack is null'; let objString = `${this._item[0]}`; for(let i = 1; i < this._count; i++){ objString = `${objString},${this._item[i]}`; } return objString; } }
10.运行结果
11.使用栈实现进制转换的算法
function baseConverter(decNumber,base){ const remStack = new Stack(); const digis = '0123456789ABCDEFGHIJKLMNOPQRSTVUWXYZ'; let number = decNumber; let rem; let baseString =''; if(!(base >= 2 && base <= 36)){//如果基数不在这个范围,就不执行 return ''; } while(number > 0){ rem = Math.floor(number % base);//计算取余结果b remStack.push(rem); number = Math.floor(number / base); } console.log(remStack.toString()); while(!remStack.isEmpty()){ baseString+=digis[remStack.pop()]; } return baseString; }
12.进制转换结果