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

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

题源:《数据结构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

相关文章

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE