栈是一种只能在一端出入的特殊线性结构
进栈:
· 如果栈已经满了,那么就溢出,做出错处理
· 如果不满那么入栈
退栈:
· 如果栈已经空了,那么给出下溢信息,做出错处理
· 否则出栈
栈只能后进先出,所以非法的状态有:
- 因为已经满了而溢出
- 因为已经是空栈了而下溢
- 由于栈顶有元素没有出来而导致栈底的元素出不来
(考的最多的是第三种非法状态,这就需要模拟了)
例题:
- (NOIP2006)设栈的初始状态为空,元素a、b、c、d、e依次进栈,出栈序列不可能出现的是:
A. a、b、c、e、d
B. b、c、a、e、d
C. a、e、c、b、d
D. d、c、e、b、a
解析:C
A:进、出、进、出、进、出、进、进、出、出
B:进、进、出、进、出、出、进、进、出、出
C:进、出、进、进、进、进、出,此时从栈顶到栈底顺序为d、c、b,而题目为c、b、d,出栈状态非法
D:进、进、进、进、出、出、进、出、出、出 - (NOIP2003提高组)已知有元素(8,25,14,87,51,90,6,19,20),则这些元素以()的顺序入栈,使得出栈顺序满足:8在51前;90在87后;20在14后;25在6前;19在90后
A. 20,6,8,51,90,25,14,19,87
B. 51,6,19,20,14,8,87,90,25
C. 19,20,90,8,6,25,51,14,87
D. 6,25,51,8,20,19,90,87,14
E. 25,6,8,51,87,90,19,14,20
解析:D根据栈后进先出原则,将题目给的顺序倒过来,就是入栈顺序需要满足的
那么51在8前,90在87前,20在14前,6在25前,19在90前
A. 8在51前;90在19前
B. 90在87后
C. 8在51前
D. 满足要求
E. 8在51前;87在90前;14在20前;25在6前;90在19前————忘记了入栈顺序和出栈顺序相反了的