数据结构-线性结构-栈

目录

栈(stack)

栈的顺序存储实现

栈的顺序存储实现-入栈

栈的顺序存储实现-出栈

拓展-一个数组实现两个栈

栈的链式存储实现

链栈-栈的链式存储结构

链栈-入栈

链栈-出栈 

栈的实现(顺序存储结构和链式存储结构) 


栈(stack)

栈(stack),是具有一定操作约束的线性表。其只能在一端(栈顶,Top)做插入、删除操作。

  • 插入数据:入栈(Push)
  • 删除数据:出栈(Pop)
  • 先入后出:Last In First Out(LIFO)

栈的抽象数据类型描述

数据对象集:一个有0或多个元素的线性表。

操作集:

  1. 生成空栈,其最大长度为MaxSize
  2. 判断栈是否已满
  3. 判断栈是否为空
  4. 将元素压入栈
  5. 将栈顶元素返回并删除

栈的应用场景

  1. 函数调用及递归实现(一系列操作的回滚)
  2. 回溯算法-(走迷宫)
  3. 深度优先搜索-(表现形式是递归,但实际上就是一种栈)

栈的顺序存储实现

栈的顺序存储结构体,通常由一个数组一个记录栈顶元素位置的变量组成。

栈的顺序存储实现-入栈

栈的顺序存储实现-出栈

拓展-一个数组实现两个栈

使用一个数组实现两个堆栈,要求最大地利用数组空间。使数组只要有空间,入栈操作就可以成功。

 两个栈分别从两端往中间入栈,只要数组还有空间就可以给任一的栈做入栈操作。

栈的链式存储实现

栈的链式存储结构实际上就是一个单链表,叫做链栈

栈的操作只能在链栈的栈顶操作,如果单向链表的Top指向链表的尾部,我们就额外的需要知道Top前面的一个节点在哪,这样才能操作Top指向的元素。所以为了插入和删除的操作的便利,我们需要将链栈Top指向单向链表的头部

链栈-栈的链式存储结构

链栈-入栈

链栈-出栈 

链栈是由单链表实现,不像栈的线性存储结构是使用数组实现。所以链栈操作时可以先不考虑栈满的情况。

栈的实现(顺序存储结构和链式存储结构) 

栈-GO语言实现

栈的应用-表达式求值-GO语言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值