美文网首页
数据结构--栈

数据结构--栈

作者: Qi0907 | 来源:发表于2017-11-08 11:12 被阅读0次

栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行,也就是说只能在栈顶进行插入(push进栈)和删除(pop出栈)操作,进栈出栈的复杂度均为O(1),栈中的数据元素遵守”先进后出"(First In Last Out)的原则,简称FILO结构。


image
image

可以看到在压栈的过程中,栈顶的位置一直在”向上“移动,而栈底是固定不变的。出栈的顺序与入栈时相反,这就是所谓的”先入后出“。在出栈的过程中,栈顶位置一直在”向下“移动,而栈底一直保持不变。
栈既然是一个表,因此任何实现表的方式都能实现栈(数组、链表(单向链表、双向链表或循环链表))。

栈的数组实现


image

栈的数组实现相对流行和简单,但唯一的潜在危害是需要提前声明一个数组大小。为了防止数组越界,可以在栈的程序中加入数组越界的检查,但他们会影响栈的执行效率。

栈的链表实现


image

以链表头为作为栈顶,这样方便节点的插入与删除。压栈产生的新节点将一直出现在链表的头部。这种实现方法的缺点在于分配和释放内存的开销比较大。

什么场景会用到栈呢?
计算器,涉及运算先后顺序,涉及计算状态的保存,通过栈能够容易的实现,把表达式转化为后缀表达式(也可以通过栈来实现),遇到数时压栈,遇到运算符时,出栈两个数并通过运算符计算。
汉诺塔的问题也可以通过栈来解决。

相关文章

  • 栈和队列

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

  • 004 go语言实现栈

    1 数据结构 数据结构: 要实现的功能:0 栈的初始化1 获取栈长度2 入栈3 出栈4 清空栈内容5 判断栈是否为...

  • java高级知识点

    1.数据结构 程序=数据结构+算法 栈:后进先出,线性结构 入栈:push 出栈:pop假如已知入栈顺序是ab...

  • 栈和堆以及栈区和堆区的区别

    栈和堆以及栈区和堆区的区别 数据结构中的栈和堆 栈:具有先进后出性质的数据结构 堆:一种经过排序的树形数据结构,节...

  • 数据结构与算法 第二节:栈 栈: 一种先进后出的数据结构。可以想象成手枪的弹夹。 栈的特点: 栈的行为: 栈的代...

  • 2019-07-11—栈

    栈:Java数据结构和算法(四)——栈 string和char一般这么转化: 21、定义栈的数据结构,请在该类型中...

  • 什么是堆栈?

    堆与栈是两种数据结构,并不是一种数据结构,堆是堆,栈是栈。 1、栈:是一种只能在一端进行插入和删除的数据结构。 允...

  • 05--栈 递归

    栈 栈(Stack)又名堆栈,它是一种重要的数据结构。从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作是线...

  • 18-04-21 python3 算法笔记 002基本数据结构

    线性数据结构 栈,队列,deques,列表其元素在数据结构中的位置由它被添加时的顺序决定。 栈 后进先出栈 LI...

  • 数据结构

    数据结构:要写!!手动!!数据结构非常简洁才可 栈 eg. 弹栈压栈的过程 链表 就是原型链不断的连接,要断去某个...

网友评论

      本文标题:数据结构--栈

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