前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript数据结构02 - 栈

JavaScript数据结构02 - 栈

作者头像
leocoder
发布2018-10-31 12:21:56
3670
发布2018-10-31 12:21:56
举报

一、定义

1.1 背景

通过前面一节《JavaScript数据结构01 - 数组》我们知道,可以在数组的任意位置上删除或添加元素。然而,有时候我们还需要一种在添加或删除元素时有更多控制的数据结构。

有两种数据结构类似于数组,但在添加和删除元素时更为可控。

它们就是栈和队列

1.2 概念

是一种遵循后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底

在栈里,新元素都靠近栈顶,旧元素都接近栈底。

栈也被用在编程语言的编译器和内存中保存变量、方法调用等,比如函数的调用栈。

二、栈的实现

2.1 创建一个类来表示栈

这里我还是用构造函数的形式来书写,大家有兴趣可以用ES6的Class来重写一遍。

// Stack类
function Stack () {
  this.items = [];

  this.push = push;
  this.pop = pop;
  this.peek = peek;
  this.isEmpty = isEmpty;
  this.clear = clear;
  this.size = size;
  this.print = print;
}
复制代码

栈里面有一些声明的方法:

  • push(element):添加一个(或几个)新元素到栈顶
  • pop():移除栈顶的元素,同时返回被移除的元素
  • peek():返回栈顶的元素,不对栈做任何修改
  • isEmpty():如果栈里没有任何元素就返回true,否则返回false
  • clear():移除栈里的所有元素
  • size():返回栈里的元素个数

2.2 实现栈中的辅助方法

// 添加新元素到栈顶
function push (element) {
  this.items.push(element);
}

// 移除栈顶元素,同时返回被移除的元素
function pop () {
  return this.items.pop();
}

// 查看栈顶元素
function peek () {
  return this.items[this.items.length - 1];
}

// 判断是否为空栈
function isEmpty () {
  return this.items.length === 0;
}

// 清空栈
function clear () {
  this.items = [];
}

// 查询栈的长度
function size () {
  return this.items.length;
}

// 打印栈里的元素
function print () {
  console.log(this.items.toString());
}
复制代码

2.3 创建实例进行测试

// 创建Stack实例
var stack = new Stack();

console.log(stack.isEmpty());     // true
stack.push(5);                    // undefined
stack.push(8);                    // undefined
console.log(stack.peek());        // 8
stack.push(11);                   // undefined
console.log(stack.size());        // 3
console.log(stack.isEmpty());     // false
stack.push(15);                   // undefined
stack.pop();                      // 15
console.log(stack.size());        // 3
stack.print();                    // 5,8,11
stack.clear();                    // undefined
console.log(stack.size());        // 0
复制代码

三、结束

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年07月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、定义
    • 1.1 背景
      • 1.2 概念
      • 二、栈的实现
        • 2.1 创建一个类来表示栈
          • 2.2 实现栈中的辅助方法
            • 2.3 创建实例进行测试
            • 三、结束
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档