博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【js4agls】数据结构JavaScript描述-栈篇
阅读量:5879 次
发布时间:2019-06-19

本文共 1631 字,大约阅读时间需要 5 分钟。

  1. 列表项目

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

图片描述

ADT

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

Stacktop // 栈顶元素位置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] + '\n');        }    }}

测试

var stack = new Stack();// 入栈stack.push('jiavan');stack.push('jiavan2');stack.push('jiavan3');stack.push('jiavan4');// jiavan4// jiavan3// jiavan2// jiavanstack.print();// jiavan4stack.pop();// jiavan3stack.peek();// 3stack.top;// jiavan3// jiavan2// jiavanstack.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

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

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

转载地址:http://uscix.baihongyu.com/

你可能感兴趣的文章
Intellij IDEA 快捷键整理
查看>>
Redis 通用操作2
查看>>
11. Spring Boot JPA 连接数据库
查看>>
洛谷P2925 [USACO08DEC]干草出售Hay For Sale
查看>>
MapReduce工作原理流程简介
查看>>
那些年追过的......写过的技术博客
查看>>
小米手机解锁bootload教程及常见问题
查看>>
Python内置函数property()使用实例
查看>>
Spring MVC NoClassDefFoundError 问题的解决方法。
查看>>
CentOS 6.9配置网卡IP/网关/DNS命令详细介绍及一些常用网络配置命令(转)
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
C# 解决窗体闪烁
查看>>
CSS魔法堂:Transition就这么好玩
查看>>
【OpenStack】network相关知识学习
查看>>
centos 7下独立的python 2.7环境安装
查看>>
[日常] 算法-单链表的创建
查看>>
前端工程化系列[01]-Bower包管理工具的使用
查看>>
使用 maven 自动将源码打包并发布
查看>>
Spark:求出分组内的TopN
查看>>
Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特
查看>>