javascript 实现数据结构 - 栈
栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。栈就好像是一个底部密封的盒子,我们往里面放东西,最先放进去的东西只能再最上面的东西都取出来之后才能取出,也就是所谓的先进后出。
一、采用构造函数法创建栈
function Stack(){
let items = []; //需要一种数据结构来保存栈里的元素,可以采用数组。
this.push = function (value){//向栈里添加数据
items.push(value);
};
this.pop = function(value){//向栈里删除数据
items.pop(value);
};
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());
};
};
let stack1 = new Stack();
console.log(stack1.isEmpty);//true
stack1.push(1);
stack1.push(2);
stack1.print();//1,2
二.优化 - 如何让外界无法访问到items数组,确保栈内数据插入顺序不被破坏。
1.引入WeakMap数据类型,WeakMap为Map的弱类型,必须用键才可以取出值。这些类没有entries、keys和values等迭代器方法,因此,除非你知道键,否则没有办法取出值。
2.闭包。
改写stack构造函数为
let Stack = (function () {
const items = new WeakMap();
const weak = {};
return function(){
items.set(weak, []);
this.push = function(value){
let arr = items.get(weak);
arr.push(value);
};
this.print = function(valule){
let arr = items.get(weak);
console.log(arr.toString());
}
//... 其它函数
};
})();
let stack1 = new Stack();
stack1.push(1);
stack1.push(3);
stack1.push(5);
stack1.print(); //1,3,5
三. ES6语法书写栈
let Stack = (function () {
const items = new WeakMap();
const weak = {};
class Stack1 {
constructor () {
items.set(this, []);
};
push(value){
let arr = items.get(this);
arr.push(value);
};
print(){
let arr = items.get(this);
console.log(arr.toString);
};
//... 其它函数
}
return Stack1
})();
javascript 实现数据结构 - 栈的更多相关文章
- javascript实现数据结构----栈
//栈是一种遵从后进先出原则的有序集合. //新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底 //在栈里,新元素都靠近栈顶,旧元素都叫做栈底 function Stack(){ va ...
- javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例
栈(Stack)是限定仅在表尾进行插入或删除操作的线性表.表尾为栈顶(top),表头为栈底(bottom),不含元素的空表为空栈. 栈又称为后进先出(last in first out)的线性表. 堆 ...
- JavaScript 版数据结构与算法(一)栈
今天,我们要讲的是数据结构与算法中的栈. 栈的简介 栈是什么?栈是一个后进先出(LIFO)的数据结构.栈有啥作用?栈可以模拟算法或生活中的一些后进先出的场景,比如: 十进制转二进制,你需要将余数倒序输 ...
- javascript数据结构——栈
栈是一种高效的数据结构,数据只能在栈顶添加或删除,所以这样操作很快,也很容易实现.栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用.接下来,用JavaScript实现一个栈的数据结构. ...
- JavaScript数据结构——栈的实现与应用
在计算机编程中,栈是一种很常见的数据结构,它遵从后进先出(LIFO——Last In First Out)原则,新添加或待删除的元素保存在栈的同一端,称作栈顶,另一端称作栈底.在栈中,新元素总是靠近栈 ...
- JavaScript 版数据结构与算法(二)队列
今天,我们要讲的是数据结构与算法中的队列. 队列简介 队列是什么?队列是一种先进先出(FIFO)的数据结构.队列有什么用呢?队列通常用来描述算法或生活中的一些先进先出的场景,比如: 在图的广度优先遍历 ...
- javascript中的栈、队列。
javascript中的栈.队列 栈方法 栈是一种LIFO(后进先出)的数据结构,在js中实现只需用到2个函数 push() 接受参数并将其放置 ...
- javascript实现数据结构:广义表
原文:javascript实现数据结构:广义表 广义表是线性表的推广.广泛用于人工智能的表处理语言Lisp,把广义表作为基本的数据结构. 广义表一般记作: LS = (a1, a2, ..., an ...
- javascript字典数据结构Dictionary实现
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...
随机推荐
- RCTF 2018线上赛 writeup
苦逼的RCTF,只进行了两天,刚好第二天是5.20,出去xxx了,没法打比赛,难受.比赛结束了,还不准继续提交flag进行正确校验了,更难受. 下面是本次ctf解题思路流程 后面我解出的题会陆续更新上 ...
- (二)Web应用体系结构
容器 Servlet没有main()方法,它们受控于另一个Java应用,这个Java应用称为容器(Container).我们最常见的tomcat就是这样一个容器. Web服务器应用(如Apache)得 ...
- 如果裸写一个goroutine pool
引言 在上文中,我说到golang的原生http server处理client的connection的时候,每个connection起一个goroutine,这是一个相当粗暴的方法.为了感受更深一点, ...
- 【Floyd】BZOJ1491: [NOI2007]社交网络
Description Solution n<=100自然联想Floyd 设两个数组d[n][n]存最短距离,t[n][n]存最短路径条数 更新d的时候顺便更新t,乘法原理 if(d[i][ ...
- 【线段树】Bzoj1798 [AHOI2009] 维护序列
Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ...
- BZOJ_2962_序列操作_线段树
Description 有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问 ...
- BZOJ_3262_陌上花开_CDQ分治+树状数组
BZOJ_3262_陌上花开_CDQ分治+树状数组 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的 ...
- 张高兴的 Windows 10 IoT 开发笔记:串口红外编解码模块 YS-IRTM
This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub: https://github.c ...
- kali下安装截图软件
安装截图软件 1.下载安装python-xlib apt-get install python-xlib 2.下载截图软件包 wget http://packages.linuxdeepin.com/ ...
- [译] PEP 255--简单的生成器
我正打算写写 Python 的生成器,然而查资料时发现,引入生成器的 PEP 没人翻译过,因此就花了点时间翻译出来.如果在阅读时,你有读不懂的地方,不用怀疑,极有可能是我译得不到位.若出现这种情况,我 ...