美文网首页
数据结构复习笔记 - 栈

数据结构复习笔记 - 栈

作者: ElegantLiar | 来源:发表于2019-12-23 11:20 被阅读0次

如何理解“栈”?

关于“栈” - 模型 堆盘子

  • 后进者先出,先进者后出,这就是典型的“栈”结构
  • 栈是一种“操作受限”的线性表
  • 数组或链表暴露了太多的操作接口,操作上的确灵活自由,但使用时就比较不可控,自然也就更容易出错
  • 当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构
  • 空间复杂度是 O(1)
  • 时间复杂度是 O(1)

如何实现一个“栈”?

  • 用数组实现的栈,我们叫作顺序栈
  • 用链表实现的栈,我们叫作链式栈

动态扩容的顺序栈

  • 出栈O(1)
  • 入栈操作来说,最好情况时间复杂度是 O(1),最坏情况时间复杂度是 O(n)

应用

  • 在表达式求值中的应用
  • 在括号匹配中的应用
  • 浏览器的前进和后退功能

Q&A

为什么函数调用要用“栈”来保存临时变量呢?用其他数据结构不行吗?

其实,我们不一定非要用栈来保存临时变量,只不过如果这个函数调用符合后进先出的特性,用栈这种数据结构来实现,是最顺理成章的选择。

从调用函数进入被调用函数,对于数据来说,变化的是什么呢?是作用域。所以根本上,只要能保证每进入一个新的函数,都是一个新的作用域就可以。而要实现这个,用栈就非常方便。在进入被调用函数的时候,分配一段栈空间给这个函数的变量,在函数结束的时候,将栈顶复位,正好回到调用函数的作用域内。

我们都知道,JVM 内存管理中有个“堆栈”的概念。栈内存用来存储局部变量和方法调用,堆内存用来存储 Java 中的对象。那 JVM 里面的“栈”跟我们这里说的“栈”是不是一回事呢?如果不是,那它为什么又叫作“栈”呢?

内存中的堆栈和数据结构堆栈不是一个概念,可以说内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构。
内存空间在逻辑上分为三部分:代码区、静态数据区和动态数据区,动态数据区又分为栈区和堆区。
代码区:存储方法体的二进制代码。高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)控制代码区执行代码的切换。
静态数据区:存储全局变量、静态变量、常量,常量包括final修饰的常量和String常量。系统自动分配和回收。
栈区:存储运行方法的形参、局部变量、返回值。由系统自动分配和回收。
堆区:new一个对象的引用或地址存储在栈区,指向该对象存储在堆区中的真实数据。

相关文章

  • 数据结构复习笔记 - 栈

    如何理解“栈”? 关于“栈” - 模型 堆盘子 后进者先出,先进者后出,这就是典型的“栈”结构 栈是一种“操作受限...

  • 包含min函数的栈

    《剑指offer》刷题笔记。如有更好解法,欢迎留言。 关键字:栈 辅助栈 题目描述: 定义栈的数据结构,请在该类型...

  • 数据结构学习 栈 队列 链表 2019-04-08

    数据结构 datawhile课程学习 作业笔记 任务一 栈 1.用数组实现一个顺序栈 Valid Parenthe...

  • 算法与数据结构 : 栈的实现及运用

    本文是在阅读《算法》第四版时的笔记。 栈 栈数据结构遵循 LIFO( last in first out ) 的原...

  • 数据结构(二):栈和队列

    本系列为数据结构学习笔记,如有错误请指正~ 数据结构(一):数组和链表 一、理论知识 栈和队列都是线性数据结构,属...

  • 数据结构(三):散列表

    本系列为数据结构学习笔记,如有错误请指正~数据结构(一):数组和链表数据结构(二):栈和队列 一、基本概念 散列表...

  • Python实现队列,栈

    通过python设计实现队列以及栈,复习一下数据结构 队列:先进先出 class Stack(object):de...

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • JavaScript-数据结构与算法(一):栈与队列

    《学习JavaScript数据结构与算法》(下文中简称《学》)读书笔记。文章首发于我的博客 栈 栈是一种遵从后进先...

  • TsingHuaDSA-栈和队列

    该文章为清华大学数据结构与算法设计MOOC课程读书笔记. 1. 栈 1.1 接口 LIFO后进先出 1.2 栈实现...

网友评论

      本文标题:数据结构复习笔记 - 栈

      本文链接:https://www.haomeiwen.com/subject/zjrznctx.html