使用 JavaScript 实现栈
1.栈的基本操作
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];
};
//如果栈里没有任何元素就返回true,否则返回false
this.isEmpty = function() {
return items.length == 0;
};
//移除栈里的所有元素
this.clear = function() {
items = [];
};
//返回栈里的元素个数,和数组的length很像
this.size = function() {
return items.length;
};
//返回栈里的内容
this.print = function() {
//return items.toString();
return items;
};
}
使用该方法:
var stack = new Stack();
console.log(stack.isEmpty()); //true stack.push(1);
stack.push(3);
stack.push(5);
stack.push(7);
console.log(stack.peek()); //
console.log(stack.print()); //[1, 3, 5, 7]
console.log(stack.isEmpty()); //false
console.log(stack.size()); // console.log(stack.pop()); //
console.log(stack.peek()); //
console.log(stack.print()); // [1, 3, 5]
2.基于该方法实现十进制数转换为二进制数
//十进制转换为二进制
function divideBy2(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;
} var decNumber = 10;
console.log(decNumber + '转换为二进制数为:' + divideBy2(decNumber)); //10转换为二进制数为:1010
3.基于该方法实现十进制数转换为二/八/十六进制数
//十进制转换为任意进制
function baseConverter(decNumber, base) {
var remStack = new Stack(),
rem,
baseString = '',
digits = '0123456789ABCDEF'; 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;
} var decNumber = 552;
var base = 16;
console.log(decNumber + '转换为' + base + '进制数为:' + baseConverter(decNumber, base)); //552转换为16进制数为:228
使用 JavaScript 实现栈的更多相关文章
- 细数Javascript技术栈中的四种依赖注入
作为面向对象编程中实现控制反转(Inversion of Control,下文称IoC)最常见的技术手段之一,依赖注入(Dependency Injection,下文称DI)可谓在OOP编程中大行其道 ...
- 急速JavaScript全栈教程
3 天前 · 3k 次阅读 急速JavaScript全栈教程 javascript node.js mongodb 140 自从一年前发布了Vuejs小书的电子书,也有些日子没有碰过它们了,现在 ...
- JavaScript 全栈工程师培训教程 - 阮一峰
http://www.ruanyifeng.com/blog/2016/11/javascript.html https://github.com/ruanyf/jstraining 我现在的技术方向 ...
- JavaScript全栈教程
这是小白的零基础JavaScript全栈教程. JavaScript是世界上最流行的脚本语言,因为你在电脑.手机.平板上浏览的所有的网页,以及无数基于HTML5的手机App,交互逻辑都是由JavaSc ...
- “云”端的语雀:用 JavaScript 全栈打造商业级应用
作者| 不四(死马)蚂蚁金服 语雀产品技术负责人 语雀是什么? 语雀是一个专业的云端知识库,面向个人和团队,提供与众不同的知识管理,打造轻松流畅的工作协同,它提供各种格式的在线文档(富文本.表格.设 ...
- JavaScript实现栈结构(Stack)
JavaScript实现栈结构(Stack) 一.前言 1.1.什么是数据结构? 数据结构就是在计算机中,存储和组织数据的方式. 例如:图书管理,怎样摆放图书才能既能放很多书,也方便取? 主要需要考虑 ...
- 我的第一部原创《JavaScript 全栈开发》正式上市了!
在经过了漫长的创作.审校过程之后,<JavaScript 全栈开发>终于迎来了在各大平台上正式出版的日子,以下是这本书的基本信息: 出品方: 异步社区:https://www.epubit ...
- 数据结构与算法JavaScript (一) 栈
序 数据结构与算法JavaScript这本书算是讲解得比较浅显的,优点就是用javascript语言把常用的数据结构给描述了下,书中很多例子来源于常见的一些面试题目,算是与时俱进,业余看了下就顺便记录 ...
- JavaScript 全栈工程师培训教程(来自阮一峰)
来源于:https://twitter.com/ruanyf http://www.ruanyifeng.com/blog/2016/11/javascript.html 全栈工程师培训材料,帮助学习 ...
- 第四章:javascript: 栈
列表是一种最自然的数据组织方式.上一章已经介绍如何使用List类将数据组织成一个列表.如果数据存储的顺序不重要.也不必对数据进行查找,那么列表就是一种再好不过的数据结构.对于其它的一些应用,列表就显得 ...
随机推荐
- CSS3-html,样式与样式表的创建,选择器
- http://www.cnblogs.com/meiCode/p/5896239.html
http://www.cnblogs.com/meiCode/p/5896239.html
- 使用dSYM分析App崩溃日志
前言 我们在开发App过程中,因为连接到控制台,所以遇到问题会很容易找到问题代码.但是对于线上的App出现Crash的时候,我们不可能通过这种方式,也不现实,所以我们只能通过收集Crash信息,来解决 ...
- Python基础3- 变量与数字
1.Python变量不需要声明,其赋值操作既是变量声明和定义的过程;2.Python中每个变量在使用前都必须赋值,变量赋值后该变量才会被创建;3.Python变量是存储内存中的值,若变量赋值时内存中存 ...
- LightOJ1036 A Refining Company(DP)
题目大概说有一个n*m的格子地图,每个格子有铀或者镭矿.地图最北面的镭矿加工厂,最西面有铀矿加工厂,而要通过在格子里铺设由南向北(镭)或由东向西(铀)的轨道来送矿物到加工厂.一个格子只能铺设一种轨道, ...
- POJ3613 Cow Relays(矩阵快速幂)
题目大概要求从起点到终点恰好经过k条边的最短路. 离散数学告诉我们邻接矩阵的k次幂就能得出恰好经过k条路的信息,比如POJ2778. 这题也一样,矩阵的幂运算定义成min,而min满足结合律,所以可以 ...
- WPF中ComboBox用法
The ComboBox control is in many ways like the ListBox control, but takes up a lot less space, becaus ...
- ccc array
setInterval可以用来设置函数的执行频率 nodeList: { default:[], type:[cc.Node] } active 可以用来设置是否启用 cc.Class({ exten ...
- word 批量修改表格格式
For i = 1 To ActiveDocument.Tables.Count ActiveDocument.Tables(i).Cell(1, 1).Select With Selection . ...
- [译]使用Continuous painting mode来分析页面的绘制状态
Chrome Canary(Chrome “金丝雀版本”)目前已经支持Continuous painting mode,用于分析页面性能.这篇文章将会介绍怎么才能页面在绘制过程中找到问题和怎么利用这个 ...