栈(LIFO:后进先出)
栈LIFO
1)栈是一种限制插入和删除只能在一个位置上的表。这个位置就是栈顶(top)。普通的清空栈的操作和测试栈是否为空的操作,都是栈的指令系统的一部分。其中我们能对栈直接进行的操作只有基本操作:push(入栈)、pop(出栈)。push相当于插入,而pop相当于把最后插入的元素删除。
一般的模型是,存在某个元素位于栈顶,而该元素是唯一的可见元素。
2)栈的实现:由于栈是一个表,所以任何实现表的方法都能实现栈。那么,ArrayList和LinkedList都支持栈的操作。由于栈的操作是常数时间操作,所以,除非在非常独特的环境下,否则不会出现任何明显的改进。这种独特的方法,一种是链式结构。一种是数组结构。
栈的链表实现:通过在单链表的顶端插入元素来实现push,通过删除表顶端的元素来实现pop操作。top只是考查表顶端元素并返回它的值。
栈的数组实现:模仿的是ArrayList的add操作。与每个栈相关的操作是theArray和topOfStack,对于空栈它是-1.为将某个元素x推入栈中,我们使topOfStack增1,然后将theArray[topOfStack] = x.为了弹出栈元素,我们置返回值为theArray[topOfStack],然后使topOfStack-1.栈很有可能是在计算机科学数组之后最基本的数据结构。
3)后缀表达式
(原式) 4.99*1.06+5.99+6.99*1.06
(后缀表达式)4.99 1.06*5.99+6.99 1.06*
计算这个问题最容易的方法就是使用一个栈。当遇见一个数值时,就把数值压入栈中;当遇到一个符号时,就作用于从栈中弹出的两个数上,再将作用的结果压入栈中。
计算一个后缀表达式,所花费的时间是O(N),因为对输入中的每个元素的处理都是栈的一个操作,相当于是由一些常数时间组起来的时间。注意:当一个后缀表达式给出来时,没有必要知道计算的优先级。
4)中缀到后缀的转换
这里我们坚持普通的优先级法则
例如:中缀表达式 a+b*c+(d*e+f)*g
后缀表达式 abc*+de*f+g*+3.
栈(LIFO:后进先出)相关推荐
- Python数据结构栈,后进先出
栈,后进先出LIFO
- m数据结构 day5 栈:后进先出,只能在表尾插入和删除的线性表
文章目录 现实应用举例(只要用了先进后出,后进先出思想的都是栈的示例) 栈的抽象数据类型 顺序栈:栈的顺序存储结构,用数组实现 进栈:O(1) 出栈:O(1) 两个同数据类型的栈共享空间:缓解数组长度 ...
- python 栈实现_Python 栈(后进先出)
Python 栈,栈是含有一组对象的容器,支持快速后进先出(LIFO)的插入和删除操作.与列表或数组不同,栈通常不允许随机访问所包含的对象.插入和删除操作通常称为入栈(push)和出栈(pop). 现 ...
- 七、数据结构:线性表-栈(后进先出)
1.栈是一种先进后出的顺序表,和顺序表的区别是:顺序表可以操作任意元素,但是栈只能对栈顶元素进行操作,即后进先出原则. 2.栈的操作就只有入栈和出栈两个. 3.实现入栈和出栈 栈的栈顶用top标识,入 ...
- 数据结构之栈(后进先出表)
栈(Stack)是一种特殊的线性表,其插入和删除操作均在表的一端进行,是一种运算受限的线性表 栈顶(top)是栈中允许插入和删除的一端. 栈底(bottom)是栈顶的另一端 顺序栈: #include ...
- STL stack 栈(后进先出)
#include<iostream> #include<cstdio> #include<stack> using namespace std; int main( ...
- 30 WM配置-策略-出库策略3-定义后进先出策略L(LIFO)
业务背景:出库策略之3 定义后进先出策略,英文缩写LIFO=Last In First Out就是后进先出了.当存储类型的出库策略被设置为L后,表示启用了LIFO后进先出的出库策略,当物料库存出库下架 ...
- c语言 栈结构存放数据类型,数据结构——栈的详解
栈和队列是两种重要的线性结构,从数据结构的角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表的子集.他们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,他们是和线 ...
- c语言Inqueue函数用法,C语言用两个栈实现队列(完整版)
队列是一种 先进先出(first in - first out, FIFO)的数据结构,队列中的元素都从后端(rear)入队(push),从前端(front)出队(pop). 实现队列最直观的方法是用 ...
- Java 9 揭秘(16. 虚拟机栈遍历)
Tips 做一个终身学习的人. 在本章中,主要介绍以下内容: 什么是虚拟机栈(JVM Stack)和栈帧(Stack Frame) 如何在JDK 9之前遍历一个线程的栈 在JDK 9中如何使用Stac ...
最新文章
- 图解:什么是Raft算法?
- PowerShell 学习笔记——运行命令
- Python中lambda表达式学习
- 卷进大厂系列之LeetCode刷题笔记:二分查找(简单)
- CTFshow php特性 web103
- php 调用父类变量,PHP-通过实例化父类访问常量
- 适用于IE浏览器及非IE浏览器的xmlhttp脚本
- android blowfish加密算法,BlowFish加密算法研究
- 单片机C语言任意角度旋转图片,图片任意角度旋转(转)
- Houdini 官方HDA SideFX Labs 安装
- 【VRP问题】基于模拟退火算法求解带时间窗的车辆路径规划问题VRPTW
- 第三方app版本更新 自定义接口协议+自定义对话框+显示进度对话框
- 技术管理岗岗位职责总结
- python绘制菱形_用python画菱形
- 桌面计算机图标双击打不开了,双击打不开图标怎么办 双击打不开图标解决方法【详解】...
- 解决华为云服务器没有公网Ip无法上网问题
- 从乔布斯卸任看苹果未来三年 会否半途而废?
- CSS清除浮动的方法
- 如何让tensorflow_datasets加载本地下载的数据集
- BetaFlight深入传感设计之四:GPS传感模块