javaScript实现栈的创建,添加元素,检查栈是否为空,删除元素,查看栈顶元素,清空栈元素,toString方法,通过栈实现多种进制转换

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.进制转换结果

 

posted @ 2020-06-29 13:20  放学别跑啊  阅读(355)  评论(0编辑  收藏  举报