关于混合栈操作的问题?
假设某个用列程序会进行一系列入栈和出栈的混合栈操作。入栈操作会将整数0到9按顺序压入栈;出栈操作会打印出返回值。下面哪种序列是不可能产生的?
A: 4 3 2 1 0 9 8 7 6 5
B: 4 6 8 7 5 3 2 9 0 1
C: 2 5 6 7 4 8 9 3 1 0
D: 4 3 2 1 0 5 6 7 8 9
E: 1 2 3 4 5 6 9 8 7 0
F: 0 4 6 5 3 8 1 7 2 9
G: 1 4 7 9 8 6 5 3 0 2
H: 2 1 4 3 6 5 8 7 9 0
先谈谈我自己的思路吧:
栈是个先进后出的数据结构,其次入栈时会将这些整数按照顺序压入,那么出栈时必定也是按照顺序出来的。因此E and A and D
可以直接排除了。
接下来我就楞B了..因为我觉得都不可能产生的。但又觉得题目应该没这么简单..
我是一枚刚学算法的菜鸟,还望各位大牛不吝指教。先在此谢过!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这应该是个程序题而非心算题。写个程序,两个参数,一个是0-9序列,一个是结果序列。然后按照结果序列把出入栈操作推演一遍
谢邀,这题是可以心算的
一个评判标准: 某数 a 右侧所有比 a 小的数构成的子列必须严格降序。
解决了
先说思路【相当于两个数组,A是你要测试是否合法范例,B是0到9的顺序排列。从B的第一个和A的第一个相比,不同的话就将B入栈,然后B++,再和A比,比到相同为止。我是先入栈了之后再比,这样会有一个出栈的过程。出栈之后A++,B--,然后A和B再次相比,重复上面的步骤】
【说的还是很混乱...欸...】
贴一下代码
c语言的
我的写的比较繁琐,思路还不是很清晰
贴一下同学的
思路:根据打印出的序列,逆向推出栈中原本的出入栈顺序。根据值小的元素必然比值大的元素先入栈,若推到出的结果与此相反则该打印序列是错误的。