javascript构造一个Stack数据结构

stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in, first out)。
分析stack的特点:

  • push:在最顶层加入数据。
  • pop:返回并移除最顶层的数据。
  • top:返回最顶层数据的值,但不移除它。
/**
 * @file Stack.js
 * @desc 用js实现stack数据结构
 *
 * *************************
 * 用法:
 *  var stack = new Stack();
 *  stack.push([1,2,3]);
 *  stack.push('xxxxx');
 *  var all = stack.displayAll();
 *  console.log(all);
 *
 * *************************
 */

function Stack() {

    // 返回最后插入的一个数据
    this.top = null;

    // 返回栈内数据的长度
    this.size = 0;
}

Stack.prototype = {
    constructor: Stack,

    // 插入一个数据,放在栈的最后一个位置
    push: function (data) {
        var node = {
            data: data,
            next: null
        };
        node.next = this.top;
        this.top = node;
        this.size++;
    },

    // 返回最后的一个数据
    peek: function () {
        return this.top === null ? null : this.top.data;
    },

    // 从栈里取出最后的一个数据,与peek的区别:peek只读取,pop返回并移除最顶层的数据
    pop: function () {
        if (this.top === null) return null;
        var out = this.top;
        this.top = this.top.next;
        if (this.size > 0) this.size--;
        return out.data;
    },

    // 清楚栈内的数据
    clear: function () {
        this.top = null;
        this.size = 0;
    },

    // 显示站内的所有数据
    displayAll: function () {
        if (this.top === null) return null;
        var arr = [];
        var current = this.top;
        for (var i = 0, len = this.size; i < len; i++) {
            arr[i] = current.data;
            current = current.next;
        }
        return arr;
    }
};


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 声明:算法和数据结构的文章均是作者从github上翻译过来,为方便大家阅读。如果英语阅读能力强的朋友,可以直接到s...
    UnsanYL阅读 1,567评论 0 2
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,268评论 0 4
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,760评论 18 399
  • 嘿,同学,你好! 那是我们的第一句话。 多年以后的我们分布在城市两端,你在北方流浪,而我却不在南方等你回来...
    暖暖瓦力爱伊娃阅读 451评论 0 1
  • 今天几乎一整天都在看孩子做家务,真心没时间学习。但是不甘心啊,所以断断续续完成421-500的圆周率数值绘图。 昨...
    世界记忆大师程程阅读 694评论 0 0