当前位置: 首页 > news >正文

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本:

  1. 最后放进去的元素最先出来
    -想象往筒状容器里放盘子:
    (1)你放进的最后一个盘子(最新放的)会放在最顶部
    (2)当你要取盘子时,只能从顶部开始取
    (3)最后放进去的盘子最先被取出
  2. 与栈(Stack)的关系
    -LIFO 是栈结构的核心特性
    -JavaScript 的调用栈(Call Stack) 就是典型栈结构
    -操作示例:
// 模拟栈操作
const stack = [];
// 入栈 (push)
stack.push("任务1"); // 栈底 ["任务1"]
stack.push("任务2"); // ["任务1", "任务2"]
stack.push("任务3"); // ["任务1", "任务2", "任务3"] ← 栈顶// 出栈 (pop) - 遵循LIFO
console.log(stack.pop()); // "任务3" (最后进的先出)
console.log(stack.pop()); // "任务2"
console.log(stack.pop()); // "任务1"
  1. 调用栈中的 LIFO 实例
function A() {console.log("进入A");B();  // 调用B函数console.log("离开A");
}function B() {console.log("进入B");C();  // 调用C函数console.log("离开B");
}function C() {console.log("进入C");console.log("离开C");
}A(); // 启动调用

执行顺序(LIFO 体现):

1. A() 入栈 → 栈:[A]
2. B() 入栈 → 栈:[A, B]
3. C() 入栈 → 栈:[A, B, C]
4. C() 执行完出栈 → 栈:[A, B]
5. B() 执行完出栈 → 栈:[A]
6. A() 执行完出栈 → 栈:[]

输出结果:

进入A
进入B
进入C
离开C
离开B
离开A
  1. LIFO vs FIFO(先进先出)
特性LIFO(栈)FIFO(队列)
取出顺序最后进的先出最先进的先出
典型场景函数调用栈、撤销操作排队系统、消息队列
操作方式push() / pop()push() / shift()
类比叠盘子(从顶部取)排队(先到的人先离开)
  1. 为什么调用栈需要 LIFO?
  • 保证函数嵌套调用的正确性
  • 确保内层函数执行完后能正确返回到外层函数
  • 通过栈指针高效管理执行上下文
  • 避免内存泄漏(自动清理已执行函数的上下文)

关键理解:在 JavaScript 引擎中,每次函数调用都会创建一个新的栈帧(Stack Frame)压入调用栈顶部,函数执行结束时栈帧会从栈顶弹出。正是 LIFO 特性确保了函数执行的嵌套顺序和上下文完整性。

http://www.xdnf.cn/news/962425.html

相关文章:

  • [科研理论]无人机底层控制算法PID、LQR、MPC解析
  • 土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测技术应用
  • OOM模拟排查过程记录
  • 火山引擎大模型系列可以用来作什么
  • TDengine 快速体验(云服务方式)
  • ceph集群调整pg数量实战(上)
  • TikTok矩阵养号实战:住宅IP纯净度与设备指纹联动方案
  • 空间注意力机制
  • uniapp开发小程序vendor.js 过大
  • 使用java实现蒙特卡洛模拟风险预测功能
  • AI一周事件(2025年6月3日-6月9日)
  • WHAT - 组件库单入口打包和多入口打包
  • “液态玻璃”难解苹果AI焦虑:WWDC25背后的信任危机
  • 自动化三维扫描检测赋能汽车铸造件高效检测
  • 笔记 操作系统复习
  • 供应链管理-物流:自动驾驶分为几个级别/L0无自动化/L1驾驶辅助/L2部分自动化/L3有条件自动化/L4高度自动化/L5完全自动化
  • 云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
  • SDC命令详解:使用uniquify命令进行唯一化
  • 菲尔斯特传感器,超声波风速风向传感器助力绿色能源发展
  • idea中黄色感叹号打开
  • RPC调用三 使用代理进行服务自动注册
  • CppCon 2015 学习:RapidCheck Property based testing for C++
  • 计算机基础(一):ASCll、GB2312、GBK、Unicode、UTF-32、UTF-16、UTF-8深度解析
  • 记录chrome浏览器的一个bug
  • 零基础入门 线性代数
  • 上位机开发过程中的设计模式体会(2):观察者模式和Qt信号槽机制
  • 经典的多位gpio初始化操作
  • 基于FPGA的PID算法学习———实现PI比例控制算法
  • React Native 基础语法与核心组件:深入指南
  • 篇章三 论坛系统——环境搭建