单项选择(2016年春程序员软考)

设有初始为空的栈S,对于入栈序列a、b、c、d,经由一个合法的进栈和出栈操作序列后(每个元素进栈、出栈各1次),以c作为第一个出栈的元素时,不能得到的序列为【 】。

A、cdba

B、cbda

C、cdab

D、cbad

答案解析

C

【解析】

栈的修改规则是后进先出。对于题目给出的元素序列,若要求c先出栈,此时a、b尚在栈中,因此这三个元素构成的出栈序列只能是cba,而元素d可在b出栈之前进栈,之后b只能在d出栈后再出栈,因此可以得到出栈系列cdba。同理,c可在a出栈之前进栈,从而得到出栈序列cbda。若e在a出栈后入栈、出栈,则得到出栈序列cbad。由于a不能在b出栈前出栈,因此不能得到cdab。

讨论