4、js数据结构与算法之栈

本文介绍了栈这种后入先出的数据结构,详细阐述了栈的基本操作如push、pop和peek,并通过JavaScript代码展示了如何实现这些操作。栈在表达式求值和函数调用等场景中有广泛应用。此外,还提供了创建和操作栈的示例。

1、前言
栈是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题。栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现。栈的使用遍布程序语言实现的方方面面,从表达式求值到处理函数调用。

2、对栈的操作
   由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元素,必须先拿掉上面的元素。
对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。入栈使用push() 方法,出栈使用pop() 方法。
另一个常用的操作是预览栈顶的元素。pop() 方法虽然可以访问栈顶的元素,但是调用该方法后,栈顶元素也从栈中被永久性地删除了。peek() 方法则只返回栈顶元素,而不删除它。

2、实列
    存储数据的底层数据结构

//当向栈中压入一个新元素时,需要将其保存在数组中变量top 所对应的位置,然后将top 值加1,让其指向数组中下一个空位置
function push(element) {
    this.dataStore[this.top++] = element;
}
//返回栈顶元素,同时将变量top 的值减1
function pop() {
    return this.dataStore[--this.top];
}
//返回数组的第top-1 个位置的元素,即栈顶元素
function peek() {
    return this.dataStore[this.top-1];
}
//length() 方法通过返回变量top 值的方式返回栈内的元素个数:
function length() {
    return this.top;
}
//可以将变量top 的值设为0,轻松清空一个栈
function clear() {
    this.top = 0;
}
 
//数组dataStore 保存栈内元素,构造函数将其初始化为一个空数组。变量top 记录栈顶位置,被构造函数初始化为0,表示栈顶对应数组的起始位置0。如果有元素被压入栈,该变量的值将随之变化
function Stack() {
    this.dataStore = [];
    this.top = 0;
    this.push = push;
    this.pop = pop;
    this.peek = peek;
    this.clear = clear;
    this.length = length;
}
 
var s = new Stack();
s.push("David");
s.push("Raymond");
s.push("Bryan");
//length: 3
console.log("length: " + s.length());
//Bryan
console.log(s.peek());
 
var popped = s.pop();
//The popped element is: Bryan
console.log("The popped element is: " + popped);
//Raymond
console.log(s.peek());
s.push("Cynthia");
//Cynthia
console.log(s.peek());
s.clear();
//length: 0
console.log("length: " + s.length());
//undefined
console.log(s.peek());
s.push("Clayton");
//Clayton
console.log(s.peek());
参考书籍:数据结构与算法JavaScript描述

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树leetcode-栈与队列227-基本计算器 II4932 人正在系统学习中

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值