JavaScript数据结构与算法Item2--栈
2016-09-27 11:00
721 查看
栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的
末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
接下来,要为我们的栈声明一些方法。
push(element(s)):添加一个(或几个)新元素到栈顶。
pop():移除栈顶的元素,同时返回被移除的元素。
peek():返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返回它)。
isEmpty():如果栈里没有任何元素就返回true,否则返回false。
clear():移除栈里的所有元素。
size():返回栈里的元素个数。这个方法和数组的length属性很类似。
现实生活中,我们主要使用十进制。但在计算科学中,二进制非常重要,因为计算机里的所
有内容都是用二进制数字表示的(0和1)。没有十进制和二进制相互转化的能力,与计算机交流
就很困难。
转成二进制数,还可以传入其他任意进制的基数为参数,就像下面算法这样:
末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
1 栈的创建
首先,我们需要一种数据结构来保存栈里的元素。可以选择数组:var items = [];
接下来,要为我们的栈声明一些方法。
push(element(s)):添加一个(或几个)新元素到栈顶。
pop():移除栈顶的元素,同时返回被移除的元素。
peek():返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返回它)。
isEmpty():如果栈里没有任何元素就返回true,否则返回false。
clear():移除栈里的所有元素。
size():返回栈里的元素个数。这个方法和数组的length属性很类似。
function Stack(){ var items = []; this.push = function(element){ //入栈 return 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.size = function(){ //栈长 return items.length; } this.print = function(){ //栈输出 console.log(items.toString()); } } var stack = new Stack(); console.log(stack.isEmpty()); stack.push(1); stack.push(2); stack.push(3); console.log(stack.peek()); console.log(stack.pop()); console.log(stack.size()); stack.print();
2 从十进制到二进制
学会了如何使用Stack类,现在就用它解决一些计算机科学中的问题。现实生活中,我们主要使用十进制。但在计算科学中,二进制非常重要,因为计算机里的所
有内容都是用二进制数字表示的(0和1)。没有十进制和二进制相互转化的能力,与计算机交流
就很困难。
// 栈的使用实例一:十进制转二进制(带余除法) function DataTansfer(num){ var stack = new Stack(), yushu, result = ''; while(num>0){ yushu = Math.floor(num % 2); stack.push(yushu); num = Math.floor(num/2); } while(!stack.isEmpty()){ result += stack.pop().toString(); } return result; } console.log(divideBy2(233)); //输出11101001 console.log(divideBy2(10)); //输出1010 console.log(divideBy2(1000)); //输出1111101000
3 任意进制间的转换
我们很容易修改之前的算法,使之能把十进制转换成任何进制。除了让十进制数字和2整除转成二进制数,还可以传入其他任意进制的基数为参数,就像下面算法这样:
// 栈的使用实例二:实现任何进制数的转换 function DataTansfer(num,base){ var stack = new Stack(), yushu, digitals = '0123456789ABCDEF', result = ''; while(num>0){ yushu = Math.floor(num % base); stack.push(yushu); num = Math.floor(num/base); } while(!stack.isEmpty()){ result += digitals[stack.pop()]; } return result; } console.log(DataTansfer(10010,2)); console.log(DataTansfer(10010,8)); console.log(DataTansfer(10010,10)); console.log(DataTansfer(10010,16));
相关文章推荐
- JavaScript数据结构与算法Item4--链表
- JavaScript数据结构与算法Item1--数组
- JavaScript数据结构与算法Item3--队列
- 数据结构与算法JavaScript (二) :队列
- JavaScript中数据结构与算法(二):队列
- JavaScript描述数据结构与算法——队列
- 数据结构与算法JavaScript - 列表
- JavaScript中数据结构与算法(四):串(BF)
- 散列表的实现 -- 数据结构与算法的javascript描述 第八章
- javascript数据结构与算法 零(前记+前言)
- 数据结构与算法JavaScript (二) 队列
- Javascript数据结构与算法---数组
- JavaScript中数据结构与算法(五):经典KMP算法
- JavaScript中数据结构与算法(五):经典KMP算法
- JavaScript描述数据结构与算法——列表
- javascript数据结构与算法--散列
- JavaScript中数据结构与算法(三):链表
- javascript数据结构与算法之检索算法
- JavaScript数据结构与算法之栈与队列
- JavaScript数据结构与算法之链表