数据结构:用JS实现栈
来源:互联网 发布:mac网游加速器 编辑:程序博客网 时间:2024/06/01 09:36
首先,我们先介绍一下数据结构栈的一些特点。
栈是一种遵从先进后出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫做栈底。
接下来,就是用JavaScript来完成栈的实现。
创建一个类来表示栈。
function Stack () {} //先声明这个类
接下来,我们需要一种数据结构来保存栈里的元素。这里选择数组来保存栈里的元素,方便下面实现栈内部方法。
var items = [];
当然,我们还需要为这个栈声明一些方法。
- push(element):添加一个新元素到栈顶。
- 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.size = function () { return items.length; }; //清除整栈 this.clear = function () { items = []; }; //输出栈内元素 this.print = function () { console.log( items.toString() ); }}
到这,我们会创建了一个栈。
下面,我再给大家介绍一个基于栈的一个算法
进制转换算法
首先,我们先来试试从十进制到二进制
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(); } retuan binaryString;}
我们拿10来走一遍程序是这样的
10 / 2 = 5 ->0
5 / 2 = 2 ->1
2 / 2 = 1 ->0
1 / 2 = 0.5 ->1
这时,栈里元素顺序和上面一样,输出时遵循先进后出原则为1010
然后我们把这个算法修改一下:从十进制到十六进制以内进制
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()]; } retuan baseString;}
这里只将进制控制在十六进制以内,余数是0到9之间的数字加上A(10)、B(11)、C(12)、D(13)、E(14)、F(15)。
我们通过digits字符串和栈内添加余数对应关系来实现。
同样,我们拿100345转换为十六进制来走一下程序:
100345 / 16 = 6271 ->9
6271 / 16 = 391 ->15
391 / 16 = 24 ->7
24 / 16 = 1 ->8
1 / 16 = 0 ->1
digits[9] = 9
digits[15]= F
digits[7] = 7
digits[8] = 8
digits[1] = 1 ->187F9
吼吼,栈就先到在这里了
喜欢的话就顶一下吧~
- 数据结构:用JS实现栈
- 数据结构:用JS实现队列
- 数据结构:用JS实现链表
- JS的基本数据结构实现---栈和队列
- 用数组实现js中的堆栈 或者队列数据结构
- Day-9 用js实现数据结构中的排序
- 数据结构:用JS模拟Set类的实现
- 数据结构-用数组实现栈
- 【数据结构】用栈实现迷宫
- 数据结构中的各种排序方法-JS实现
- JS的基本数据结构实现---线性表
- 数据结构--栈(js版)
- 用静态栈数据结构实现表达式求值
- 数据结构复习篇:用栈实现递归
- 数据结构复习篇:用栈实现递归
- 用静态数组实现栈数据结构
- 用两个栈实现队列[数据结构]
- 数据结构之栈(用list实现)
- 一个demo学会java
- Fragment生命周期
- 打开TensorBoard面板(MNIST)
- S5PV210-iROM-ApplicationNote-Preliminary的分析
- Linux-4.9.2内核在mini2440上的移植(十)——ADC驱动移植
- 数据结构:用JS实现栈
- 假的生命游戏
- 字符串处理分割字符串
- 内存中常见异常值的解释(比如0xcccccccc、0xcdcdcdcd和 0xfeeefeee 异常值)以及关于VC 中 debug和Release模式下的变量初始化问题
- C++ typeid操作符
- GUN和GPL的大概意思
- GROMACS运行参数之nvt.mdp文件详解
- 第四周项目三__单链表的应用(2)
- 注重医院患者院后随访提高医疗质量