八、栈
(一)、逻辑结构
栈是一种只能在一端进行插入或删除操作的线性表。栈也称为后进先出表。
栈抽象数据类型=逻辑结构+基本运算(运算描述)
栈的几种基本运算如下:
若算出栈序列p可能取值的个数,逆向思维哪些值不可能在p序列出栈(绝不可能是p已出栈的值)。
(二)、存储结构
输出序列:由出栈序列判断栈容量(将入栈出栈过程模拟出来)。
出栈序列和上一个出队序列一致
出栈序列是上一个出栈序列相逆
求以某元素为出栈开头的序列个数,主要看未进栈元素如何插空。
若入栈序列是一个升序序列,其栈顶元素一定大于其下方的元素;如果最后一个入栈的元素第一个出栈,那其余元素的出栈序列就是固定的。
已知第n位出栈序列的值,求第n+1位出栈序列的值,可逆向思维哪些值不可能出现(绝不可能是已出栈的值)
n个不同的元素通过一个栈产生的出栈序列的个数为卡特兰数。
1.顺序栈
采用顺序存储结构的段称为顺序栈。
栈空的条件:s->top==-1。(初始时设置s->top=-1)
栈满的条件:s->top==MaxSize-1(data数组的最大下标)。
元素e的进栈操作:先将栈顶指针 top 增1,然后将元素e放在栈顶指针处。
出栈操作:先将栈顶指针 top 处的元素取出放在e中,然后将栈顶指针减1。
2.链栈
采用链式存储结构的栈称为链栈。