一道值得思考的数据结构题目(入栈与出栈序列)

就业指导课上做的一道数据结构中有关栈的题目,当时一开始自己思考不全面,错选了。

一个栈的入栈序列为1,2,3,…,n ,其出栈序列是 p 1 ,p 2 ,p 3 ,…p n 。若p 2 = 3,则 p 3 可能取值的个数是()

A:n -3

B:n - 2

C:n - 1

D:无法确定


答案:C ( n - 1)个

看了别人的一些解析,觉得不够完善,下面给出自己的见解。

首先,栈的先进后出原则大家应该是知道的。

根据题意 p 2 = 3,可以知道 p 1 的可能情况有三种:1,2 或 4 。(看到有些人只想到了 1,2)

为啥这样想呢?这里估计还有一个关键是要考虑到 n 的大小

当 n = 3 时, p 2 = 3 的话,那么 p 1 有两种情况 1 和 2 。

  • 如果 p 1 = 1 , 那么 p 3 = 2 ;
  • 如果 p 1 = 2 ,那么 p 3 = 1 ;

此时的话我们就可以看到 p 3 只有两种可能 1 或者 2 (n - 1)个。

当 n > 3 时: p 2 = 3 的话,那么 p 1 有三种情况 1 , 2 和 4 。

  • 如果 p 1 = 1 , 那么 p 3 = 2,4,5,… n (n - 2)个
  • 如果 p 1 = 2 ,那么 p 3 = 1,4,5,… n (n - 2)个
  • 如果 p 1 = 4 ,那么 p 3 = 2,5,6,… n (n - 3)个

此时的话我们就可以看到 p 3 的情况有 1,2,4,5,… n (n - 1)个。

综上所述就是 p 3 可能取值的个数是 (n - 1)个。

你可能感兴趣的:(算法,数据结构)