栈
定义:限定只在表的一端(表尾)进行插入和删除操作的线性表
特点:FILO,LIFO
栈顶(top):允许插入和删除的一端
栈底(bottom):另一端
问题:
进出栈的顺序
求栈的容量
栈中元素实际个数
操作:
元素进栈
元素出栈
初始化
判空
判满
顺序栈
限定在表尾进行插入和删除操作的顺序表
类型定义:
typedef struct{
SElemType *base;
SElemtype *top;
int stacksize;
}SqStack;
SqStack s;
说明:
- base称为栈底指针,始终指向栈底。当base=null时,表明栈结构不存在
- top为栈顶指针
- stacksize:当前栈可以使用的最大容量
判断:
栈空:s.top=s.base
栈满条件:s.top-s.base>=s.stacksize
进栈操作:*s.top++=e; 或*stop=e; s.top++;
退栈操作:e=*--s.top; 或s.top--;e=*s.top;
上溢:栈满时再做进栈操作产生空间溢出
下溢:栈空时再做退栈操作产生空间溢出
链栈
不带头结点的单链表,其插入和删除操作仅限制在表头位置上进行,链表的头指针即栈顶指针。
类型定义:
typedef struct SNode{
SElemType data;
struct SNode *next;
}SNode,*LinkStack;
LinkStack s;
栈的应用
数制转换
表达式求值