目录
下一篇: 队列定义和顺序、链式
一、栈的基本概念
栈(Stack)是只允许在一端进行插入或删除操作的线性表
重要元素:栈顶、栈底、空栈
扫描二维码关注公众号,回复:
13146230 查看本文章
特点:后进先出(LIFO)
操作:创建、销毁、增(进栈push)删(出栈pop)、读取(查、只访问栈顶元素)、判空、
常考题型
进栈顺序和合法出栈
卡特兰数:n个不同元素进栈,出栈元素不同排列的个数为
小结:
二、栈顺序实现
#define MaxSize 10
typedef struct{
int data[MaxSize];//静态数组存放栈中元素
int top;//栈顶指针
}SqStack;
//初始化
void InitStack(SqStack &S){
S.top=-1;//初始化栈顶指针
}
//判空
bool StackEmpty(SqStack S){
return S.top==-1;
}
bool Push(SqStack &S,int e){
if(S.top==MaxSize-1)return false;//栈满
S.top+=1;//指针+1
S.data[S.top]=e;//新元素入栈
return true;
}
bool Pop(SqStack &S,int &x){
if(S.top==-1)return false;//栈空
x=S.data[S.top];//栈顶的值赋给x
S.top--;//栈顶指针下移
return true;
}
bool GetTop(SqStack &S,int &x){
if(S.top==-1)return -1;
x=S.data[S.top];
return true;
}
//共享栈:当用静态数组实现栈且分配大量空间时
//我们可以使用多个栈共享存储空间的方式
typedef struct{
int data[MaxSize];
int top0;//0号栈顶指针
int top1;//1号栈顶指针
}ShStack;
//共享栈初始化
void InitShStack(ShStack &S){
S.top0=-1; //初始化栈顶指针
S.top1=MaxSize;
}
//共享栈栈满
bool ShEmpty(ShStack &S){
return S.top0+1==S.top1;
}
共享栈内存:
栈的链式实现
Push操作:对单链表进行头插法进行插入就是进栈
Pop操作:规定只能对头结点进行后删操作