算法通关村第四关——如何基于数组实现栈

1.栈的基础知识

1.1 栈的特征

栈(Stack):具有一定操作约束的线性表,只在一端(栈顶,Top)做插入(Push)、删除(Pop),不可操作的一端称为栈底(Bottom)。后进先出(Last In First Out, LIFO),若栈中没有元素则称为空栈。

在这里插入图片描述

  • 栈的顺序存储实现(基于数组):栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成。
  • 栈的链式存储实现(基于链表):栈的链式存储结构实际就是一个单链表,叫做链栈。插入和删除操作只能在链栈的栈顶进行。Top只能在链表首端。

栈可以用于表达式求值,如后缀表达式求值、中缀表达式求值、函数调用及递归实现、深度优先搜索、回溯算法等

栈的常用操作主要有:

  • push(E):增加一个元素E
  • pop():弹出一个栈顶元素
  • peek():显示栈顶元素,但是不出栈
  • empty():判断栈是否为空

在设计栈时,不管用数组还是链表,都需要实现上面几个方法。

2.JavaScript中基于数组实现栈

代码如下:

const stack = []; // 新建一个数组
// 如果规定数组尾端为栈顶,首端为栈底
// 用下面几个方法实现后进先出的规定

stack.push(); // 将指定的元素添加到数组的末尾,并返回新的数组长度
stack.pop(); // 从数组中删除最后一个元素,并返回该元素的值
satck.at(-1) // 返回数组末尾元素
// 判断是否为空栈
let isEmpty = function(stack) {
	if (stack.length === 0) return false;
    else return true;
}

// 此外,JavaScript的数组类型还有下面的方法
stack.shift(); // 从数组中删除第一个元素,并返回该元素的值
stack.unshift(); // 将指定元素添加到数组的开头,并返回数组的新长度

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值