二、栈和队列

news2024/12/25 12:53:58

二、栈和队列

栈——后进先出

应用:数制转换、括号匹配、行编辑程序、迷宫求解、表达式求值、八皇后问题、函数调用、递归调用的实现

队列——先进先出

应用:脱机打印输出

多用户系统用户排队分时循环使用CPU和主存

按用户优先级排队,每个优先级一个队列

实时控制系统,信号按接受顺序依次处理

网络电文传输,按到达的时间先后顺序依次进行

2.1 栈

1.定义及特点

限定只能在表的一端进行插入和删除运算的线性表(只能在栈顶操作),后进先出(Last In First Out),简称LIFO

表尾叫栈顶 Top
表头叫栈底 Base 或 Bottom

存储结构:顺序栈或链栈,以顺序栈更为常见

栈通常用 S 表示(stack)
插入元素到栈顶,称为入栈或压栈 PUSH(x)
从栈顶删除最后一个元素,称为出栈或弹栈 POP(x)
在这里插入图片描述

2.2 队列

1.定义及特点

只能在表的一端进行插入,在表的另一端进行删除运算的线性表,先进先出(First In First Out),简称FIFO.
只能在队头和队尾运算(头删尾插)。

队列通常用Q表示(queue)
存储结构:顺序队或链队,以循环顺序队列更常见

案例引入

1、进制转换
把十进制159转换为八进制,倒序取余数可以用栈来进行
在这里插入图片描述

2、括号匹配
假设有两种括号()[]

它们的嵌套顺序任意,即是:

1.() 或者[([][])] 是正确格式;

2.[(]) 为错错误格式;

3.([()) 或 (()]) 是错误格式。

利用栈的特点将左括号和右括号进行匹配,左括号入栈,右括号进行匹配,匹配则出栈,不匹配break,一下是几种不匹配的情况:

当遇到某一个右括号时,栈已空,说明目前为止,右括号多于左括号

从栈弹出的左括号与当前检验的右括号类型不同,说明出现了括号交叉

算术表达式输入完毕,但栈中还没有匹配的左括号,说明左括号多于右括号

3、表达式求值
表达式的组成:

操作数(operand):常数、变量

运算符(operator):算术运算符、关系运算符和逻辑运算符

界限符(delimiter):左右括号和表达式结束符,如‘#’

例如:#3*(7-2)#

为了求解这样一个表达式就要两个栈一个是算符栈OPTR,一个是操作数栈OPND。前者存放运算符,另一个存运算结果。

从左到右扫描表达式,如果遇到运算数就放入OPND,如果是运算符,如果该运算符比OPTR的栈顶优先级高,则入栈OPTR,继续向后处理;否则从OPND中弹出两个运算数,从OPTR中弹出栈顶运算符进行运算,将结果压入OPND。如此向后处理,直到碰到结束符。

4、舞伴问题
假设在舞会上,男士和女士各自排成一队。舞会开始时, 依次从男队和女队的队头各出一人配成伴如果两队 初始人数不相同,则较长的那一队中未配对者等待下一 轮舞曲。现要求写一算法模拟上述舞伴配对问题。

这题显然用队列解,分别构造男女两个队列来解决问题

2.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/114998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

编译gtest报错‘is_trivially_copy_constructible’ is not a member of ‘std’

编译gtest报错‘is_trivially_copy_constructible’ is not a member of ‘std’一、问题描述二、原因分析三、升级gcc版本四、验证一、问题描述 在一个新的Redhat7.6 linux虚拟机上,将gtest clone下来之后编译,一堆报错: /opt/googletest/…

多线程问题(二)(安全问题)

目录 一、多线程不安全引例 二、线程不安全的原因 1、线程是抢占式执行 2、多线程共享同一变量 3、对变量的操作不是原子性 4、内存可见性 5、指令重排序 三、线程不安全问题的解决方案 1、使用synchronized关键字进行加锁 a、 synchronized修饰普通方法 b、sy…

Maleimide-PEG-Biotin,Biotin-PEG-MAL,生物素PEG马来酰亚胺用于生物分子检测

化学试剂生物素聚乙二醇马来酰亚胺,其英文名为Maleimide-PEG-Biotin,Biotin-PEG-MAL,它所属分类为Biotin PEG Multi-arm PEGs。 该试剂质量控制为95%,试剂的储存条件为: -20℃长期保存,避光,干…

数据结构---图

(一) 相关知识点 图(graph):图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中的顶点的集合,E是图G…

SpringBoot系列之自动装配原理详解

文章目录前言一、SpringBoot自动配置-Condition-11、观察spring自动创建bean过程2、创建自定义bean对象3、根据条件创建自定义bean二、 SpringBoot自动配置-Condition-2三、SpringBoot自动配置-切换内置web服务器1、查看继承关系图2、shiftdelete 排除Tomcat四、SpringBoot自动…

Win10启动Pycharm报错

Win10启动Pycharm报错报错信息解决方法报错信息 Internal error. Please report to http://jb.gg/ide/critical-startup-errors java.net.BindException: Address already in use: bind at java.base/sun.nio.ch.Net.bind0(Native Method) at java.base/sun.nio.ch.Net.bind(U…

如何在3个月内写出博士论文

在阅读本文之前,请注意:我花了三年半的时间进行全职研究,为我的博士论文收集数据;这三个月只涉及写作,我在最后很快就完成了。我并不是说每个人都能写得那么快,如果你没有做过研究,那是不可能的…

全国各省368个地级市河流密度数据(工具变量)

数据来源:国家基础地理信息中心 时间跨度:-- 区域范围:全国各省市 指标说明: 根据河流矢量和中国城市行政边界矢量地理信息,计算每个城市河流的总长度;根据各城市的行政区划面积,计算中国各城…

第三章:关系数据库标准语言SQL

一、sql概述和数据定义 1、【单选题】 create user A identified by B default tablespace C temporary tablespace D; 上述oracle数据库查询语句中A、B、C、D分别代表: 正确答案: A 2、【单选题】下表为患者缴费记录,现需…

2023跨年烟花3D最炫烟花,html最酷炫动态烟花源码分享,点击即可直接运行

📋 前言 🖱 博客主页:在下马农的碎碎念✍ 本文由在下马农原创,首发于CSDN📆 首发时间:2022/12/25📅 最近更新时间:2022/12/25🤵 此马非凡马,房星本是星。向前…

lambda表达式,函数式接口,链式编程,Stream流式计算

新时代的程序员:lambda表达式,函数式接口,链式编程,Stream流式计算 函数式接口 函数式接口:只有一个方法的接口(简化编程模型,在新版本框架底层中大量应用!) 只要是 函数型接口 就可以使用lambd…

iOS 16.2 在 SwiftUI 子视图中无法关闭弹出的(sheet)导航视图(NavigationView)之解决

问题现象 iOS 16.2 中,若在 SwiftUI 4.0 里弹出(sheet)一个导航视图 A,则不能在 A 的子视图中将 A 关闭(dismiss): 如上图所示:上面的按钮直接放在导航视图 A 中,点击它可以直接关闭 A;而下面的按钮放在一个子视图中,点击它想要关闭 A 却没有任何反应。 那么,该如…

可转债网格交易策略回测

什么是网格交易策略:基于股票波动高抛低吸策略,自动化反复买卖赚取差价。投资者借助条件单,把资金分成多份,从基准价开始,每跌x%就自动买入一份,每涨y%就自动卖掉一份。股价越波动高抛低吸的机会越多 什么…

Java项目:springboot基于java+mysql+springboot的社区养老医疗综合服务平台

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为管理员、医生、病人三种角色, 管理员的功能包含如下: 个人信息:个人资料、修改密码 系统管理&…

Python入门学习之字符串与比较运算符

Python字符串 字符串或串(String)是由数字、字母、下划线组成的一串字符。 一般记为 : 1 s"a1a2an"(n>0) 它是编程语言中表示文本的数据类型。 python的字串列表有2种取值顺序: 从左到右索引默认0开始的,最大范围是字符串长度少1从右到左索引默认-1开…

【C++】各种排序涉及到的选择小题合集(每日小细节009)

昨天更新完各种排序之后今天来检验一下是否真的全部掌握了呢? 今天的合集里面包括各种排序的综合选择题和一些解题技巧 花一两分钟看一下真的很有帮助哦 (最好能先认真复习一下各种排序) 1. 冒泡排序就是相邻元素的两两比较所以依次写出来就…

Java项目:Springboot体育器材管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 体育器材管理系统主要包含以下功能: 登录注册; 体育器材管理:显示器材表、显示价目表、显示供应商表&#x…

通达信逐笔接口怎么查询下单明细?

通达信逐笔接口一般会根据实盘交易系统的模式来开发,然后股票量化交易接口端也能很快的获取用户数据,也就是你的账户下单的数据信息,在市场交易期间能实时与多家证券公司对接,实现委托买入卖出操作。那么,像这么方便的…

IO流Properties配置文件

目录 输入流和输出流 File文件增删 常用IO流类及其分类 FileInputStream/FileOutputStream ObjectInputStream/ObjectOutputStream BufferedInputStream/BufferedOutputStream FileReader/FileWriter BufferedReader/BufferedWriter InputStreamReader/InputStreamWri…

为啥devc++程序运行正确返回不为0?而返回了一个特别大的数,详解。

例如运行以下程序: #include #include typedef char ElemType; typedef struct BiTNode{ char data; struct BiTNode *lchild; struct BiTNode *rchild; int DescNum;}BiTNode ,*BiTree; void CreateBiTree(BiTree *T) { char ch; scanf("%c",&ch); if(ch ){…