JavaScript数据结构-栈
栈
栈是一种遵循后入先出(LIFO,全称Last In First Out)的数据结构,是一种运算受限的线性表,其限制是仅允许在表的一端进行操作,这一端被称之为栈顶。
由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问,如果要访问栈底的元素,必须先移除上面的元素。
栈的实现
在JavaScript中,采用数组座位存储数据的底层数据结构。
定义Stack构造函数
function Stack(){ this.items = []; }
栈具有以下方法
- push() 进栈
- pop() 退栈
- size() 栈大小
- empty() 判断栈是否为空
- peek() 返回栈顶元素
- clear() 清空栈
push
向栈中压入新元素时,元素位于当前栈顶指针所对应的位置,压入后,栈顶指针应指向下一个位置
function push(item){ this.items[this.top++] = item; }
pop
pop与push方法相反,返回栈顶元素,同时top的值减1
function pop(){ if(this.top===0) return; var item = this.items[this.top-1] this.items.length = --this.top; return item; }
size
size方法返回栈内的元素个数
function size(){ return this.top; }
empty
检查栈是否为空,为空则返回true,否则返回false
function empty(){ return this.top === 0; }
peek
返回栈顶元素
function peek(){ return this.items[this.top-1]; }
clear
清空栈内所有元素
function clear(){ this.items = []; this.top = 0; }
给栈添加方法
利用原型将以上方法添加给Stack构造函数
Stack.prototype = { constructor:Stack, push:push, pop:pop, size:size, empty:empty, peek:peek, clear:clear, }
栈的实际应用
下面是一个递归函数,用来计算数字的阶乘
function factorial(n) { if (n === 0) { return 1; } else { return n * factorial(n - 1); } }
使用该函数计算5的阶乘
factorial(5) // 120
如果使用栈来模拟计算5!的过程,将5到1依次压入栈,然后再将数字依次弹出连乘,即可得到计算结果
function factorial2(n){ var s = new Stack(), result = 1; while(n>1){ s.push(n--) } while(s.size()>0){ result*= s.pop() } return result; }
使用该函数计算5的阶乘
factorial(5) // 120
相关推荐
-
typeScript之基础类型 javascript/jquery
2020-7-16
-
初探 amaze-vue( 基于vue.js封装的Amaze UI 组件库) javascript/jquery
2020-6-9
-
用100行代码,完成自己的前端构建工具! javascript/jquery
2019-5-25
-
深度理解Hook规则 javascript/jquery
2020-5-18
-
厌倦了写活动页?快来撸一个页面生成器吧! javascript/jquery
2019-3-7
-
(Demo分享)利用原生JavaScript-ScrollLeft-实现做轮播广告通知 javascript/jquery
2019-9-13
-
每日 30 秒 ⏱ 一个简单的 HTTP 客户端请求工具 javascript/jquery
2019-3-24
-
PHP 执行mysql insert插入的数据过长时,使用array_chunk()进行切割 javascript/jquery
2020-6-26
-
荐书 | OPPO互联网技术团队的书单(内含赠书福利) javascript/jquery
2020-6-11
-
压缩和混淆node.js服务端代码 javascript/jquery
2020-5-27