• JS 栈


    栈是一种高效的数据结构,因为对它的操作(添加/删除)都是在数据顶端操作
    一种特殊的列表,对栈的操作只能在一端操作,这个地方叫栈顶

    特点

    • 后入先出

    操作方式

    • 入栈 push
    • 出栈 pop
    • 预览 peek

    栈的抽象定义

    • 记录栈元素顶端的位置 top
    • 入栈方法 push
    • 出栈方法 pop
    • 预览 peek
    • 清除 clear
    • 元素个数 length

    栈的实现 Stock

    function Stock() {
        this.dataStore = [];
        this.top = 0;
        this.push=push;
        this.pop=pop;
        this.peek=peek;
        this.length=length;
        this.clear=clear;
        this.toString=toString;
    }
    
    // 入栈
    // 1:添加元素 top +1
    function push(item) {
        this.dataStore[this.top++]=(item);
    
    }
    // 出栈,返回栈顶元素,并且将元素的栈顶位置-1
    // 1:删除元素 top--
    function pop() {
        return this.dataStore[this.top--]
    }
    //预览顶端元素
    function peek(){
        return this.dataStore[this.top-1];
    }
    //返回栈的长度
    function length(){
        return this.top;
    }
    //清空栈
    function clear(){
        this.top=0;
    }
    

    栈的常用例子 进制转换

    //num要转换的数字 base 转换为几机制
    function convertNum(num,base){
        var s=new Stock()
        while(num>0){
            console.log(num);
            s.push(num%base);
            num= Math.floor(num/=base);
        }
        var strResult="";
        while(s.length()>0){
            strResult+=s.pop();
        }
        return strResult;
    }
    

    例子:回文检查

    //text 要检查的文字
    function isImageText(text) {
        var words = text.toString().split('');
        var stock = new Stock();
        words.forEach(function (item) {
            stock.push(item.toString());
        })
    
        var result = "";
        while (stock.length() > 0) {
            result += stock.pop().toString();
        }
        console.log(result);
        if (result == text) {
            return true;
        } else {
            return false;
        }
    }
    

    例子递归

    // 计算阶层
    
    function fat(n) {
        var stock = new Stock();
        while (n > 0) {
            stock.push(n);
            n--;
        }
        var result = 1;
        while (stock.length() > 0) {
            result *= stock.pop()
        }
        return result;
    }
  • 相关阅读:
    斐波那契数列的量化分析
    GridView编辑删除操作
    Linux crontab 命令格式与具体样例
    VB.NET版机房收费系统---组合查询
    XMLHTTP使用具体解释
    Android 在子线程中更新UI的几种方法
    国产操作系统剽窃Linux内核可耻!
    Android的PVPlayer介绍
    稀疏矩阵
    很好的理解遗传算法的样例
  • 原文地址:https://www.cnblogs.com/dark-liu/p/5789829.html
Copyright © 2020-2023  润新知