第三章 栈Stack
3.1栈的定义(逻辑结构)
栈(stack)是只允许在一端进行插入或删除操作的线性表。空栈是没有元素的栈。栈底是不允许插入或删除的一端,称为栈底元素。栈顶是允许插入或删除的一端,称为栈顶元素。
栈的特点是后进先出(LIFO)。
3.2栈的基本操作
lnitStack(&S):初始化栈。构造一个空栈s,分配内存空间。
DestroyStack(&L):销毁栈。销毁并释放栈s所占用的内存空间。
Push(&S,x):进栈。若栈S未满,则将x加入使之成为新栈顶。
Pop(&s,&x):出栈。若栈S非空,则弹出栈顶元素,并用x返回。
GetTop(S,&x):读栈顶元素。若栈s非空,则用x返回栈顶元素。此为常用操作。
StackEmpty(S):判空操作。判断一个栈s是否为空。若s为空,则返回true,否则返回false。
n个不同元素进栈,出栈元素不同排列的个数为卡特兰数(1/n+1)C上n下2n。
3.3栈的存储结构Stack(物理结构)
3.3.1栈的顺序存储SqStack
//伪代码
//顺序栈的定义
#define MaxSize 10//定义栈中元素的最大个数
typedef struct{
ElemType data[MaxSize];//静态数组存放栈中元素
int top;//栈顶指针
//int top01;//共享栈,两个栈共享一片空间 //判断共享栈满的条件是top+1=top01;
} SqStack;//顺序栈的存储空间大小为MaxSize*sizeof(栈顶类型)
//初始化栈
void InitStack(SqStack&S){
S.top=-1;//初始化栈顶指针
S.top=MaxSize;
}
//判断栈空
bool StackEmpty(sqstack S){
if(S.top==-1)//栈空
return true;
else
return false