js实现栈
栈是一种先进后出的特殊线性表结构,存储上分链式存储和顺序存储两种方式

链式存储:
function LinkedStack() {
    let Node = function (ele) {
        this.ele = ele;
        this.next = null;
    }
    let length = 0,
        top; //栈顶指针
    //压栈操作
    this.push = function (ele) {
        let node = new Node(ele);
        top ? node.next = top : top = node;
        top = node;
        length++;
        return true;
    }
    //退栈操作
    this.pop = function () {
        let current = top;
        if (top) {
            top = current.next;
            current.next = null;
            length--;
            return current;
        } else {
            return 'null stack';
        }
    }
    this.top = function () {
        return top;
    }
    this.size = function () {
        return length;
    }
    //toString 从栈顶到栈底
    this.toString = function () {
        let string = '';
        current = top;
        while (current) {
            string += current.ele + ' ';
            current = current.next;
        }
        return string;
    }
    this.clear = function () {
        top = null;
        length = 0;
        return true;
    }
}
//使用
let myStack = new LinkedStack();
myStack.push('1')
myStack.push('2')
myStack.push('3')
myStack.push('4')
console.log(myStack.toString()) // 4 3 2 1
myStack.pop()
console.log(myStack.toString()) // 3 2 1
myStack.pop()
myStack.pop()
console.log(myStack.pop()) // Node { ele: '1', next: null }
console.log(myStack.pop()) // null stack
顺序存储:用js内置对象Array实现
function ArrayStack(){
    var arr = [];
        //压栈操作
    this.push = function(element){
        arr.push(element);
    }
        //退栈操作
    this.pop = function(){
        return arr.pop();
    }
        //获取栈顶元素
    this.top = function(){
        return arr[arr.length-1];
    }
        //获取栈长
    this.size = function(){
        return arr.length;
    }
        //清空栈
    this.clear = function(){
        arr = [];
        return true;
    }  
    this.toString = function(){
        return arr.toString();
    }
}  
js实现栈的更多相关文章
- Flask Vue.js全栈开发
		
Flask Vue.js全栈开发的 最新完整代码 及使用方式 本系列的最新代码及使用方式将持续更新到: http://www.madmalls.com/blog/post/latest-code/ 1 ...
 - js模拟栈
		
栈:先入后出,后入先出 链表:先入先出,后入后出 下面使用js实现栈 var Stack = (function(){ var items = new WeakMap(); //先入后出,后入先出 c ...
 - Node.js最新技术栈之Promise篇
		
前言 大家好,我是桑世龙,github和cnodejs上的i5ting,目前在天津创业,公司目前使用技术主要是nodejs,算所谓的MEAN(mongodb + express + angular + ...
 - 【Todo】React & Nodejs学习 &事件驱动,非阻塞IO & JS知识栈:Node为主,JQuery为辅,Bootstrap & React为辅辅,其他如Angular了解用途即可
		
JS知识栈:Node为主,JQuery为辅,Bootstrap & React为辅辅,其他如Angular了解用途即可 今天在学习ReactJS和NodeJS,看到关于ReactJS的这篇文章 ...
 - 数据结构与算法 --- js描述栈
		
js描述栈及栈的使用 栈的特性就是只能通过一端访问,这一段就是叫做栈顶.咖啡馆内的一摞盘子就是最形象的栈的例子: 根据栈的特性,就可以定义栈的一些特殊属性和方法;用js的描述栈的时候底层数据结构用的是 ...
 - js模拟栈---汉诺塔
		
var Stack = (function(){ var items = new WeakMap(); //先入后出,后入先出 class Stack{ constructor(){ items.se ...
 - Node.js 全栈开发(一)——Web 开发技术演化
		
这些年一直不断接触学习 Node 技术栈,个人的技术开发学习兴趣也越来越倾向 node 流.也许是由于英语的关系,也许是因为墙增加了学习国外一手资料的难度,加上现在流行的 web 开发技术并不太容易上 ...
 - [js]数组栈和队列操作
		
写在前面 在项目中,对数组的操作还是比较常见的,有时候,我们需要模拟栈和队列的特性才能实现需求,这里记录一下这个知识点. 栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一 ...
 - js 实现栈的结构
		
js实现一个栈的数据结构 首先了解一下什么是栈,栈是一个后进先出的一种数据结构,执行起来效率比较高. 对于栈主要包括一些方法,弹出栈pop(),弹出栈顶元素,并删除该元素:压入栈push(),向栈中压 ...
 
随机推荐
- 性能测试工具Locust的介绍和使用
			
内容来自网络 https://www.w3xue.com/exp/article/20191/16707.html https://blog.csdn.net/qq_36255988/article/ ...
 - 贪心——Prim算法(避圈法)
			
1.简介 Prim算法是图论中的一种算法,可在带权连通图里搜索产生最小生成树. 该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(Vojtěch Jarník)发现:并在1957年由美国计算机科学家罗 ...
 - Python strip()函数用法
			
Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数: strip 同时去掉左右两边的空格lstrip 去掉左边的空格rstrip 去掉右边的空格 具体示 ...
 - Python3安装使用SaltStack以及salt-api详解
			
序言 最近在使用salt-api做主机批量管理部署,整理一下文档.之前使用saltstack 多用于命令行管理,自己做web版的自动化管理平台时,发现命令行的些许局限性,接触到salt-api,找到了 ...
 - django中多个app放入同一文件apps
			
新建一个apps文件夹 需要整理的app文件夹拖到同一个文件夹中,即apps.(弹出对话框,取消勾选Search for references) 在pycharm中,右键apps文件夹--选择mark ...
 - 获取指定<文字行数>的<高度>是多少  TextKit
			
- (CGSize)maxLineSizeWithLines:(NSInteger)lines constraintSize:(CGSize)size attributes:(NSDictionary ...
 - tomcat增加运行内存
			
内容为: set JAVA_OPTS=%JAVA_OPTS% -server -Xms2048m -Xmx2048m -XX:PermSize=212M -XX:MaxPermSize=512m 在m ...
 - odoo 的字段。orm对象
			
OpenERP ORM 对象方法列表 OpenERP对象支持的字段类型有,基础类型:char, text, boolean, integer, float, date, time, datetim ...
 - mybatis中调用游标,存储过程,函数
			
在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...
 - easygui.py的安装和下载地址
			
easygui下载地址:http://nchc.dl.sourceforge.net/project/easygui/0.97/easygui-0.97.zip 安装:解压后将easygui.py拷贝 ...