栈的基本概念
定义
只允许再一段插入或删除的线性表. 栈是一种线性表 但限定这种线性表 只能在某一段进行插入和删除操作
栈顶:线性表允许进行插入删除的那一端
栈底:固定的 不允许进行插入和删除的另一端
空栈: 不含任何元素的空表
栈是先进后出
栈的前中后缀表达式: 首先运算优先级最高的 然后将运算符 放两个整体之前就是前缀放两个整体之后就是后缀
栈的常见基本操作
InitStack(&S):初始化一个空栈S。
StackEmpty(S):判断一个栈是否为空,若栈为空则返回true,否则返回false。
Push(&S, x):进栈(栈的插入操作),若栈S未满,则将x加入使之成为新栈顶。
Pop(&S, &x):出栈(栈的删除操作),若栈S非空,则弹出栈顶元素,并用x返回。
GetTop(S, &x):读栈顶元素,若栈S非空,则用x返回栈顶元素。
DestroyStack(&S):栈销毁,并释放S占用的存储空间(“&”表示引用调用)
栈的顺序存储
采用顺序存储的栈称为顺序栈,它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前栈顶元素的位置。
若存储栈的长度为StackSize,则栈顶位置top必须小于StackSize。当栈存在一个元素时,top等于0,因此通常把空栈的判断条件定位top等于-1。
栈的顺序存储结构可描述为:
若现在有一个栈,StackSize是5,则栈的普通情况、空栈、满栈的情况分别如下图所示: