学习Javascript数据结构与算法系列笔记(二):栈
来源:互联网 发布:使用ping命令测试网络 编辑:程序博客网 时间:2024/05/16 09:56
栈是一种遵从后进先出(lifo)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,顶一端叫做栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
栈也被用在编程语言的编译器和内存中保存变量、方法调用等。
1.栈的创建
声明类
function Stack(){ //Declarations of various properties and functions}
选择一种数据结构来保存栈里的元素—–数组
var items = [];
为栈声明一些方法
push(ele): 添加一个(或几个)新元素到栈顶。
pop(): 移除栈顶的元素,同时返回被移除的元素。
peek(): 返回栈顶的元素。
isEmpty(): 如果栈为空则返回true,反之返回false。
clear(): 移除栈里的所有元素。
size(): 返回栈里的元素个数。
完整代码
function Stack(){ var items = []; //add new elements to stackTop this.push = function(ele){ items.push(ele); }; //remove elements of stackTop and return this elements this.pop = function(){ return items.pop(); }; //return elements of stackTop this.peek = function(){ return items[items.length - 1]; }; //judge the stack is empty this.isEmpty = function(){ return items.length == 0; }; //clear the stack this.clear = function(){ items = []; }; //return the stack's length this.size = function(){ return item.length; }; //console this.print = function(){ console.log(items.toString); };}
使用Stack类
初始化
判断是否为空
添加元素
调用peek方法
调用size方法
输出stack
var stack = new Stack();console.log(stack.isEmpty()); //truestack.push(5);stack.push(8);console.log(stack.peek()); //8stack.push(11);console.log(stack.size()); //3console.log(stack.isEmpty()); //falsestack.push(15);stack.pop();stack.pop();console.log(stack.size()); //2stack.print(); //[5, 8]
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;}
在这段代码里,当结果满足和2做整除的条件时,我们会获得当前结果和2的余数,放到栈里。然后让结果和2做整除。另外请注意: JavaScript有数字类型,但是它不会区分究竟是整数还是浮点数。因此,要使用Math.floor函数让除法的操作仅返回整数部分。最后,用pop方法把栈中的元素都移除,把出栈的元素变成连接成字符串。
修改上述代码,改为10进制与任一进制转换
function baseConverter(decNumber, base) { var remStack = new Stack(), rem, digits = '0123456789ABCDEF'; //数字转换 取索引值 baseString = ''; while (decNumber > 0) { rem = Math.floor(decNumber % base); remStack.push(rem); decNumber = Math.floor(decNumber / base); } while (!remStack.isEmpty()) { binaryString += digits[remStack.pop()]; } return binaryString;}
栈章节结束~~ヾ(◍°∇°◍)ノ゙
下一节队列~~~
阅读全文
0 0
- 学习Javascript数据结构与算法系列笔记(二):栈
- 学习Javascript数据结构与算法系列笔记(一):数组
- 学习Javascript数据结构与算法系列笔记(三):集合
- 学习JavaScript数据结构与算法(二)——栈
- 学习笔记之数据结构与算法(二)
- 数据结构与算法分析 学习笔记(二)
- python学习笔记(二)数据结构与算法
- 学习JavaScript数据结构与算法(一):栈与队列
- 数据结构与算法笔记:二
- 《数据结构与算法分析》学习笔记二:树
- 数据结构与算法学习笔记(二)反转链表
- 《数据结构与算法分析java语言描述》学习笔记二
- 算法与数据结构学习二
- 学习JavaScript数据结构与算法(七)——散列表(二)
- 前端学习总结(二十二)——常见数据结构与算法javascript实现
- 学习笔记:数据结构(二)栈与队列
- 《数据结构与算法分析--C++描述》(第三版)学习笔记系列一:BST的实现
- 算法与数据结构学习笔记系列——递归(1)
- ThinkPHP中方法中的变量名不要跟方法名一致,否则查询会失败
- Java 中的引用
- 动手实操(二) | 作为一名美女设计师,她用 6 小时写了个上传七牛云的桌面客户端
- 在MyEclipse中更换或修改svn的用户名和密码
- 【R和Python对比】matplotlib和ggplot(一)
- 学习Javascript数据结构与算法系列笔记(二):栈
- 如何写出健壮的Java代码
- Rendering Problems Exception raised during rendering:
- Character Detection and Recognition 1-MSER
- IDHTTP中文乱码问题
- 简单的导航分页效果
- linux操作系统操作MySQL常用命令
- 最接近的三数之和 _LintCode
- 3105: [cqoi2013]新Nim游戏