JavaScript数据结构与算法—— 栈
栏目: JavaScript · 发布时间: 6年前
内容简介:我们可以在数组的任何位置上删除或者添加元素,但有时候我们还需要在元素的添加或删除时有更多控制的数据结构,有两种数据结构类似于数组,但在添加或删除元素时更为可控,它们就是栈和队列。本节主要介绍栈。栈是一种遵循后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的同一端,叫做栈顶,另一端叫栈底。在栈中,新元素靠近栈顶,旧元素接近栈底。如下图所示:
我们可以在数组的任何位置上删除或者添加元素,但有时候我们还需要在元素的添加或删除时有更多控制的数据结构,有两种数据结构类似于数组,但在添加或删除元素时更为可控,它们就是栈和队列。
本节主要介绍栈。
1.栈数据结构
栈是一种遵循后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的同一端,叫做栈顶,另一端叫栈底。在栈中,新元素靠近栈顶,旧元素接近栈底。如下图所示:
2.创建栈
// 首先创建一类表示栈
function Stack(){
let items = []; // 选择数组来保存栈中的元素
//各种属性和方法
}
下面要为栈声明一些方法:
push() // 添加一个或多个新元素到栈顶 pop() // 移除栈顶元素,同时返回被移除的元素 peek() // 仅仅返回栈顶元素,不对栈做任何修改 isEmpty() // 如果栈中没有元素返回true,否则返回false clear() // 移除栈中所有元素 size() // 返回栈中元素的个数(和数组length类似)
2.1 向栈添加元素
this.push() = function(element) {
items.push(element);
}
2.2 从栈移除元素
this.pop = function() {
items.pop();
}
2.3 查看栈顶元素
this.peek = function() {
return items[items.length - 1];
}
2.4 查看栈是否为空
this.isEmpty = function(){
return items.length === 0;
}
this.size = function() {
return items.lenght;
}
2.5 清空和打印栈元素
this.clear = function() {
items = [];
}
this.print = function() {
console.log(items.toString());
}
经过上述的方法的添加,我们就完整的创建了一了个栈 Stack。
3.栈的应用—十进制转N进制
首先我们写出将十进制转为二进制:
function divideBy2(decNum) {
var remStack = new Stack(),
rem,
binaryString = '';
// 将十进制数除2的余数放入一个stack中
while(decNum > 0) {
// 取余
rem = Math.floor(decNum % 2);
// 入栈
remStack.push(rem);
decNum = Math.floor(decNum / 2);
}
// 从栈中取出转化为字符串然后连接起来构成二进制
while(!remStack.isEmpty()) {
// 出栈
binaryString += remStack.pop().toString();
}
return binaryString;
}
下面十进制转化N进制算法
function divideByN(decNum, n) {
var remStack = new Stack(),
rem,
binaryString = '',
digits = '0123456789ABCDEF';
// 将十进制数除N的余数放入一个stack中
while(decNum > 0) {
// 取余
rem = Math.floor(decNum % n);
// 入栈
remStack.push(rem);
decNum = Math.floor(decNum / n);
}
// 从栈中取出转化为字符串然后连接起来构成二进制
while(!remStack.isEmpty()) {
// 出栈 使用digits方便在16进制中做个对应转化
binaryString += digits[remStack.pop()];
}
return binaryString;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 算法与数据结构之递归算法
- Python 数据结构与算法 —— 初识算法
- js实现数据结构及算法之排序算法
- 数据结构和算法面试题系列—递归算法总结
- 数据结构和算法面试题系列—随机算法总结
- 数据结构与算法——常用排序算法及其Java实现
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JUnit Recipes中文版
陈浩等译 / 电子工业 / 2006-9 / 69.00元
《JUnit Recipes中文版:程序员实用测试技巧》主要介绍了在Java开发中使用JUnit进行单元测试的各种方法、原则、技巧与实践。本书出自开发一线专家之手,本着实用的原则,涵盖各类Java开发中应用JUnit的实用技巧,内容丰富、全面深入;无论对于需要应用JUnit进行单元测试的一线Java开发人员,还是JUnit入门、进阶者,本书都是一本不可多得的实用指南。这本书介绍了大量的JUnit实......一起来看看 《JUnit Recipes中文版》 这本书的介绍吧!