javaScrip数据结构栈

本文详细介绍了栈这一数据结构的概念,遵循先进后出的原则。通过数组和对象两种方式展示了栈的实现,包括push、pop、peek、isEmpty、clear和size等基本操作。数组实现简单直观,而对象实现则提供了更快的查找效率。栈在信息技术中有着广泛的应用,如括号匹配、深度优先搜索等。
摘要由CSDN通过智能技术生成

文章目录

  • 概念

    栈可以在删除添加时进行更多的控制,先进后出 (LIFO) 原则的有序集合,新添加或可删除的一端叫栈顶,另一端叫栈底。

  • 实现

    要实现一个最简单的栈,需要先创建一个栈容器,该容器具有长度,可以用数组,对象,Map实现,还需要实现以下几个功能:

    push():添加新元素到栈顶。

    pop():移除栈顶的元素。

    peek():返回栈顶的元素,不修改。

    isEmpty():判断栈是否null。

    clear():清空栈。

    size():返回栈长度。

    • 数组实现

       class Stack {
              constructor() {
                  this.items = []; // 栈容器
              }
              push(elements) {
                  return this.items.push(elements);
              }
              pop() {
                  return this.items.pop();
              }
              peek() {
                  return this.items[this.items.length - 1];
              }
              isEmpty() {
                  return this.items.length === 0;
              }
              clear() {
                  this.items = [];
              }
              size() {
                  return this.items.length;
              }
          }
      
    • 对象实现

      在使用数组实现时,大部分方法的 时间复杂度都为O(n),即为迭代整个数组直到找到需要的元素,n 代表数组的长度,数组是一个有序集合,为保证排序有效,会占用更多内存。

          class StackObj {
              constructor() {
                  this.items = {}; // 栈容器
                  this.count = 0; // 栈当前长度
              }
              push(elements) {
                  if (arguments.length === 1){
                      this.items[this.count] = elements;
                  } else {
                      for (let key in arguments) {
                          this.items[this.count] = arguments[key];
                          this.count++;
                      }
                      return this.items;
                  }
                  this.count++;
                  return this.items;
              }
              pop() {
                  if (this.isEmpty()) {
                      return console.log('栈为空');
                  }
                  this.count--;
                  let ele = this.items[this.count];
                  delete this.items[this.count];
                  return ele;
              }
              peek() {
                  return this.items[this.count - 1];
              }
              isEmpty() {
                  return this.count === 0;
              }
              clear() {
                  this.items = {};
                  this.count = 0;
              }
              size() {
                  return this.count;
              }
          }
          let newStackObj = new StackObj();
          newStackObj.push(3,4,5);
          newStackObj.pop();
      

      使用对象创建栈的方法时间复杂度都为 O(1),表示可以直接找到目标元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值