前言 

  栈是一种遵循后进先出(LIFO)原则的有序集合,新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另外一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。可以想象桌上的一叠书,或者厨房里的堆放的盘子。

一、栈的创建

可以创建一个类来表示栈

//1、创建一种数据结构来保存栈里面的数据,这里选择数组
//2、声明一些栈的方法
// push(element(s)) : 添加一个或一些元素到栈顶
// pop() : 移除栈顶的元素,同时返回被移除的元素。
// peek() : 返回栈顶的元素,仅仅是返回,不做任何修改。
// isEmpty() : 如果栈里面没有任何元素就返回true,否者为false。
// clear() : 清除栈里面的元素。
// size() : 返回栈里面的个数。
function Stack(){ var items = []; this.push = function(element){
items.push(element);
} this.pop = function(){
return items.pop();
} this.peek = function(){
return items[items.length-1];
} this.isEmpty = function(){
return items.length == 0;
} this.clear = function(){
items = [];
} this.size = function(){
return items.length;
} this.print = function(){
console.log(items.toString());
} } //使用栈 var stack = new Stack(); console.log(stack.isEmpty());//true stack.push(100); stack.push(200); console.log(stack.isEmpty());//false console.log(stack.size());//2 console.log(stack.peek()); stack.pop(); stack.print();//100

二、栈的应用

十进制转二进制

//算法描述:将该十进制的数和2整除,或者每次的余数(0或1),直到结果为0位置。比图10的二进制为:
// 10/2 = 5 ,余数 0
// 5/2 = 2 ,余数 1
// 2/2 = 1 ,余数 0
// 1/2 = 0 ,余数 1
// 10的二进制表示为:0101
function diviceBy2(decNumber){

    var remStack = new Stack(),
rem,
binaryString = ''; while(decNumber > 0){
rem = Math.floor(decNumber%2);
remStack.push(rem);
decNumber = Math.floor(decNumber/2);
} while(!remStack.isEmpty()){
binaryString += remStack.pop().toString();
} return binaryString;
}
console.log(diviceBy2(10)); //1010
console.log(diviceBy2(520)); //1000001000
console.log(diviceBy2(1000)); //1111101000

 

十进制转成其他进制

function diviceByBase(decNumber, base){

    var remStack = new Stack(),
rem,
baseString = '',
digits = '0123456789ABCDEF';//8进制是余数是(0-7)16进制是(0-9A-F) while(decNumber > 0){
rem = Math.floor(decNumber % base);
remStack.push(rem);
decNumber = Math.floor(decNumber / base);
} while(!remStack.isEmpty()){
baseString += digits[remStack.pop()];
} return baseString;
} console.log(diviceByBase(100345, 2)); // 11000011111111001
console.log(diviceByBase(100345, 8)); // 303771
console.log(diviceByBase(100345, 16)); // 187F9

  

  

  

JavaScript数据结构和算法----栈的更多相关文章

  1. javascript数据结构与算法---栈

    javascript数据结构与算法---栈 在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈 ...

  2. JavaScript数据结构与算法-栈练习

    栈的实现 // 栈类 function Stack () { this.dataStore = []; this.top = 0; // 栈顶位置 相当于length,不是索引. this.push ...

  3. Javascript数据结构与算法--栈的实现与用法

    栈数据结构 栈是一种遵从后进先出(LIFO)原则的有序集合.新添加的或者待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底. 我们在生活中常能看到栈的 ...

  4. javascript数据结构与算法——栈

    前言: 栈就是和列表类似的一种数据结构,不过栈的特点是'后人先出'.栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样操作很快,而且容易实现. 1. 栈的介绍: 栈是一种特殊的列表,栈内的 ...

  5. 为什么我要放弃javaScript数据结构与算法(第三章)—— 栈

    有两种结构类似于数组,但在添加和删除元素时更加可控,它们就是栈和队列. 第三章 栈 栈数据结构 栈是一种遵循后进先出(LIFO)原则的有序集合.新添加的或待删除的元素都保存在栈的同一端,称为栈顶,另一 ...

  6. 重读《学习JavaScript数据结构与算法-第三版》- 第4章 栈

    定场诗 金山竹影几千秋,云索高飞水自流: 万里长江飘玉带,一轮银月滚金球. 远自湖北三千里,近到江南十六州: 美景一时观不透,天缘有分画中游. 前言 本章是重读<学习JavaScript数据结构 ...

  7. JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)

    前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度. 我们应该多掌握一些可移值的技术或者再过十几年应该都不会过时的技术,数据结构与算法就是其中之一. 栈.队列.链表.堆 是数据结构与算法中的基 ...

  8. JavaScript 数据结构与算法之美 - 栈内存与堆内存 、浅拷贝与深拷贝

    前言 想写好前端,先练好内功. 栈内存与堆内存 .浅拷贝与深拷贝,可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScri ...

  9. javascript数据结构与算法---队列

    javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...

随机推荐

  1. Scala入门(1)Linux下Scala(2.12.1)安装

    Scala入门(1)Linux下Scala(2.12.1)安装 一.文件准备 1.1 文件名称 scala-2.12.1.tgz 1.2 下载地址 http://www.scala-lang.org/ ...

  2. maven入门(1-4)使用eclipse构建maven项目

    1. 安装m2eclipse插件    要用Eclipse构建Maven项目,我们需要先安装meeclipse插件    点击eclipse菜单栏Help->Eclipse Marketplac ...

  3. python xml.dom模块解析xml

    1. 什么是xml?有何特征? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 例子:del.xml <?xml version=&q ...

  4. NSURLSession使用, 后台下载

    现在越来越多的开发习惯于使用各种第三方框架,诚然,第三方框架给我们开发带来了很多便利,但我们不能太依赖于第三方,在使用第三方的同时学习其原理才是硬道理. 所以今天我们就来讲讲AFNetworking所 ...

  5. ubuntu 添加右键打开方式,无法添加程序打开方式

    最近把工作环境迁移到ubuntu,装了WPS for Linux ,说实话确实是十分良心啊!运行效率奇高,绿色无广告,并且和windows版本无异,感觉就可以抛弃自带的libreoffice了. 但是 ...

  6. springboot--mybatis--pagehelper分页整合不起作用

    今天配置pagehelper,在pom文件中都使用的最新版本jar包,步骤都没问题,之后才发现是包的问题. 有问题:分页配置不起作用 <dependency> <groupId> ...

  7. Go VS Code 调式常见问题处理

    GO VS Code 调式配置 launch.json{ "version": "0.2.0", "configurations": [ { ...

  8. JavaScript 字典(Dictionary)

    TypeScript方式实现源码 //  set(key,value):向字典中添加新元素. //  remove(key):通过使用键值来从字典中移除键值对应的数据值. //  has(key ...

  9. springcloud分布式事务终极探讨

    2018阿里云全部产品优惠券(好东东,强烈推荐)领取地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userC ...

  10. 智能合约开发solidity编程语言开发一个以太坊应用区块链投票实例

    智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战示例快速入门,用例子深入浅出智能合约开发,体会以太坊构建去中心化可信交易技术魅力.智能合约其实是"执行合 ...