资讯专栏INFORMATION COLUMN

javascript实现数据结构中的栈结构

xuxueli / 652人阅读

摘要:在中,一些利用原本数组没法轻易解决的问题,其实也是可以通过模拟数据结构来解决问题的,并非是说前端就不需要去学数据结构与算法,懂得数据结构的前端才是真的程序员。

在javascript中,一些利用原本数组没法轻易解决的问题,其实也是可以通过模拟数据结构来解决问题的,并非是说前端就不需要去学数据结构与算法,懂得数据结构的前端才是真的程序员。

下面简单地用javascript来实现数据结构中的栈结构,栈结构的先入后出性质在解决某些数据问题时很有用

栈的构造函数

function Stack() {
    this.dataStore = [];
    this.top = 0;
    this.push = push;
    this.pop = pop;
    this.peek = peek;
    this.clear = clear;
    this.length = length;
}

从栈顶放入某个元素

function push(element) {
    this.dataStore[this.top++] = element;
}

从栈顶取出某个元素

function pop() {
    return this.dataStore[--this.top]
}

获得栈的高度

function length() {
    return this.top;
}

清空整个栈

function clear() {
    this.top = 0;
}

改变栈顶的位置

function peek() {
   return this.dataStore[this.top - 1];
}

下面是一个有趣的例子 利用stack类实现10进制转换为其它进制
function mulBase(num, base) {
    let s = new Stack();
    do {
        s.push(num % base);
        num = Math.floor(num /= base);
    } while (num > 0);
    let content = "";
    while (s.length() > 0) {
        content += s.pop();
    }
    return content;
}
将10进制数9转换为2进制数1001 print(mulBase(9, 2));
又是一个有趣的例子,用栈来判断是否是回文,回文就是一个字符串,从前往后写跟从后往前写都是一样的 例如"racecar","data"
function isPalindrome(word) {
        let s = new Stack();
        for (let i = 0; i < word.length; i++) {
            s.push(word[i]);
        }
        let rword = "";
        while (s.length() > 0) {
            rword += s.pop();
        }
        if (word == rword) {
            return true;
        } else {
            return false;
        }
    }
判断racecar是否是回文 print(isPalindrome("racecar"));用栈可以实现很多方便的功能,可以见得前端了解数据结构尤为重要。

欢迎评论以及留言,同时欢迎关注我的博客定时不断地更新我的文章 陈建光的博客

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94337.html

相关文章

  • js模拟简单的栈和队列

    摘要:移除数组第一项并返回该项同时将数组的长度减一。简单实现栈使用和结合实现简单栈简单实现队列使用与结合实现简单队列额外补充与用途相反,在数组前端添加任意个项,并返回新数组的长度。 栈和队列 栈:LIFO(先进后出)一种数据结构队列:LILO(先进先出)一种数据结构 使用的js方法 1.push();可以接收任意数量的参数,把它们逐个推进队尾(数组末尾),并返回修改后的数组长度。2.po...

    张金宝 评论0 收藏0
  • 数据结构javascript实现

    摘要:一数组二栈栈又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。进行插入操作的端称为队尾,进行删除操作的端称为队头。 一、数组 二、栈 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈...

    Astrian 评论0 收藏0
  • 前端进击的巨人(二):栈、堆、队列、内存空间

    摘要:中有三种数据结构栈堆队列。前端进击的巨人一执行上下文与执行栈,变量对象中解释执行栈时,举了一个乒乓球盒子的例子,来演示栈的存取方式,这里再举个栗子搭积木。对于基本类型,栈中存储的就是它自身的值,所以新内存空间存储的也是一个值。 面试经常遇到的深浅拷贝,事件轮询,函数调用栈,闭包等容易出错的题目,究其原因,都是跟JavaScript基础知识不牢固有关,下层地基没打好,上层就是豆腐渣工程,...

    edgardeng 评论0 收藏0
  • JVM体系结构与工作方式概览

    摘要:在本文,笔者将与大家概览的体系结构与工作方式。将第条和第条指令分别是将两个局部变量入栈,然后相加。最后一条指令是,这条指令执行完后当前的这个方法对应的这些部件会被回收,局部变量区的所有值将全部释放,寄存器会被销魂,在栈中与这个方 Java之所以号称一次编译,到处运行,主要原因是JVM屏蔽了各个计算机平台相关的软件(大多指系统)或者硬件之间的差异,使得与平台相关的耦合统一由JVM提供者来...

    suosuopuo 评论0 收藏0
  • java的栈

    摘要:对于执行引擎来说,在活动线程中,只有位于栈顶的栈帧才是最有效的称为当前栈帧与这个栈帧相关联的方法称为当前方法。执行引擎运行的所有的字节码指令都只针对当前栈帧进行操作。 showImg(https://segmentfault.com/img/bVbvueY?w=1600&h=800); 栈帧数据结构 栈帧(Stack Frame)是用来支持虚拟机进行方法调用和方法执行的数据结构,它是虚...

    jeyhan 评论0 收藏0

发表评论

0条评论

xuxueli

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<