栈是一种只能在一端出入的特殊线性结构


进栈:
· 如果栈已经满了,那么就溢出,做出错处理
· 如果不满那么入栈


退栈:
· 如果栈已经空了,那么给出下溢信息,做出错处理
· 否则出栈


栈只能后进先出,所以非法的状态有:

  1. 因为已经满了而溢出
  2. 因为已经是空栈了而下溢
  3. 由于栈顶有元素没有出来而导致栈底的元素出不来
    (考的最多的是第三种非法状态,这就需要模拟了)

例题:

  1. (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:进、进、进、进、出、出、进、出、出、出
  2. (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前————忘记了入栈顺序和出栈顺序相反了的
原文地址:https://www.cnblogs.com/Wuzhuoming-sirenboke/p/13779991.html