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

  • 相关阅读:
    django ORM
    django扩展知识
    django视图层
    php常用四种算法
    文件操作函数
    PHP开发中数组操作大全
    php 字符 常用函数
    MySQL的WHERE语句中BETWEEN与IN的用法和他们的区别
    $_SERVER
    PHP魔术方法和魔术常量
  • 原文地址:https://www.cnblogs.com/MySweetheart/p/13207484.html
Copyright © 2020-2023  润新知