资讯专栏INFORMATION COLUMN

【js4agls】数据结构JavaScript描述-栈篇

psychola / 645人阅读

摘要:列表项目栈是一种后进先出的数据结构,我们所能操作的都是栈顶元素,删除一个栈顶元素叫做出栈或者弹栈,添加一个元素叫做入栈或者压栈首先构建我们的抽象数据类型栈顶元素位置保存数据的数组压栈出栈查看栈顶元素清空栈栈的长度输出栈元素描述模拟输出

列表项目

栈是一种后进先出(LIFO)的数据结构,我们所能操作的都是栈顶元素,删除一个栈顶元素叫做出栈或者弹栈,添加一个元素叫做入栈或者压栈.

ADT

首先构建我们的抽象数据类型.

Stack
top // 栈顶元素位置
dataStore //保存数据的数组
push // 压栈
pop // 出栈
peek // 查看栈顶元素
empty // 清空栈
length // 栈的长度
print // 输出栈元素
Javascript 描述
function Stack () {
    this.top = 0;
    this.dataStore = [];
}
Stack.prototype = {
    constructor: Stack,
    push: function (element) {
        return this.dataStore[this.top++] = element;
    },
    pop: function () {
        return this.dataStore.length ? 
                this.dataStore.splice(--this.top, 1) :
                false;
    },
    peek: function () {
        return this.dataStore[this.top - 1];
    },
    empty: function () {
        this.dataStore.length = 0;    
    },
    length: function () {
        return this.dataStore.length;
    },
    // 模拟输出栈结构
    print: function () {
        for (var i = this.length() - 1; i >= 0; i--) {
            console.log(this.dataStore[i] + "
");
        }
    }
}
测试
var stack = new Stack();
// 入栈
stack.push("jiavan");
stack.push("jiavan2");
stack.push("jiavan3");
stack.push("jiavan4");

// jiavan4
// jiavan3
// jiavan2
// jiavan
stack.print();

// jiavan4
stack.pop();
// jiavan3
stack.peek();
// 3
stack.top;
// jiavan3
// jiavan2
// jiavan
stack.print();
应用

对num数进行n进制的转换,大致算法如下:

对num和n进行求余和想除取整

将余数入栈push

回到第一步直至除到值为0

function transformNum(num, base) {
    var res = parseInt(num / base);
    var stack = new Stack();
    stack.push(num % base);
    while (parseInt(res)) {
        stack.push(parseInt(res % base));
        res /= base;
    }
    stack.print();
}

// transformNum(10, 2), 1010
// transformNum(10, 8), 12

栈的应用还有很多,比如匹配括号以及表达式求值等等.

系列文章原文地址https://github.com/Jiavan/js4... GitHub repo上有源码和更好的阅读体验,若有错误欢迎发PR,若对你有所帮助也欢迎star!

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

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

相关文章

  • js4agls数据结构JavaScript描述-队列篇

    摘要:队列是一种先进先出的数据结构,与栈不同的是,它操作的元素是在两端,而且进行的是不一样的操作。 队列(Queue)是一种先进先出(First-In-First-Out, FIFO)的数据结构,与栈不同的是,它操作的元素是在两端,而且进行的是不一样的操作。向队列的队尾加入一个元素叫做入队列(enQueue),向队列的队首删除一个元素叫做出队列(delQueue). showImg(http...

    Anonymous1 评论0 收藏0
  • js4agls数据结构JavaScript描述-链表篇

    摘要:我们可以使用链表这种数据结构,来删除元素的时候而不必让后面的元素向前移动。一个节点的上一个节点称为它的前驱,下一个节点即指向的节点称为它的后继节点,在简单的单向链表中,第一个节点称为头节点它没有前驱节点,最后一个节点没有后继节点为。 之前我们用数组的方式来实现了队列,是否还记得在出队列后有这样一段代码: for (i = 0; i < this.length - 1; i++) { ...

    Xufc 评论0 收藏0
  • React.js 小书 Lesson6 - 使用 JSX 描述 UI 信息

    摘要:上面的代码小书经过编译以后会变成小书会构建一个对象里描述你结构的信息,包括标签名属性还有子元素等。第二个原因是,有了这样一个对象。负责把这个用来描述信息的对象变成元素,并且渲染到面上。下一节中我们将介绍小书组件的方法。 React.js 小书 Lesson6 - 使用 JSX 描述 UI 信息 本文作者:胡子大哈本文原文:http://huziketang.com/books/rea...

    ChanceWong 评论0 收藏0
  • javaScript中的Object类型

    摘要:默认为当该属性的为时,才能被赋值运算符改变。可以是任何有效的值数值,对象,函数等。而这些篡改可能会影响对象的内置属性或方法,从而导致对象的正常功能可能无法使用。 属性描述符 JavaScript提供了一个内部数据结构,用于描述对象的值,控制其行为,例如该属性是否可写、是否可配置、是否可修改以及是否可枚举等。这个内部数据结构被称为‘属性描述符’。每个属性都有自己对应的属性描述符,保存该属...

    hyuan 评论0 收藏0
  • JavaScript-面向对象、Object类型

    摘要:面向对象面向对象编程的全称为简称。面向对象编程是用抽象方式创建基于现实世界模型的一种编程方式。面向对象编程可以看做是使用一系列对象相互协作的软件设计。面向对象编程的三个主要特征是封装继承多态。 面向对象 面向对象编程的全称为Object Oriented Programming,简称OOP。面向对象编程是用抽象方式创建基于现实世界模型的一种编程方式。面向对象编程可以看做是使用一系列对象...

    amuqiao 评论0 收藏0

发表评论

0条评论

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