美文网首页
数据结构之栈

数据结构之栈

作者: Sun东辉 | 来源:发表于2022-07-01 16:51 被阅读0次

栈(stack)又称为堆栈或堆叠,是计算机科学中的一种抽象资料类型,只允许在有序的线性资料集合的一端(称为堆栈顶端,英语:top)进行加入数据(英语:push)和移除数据(英语:pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作,堆栈常用一维数组或链表来实现。常与另一种有序的线性资料集合队列相提并论。

特点

  1. 后进先出(LIFO, Last In First Out)。
  2. 除头尾节点之外,每个元素有一个前驱,一个后继。

存储结构

  1. 顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针 top 指示栈顶元素在顺序栈中的位置。
  2. 链栈:采用链式存储结构实现的栈,通常用单链表来实现。

由于顺序栈和顺序表一样,受到最大空间容量的限制,虽然可以在“满员”时重新分配空间扩大容量,但工作量较大,应该尽量避免。因此在应用程序中无法预估栈可能达到的最大容量时,应该使用链栈。

操作

此处,我们以栈的数组实现为例,创建栈 S,当 S.top = 0 时,栈中不包含任何元素,即栈是空(empty)的。如果试图对一个空栈执行弹出操作,则称栈下溢(underflow),这通常是一个错误。如果 S.top 超过了栈最多可容纳的元素个数 n,则称栈上溢(overflow)。

初始化

STACK-INIT(S, MAXSIZE)
    # 初始化一个最大容量为 MAXSIZE 的数组空间
    # 在初始化链栈时,无需分配空间
    # 此处省略了存储分配失败的判断
    s = Make(S, MAXSIZE) 
    s.top = 0 # 将 top 初始化为 0
    return s 

判断是否为空

STACK-EMPTY(S)
    if S.top == 0 
        return TRUE
    else return FALSE

入栈

PUSH(S,x)
    # 此处省略了栈是否已满的判断
    S.top = S.top + 1 # 将元素压入栈顶,栈顶指针加一
    S[S.top] = x

出栈

POP(S)
    if STACK-EMPTY(S) # 判断栈是否为空,若空返回错误
        return error "underflow"
    else S.top = S.top - 1 # 栈顶指针减一,栈顶元素出栈
        return S[S.top + 1]

可以看出,顺序栈操作的执行时间都为 O(1)。

参考资料

  • 《算法导论》第三版 殷建平 等译
  • 《数据结构》(C 语言第二版)严蔚敏 等编著
  • 维基百科

相关文章

  • Android面试题总结(题目+复习链接)

    数据结构 1.栈实现原理 java数据结构与算法之栈(Stack)设计与实现 - CSDN博客 2.链表实现原理 ...

  • 数据结构之栈 原理 栈是一种比较常见的数据结构,它的操作可以看做是数组的子集,因为栈只能从栈顶取元素和添加元素,并...

  • 数据结构之---栈

    数据结构之---栈 顺序栈 内部采用数组实现 结构图; 定义结构体: 函数声明 进栈以及出栈 图示: 其余操作 链...

  • Activity启动模式精讲

    讲解本技术点之前需要准备的技术点回顾 栈数据结构 数据结构图文解析之:栈的简介及C++模板实现 - melonst...

  • 数据结构之栈的链式存储结构

    之前写了栈的顺序存储结构,对栈的定义和操作进行了说明 数据结构之栈的顺序存储结构 现在接着写栈的链式存储结构 栈的...

  • 栈和队列

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

  • Java 基础 35 数据结构和ArrayList集合的相关案例

    1.1 数据结构 什么是数据结构?数据的组织方式.维基百科 1.1.1 常见数据结构之栈和队列 1.1.2常见数据...

  • 实战PHP数据结构基础之栈

    栈和队列 栈和队列和之前讲到的实战PHP数据结构基础之双链表 一样都是线性结构。 栈有什么特点 栈遵循后进先出的原...

  • 004 go语言实现栈

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

  • java高级知识点

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

网友评论

      本文标题:数据结构之栈

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