栈
定义:它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈应用:
1、字符串表达式计算
2、括号匹配
单调栈
定义:栈内元素单调递增或者单调递减的栈,单调栈只能在栈顶操作。
单调栈应用: 单调栈解决的是以某个值为最小(最大)值的最大区间,实现方法是:求最小值(最大值)的最大区间,维护一个递增(递减)的栈,当遇到一个比栈顶小的值的时候开始弹栈,弹栈停止的位置到这个值的区间即为此值左边的最大区间;同时,当一个值被弹掉的时候也就意味着比它更小(更大)的值来了,也可以计算被弹掉的值得右边的最大区间。
例题
括弧匹配检验 lnsyoj101
bad hair day lnsyoj102 poj3250
feel good poj1796
玉蟾宫 lnsyoj103 洛谷p4147