数据结构:同一组不重复输入序列执行不同的出入栈组合操作,所得结果也可能相同?——对此问题的探讨

本文主要是介绍数据结构:同一组不重复输入序列执行不同的出入栈组合操作,所得结果也可能相同?——对此问题的探讨,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题源:《数据结构1800题》第四版 P45

1. 判断题:同一组不重复输入序列执行不同的出入栈组合操作,所得结果也可能相同。(北京邮电大学,2005)

答案:√

分析:这道题之前已经有人讨论过,可以参考:《V2EX:一个算法题请教…》,看来确实有一些争议,下面以我的理解分析一下。

首先,本题 并未说明说初态和终态是否为空,而在 终态栈非空 的情况下,也就是说,并不需要所有元素都出栈,这样的话,留给我们的发挥空间就比较大了。

例如,输入序列为:1 2 3 4

操作①:push pop,输出序列:1
操作②:push pop push push,输出序列:1

你看,确实是两种不同的操作序列吧,也确实得到了相同的输出序列吧。那么本题的这句话确实是正确的,书上给的答案是没问题的。


2. 判断题:即使对不含相同元素的同一输入序列进行两组不同的合法的入栈和出栈组合操作,所得的输出序列也一定相同。(北京邮电大学,1999;中国海洋大学,2005)

答案:×

分析:本题在答案上没有什么争议,肯定是选 ×,就不举例说明了。但是估计很多人看到 也一定相同 这个描述会感到疑惑,给人感觉如果写成 可能相同 ,这句话就应该是对的。实际上如果改成 可能相同 的话,本题就与上一题一样了。再一次印证了上一题答案是 √。


3. 应用题:

假设以 S 和 X 分别表示入栈和出栈的操作,则初态和终态均为空栈的入栈和出栈的操作序列可以表示为仅由 S 和 X 组成的序列。称可以操作的序列为合法序列(例如,SXSX为合法序列,SXXS为非法序列)(东南大学,1992)

(1)试给出区分给定序列为合法序列或非法序列的一般准则

(2)两个不同的合法(栈操作)序列(对同一输入序列)能否得到相同的输出元素(注意:在此指的是元素实体,而不是值)序列?如能得到,请举例说明。

《1800题》书上的答案:

在这里插入图片描述
对于以上答案第(2)问我不认同,因为题目中已经明确说明了是 对同一输入序列,但答案说的是 两个不同的输入序列,明显是答非所问了。

一个在我看来较为合理的解答:

(1)区分准则:

  • 给定序列中 S 的个数和 X 的个数相等
  • 从给定序列开始,到给定序列中的任一位置,S 的个数要大于等于 X 的个数。

(2)不能得到相同的输出元素序列。证明过程如下:

思路来源:《数据结构习题集》答案解析-严蔚敏吴伟民版,第3章 栈和队列

设两个合法序列为:

T1 = S……X……S……
T2 = S……X……X……

假定前 n 个操作都相同,从第 n+1 个操作开始,为序列不同的起始操作点。由于前 n 个操作相同,故此时两个栈(不妨为栈 A、B)的存储情况完全相同,假设此时栈顶元素均为 a。

第 n+1 个操作不同,不妨 T1 的第 n+1 个操作为 S,T2的第 n+1 个操作为 X。T1 为入栈操作,假设将 b 压栈,则 T1 的输出顺序一定是先 b 后 a;而 T2 将 a 退栈,则其输出顺序一定是先 a 后b。

由于 T1 的输出为……ba……,而 T2 的输出顺序为……ab……,说明两个不同的合法栈操作序列的输出元素的序列一定不同。

这篇关于数据结构:同一组不重复输入序列执行不同的出入栈组合操作,所得结果也可能相同?——对此问题的探讨的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/557042

相关文章

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个