1.栈的基本概念
2.栈的顺序存储结构
3.栈的链式存储结构
1.栈的基本概念
- 操作受限的线性表,只允许在一端进行插入和删除。操作特性:先进后出(LIFO)。
- 栈顶:可以进行删除和插入的一端
栈底:固定不变,不可进行插入和删除。 - 卡特兰数:n 个不同元素进栈,出栈元素不同排列可以计算。
- 一些基本操作
InitStrack(&S) //初始化空栈 S
Push(&S,x) //进栈
Pop(&S,&x) //出栈
GetTop(S,&x) //读取栈顶元素
StackEmpty(S) //判空
DestroyStack(&S) //销毁栈
2.栈的顺序存储结构
1)初始化
//栈的初始化--创
void InitStack(SqStack &S){
S.top = -1;
}
2)进栈
//进栈--增
bool Push(SqStack &S,ElemType x){
if(S.top == MaxSize-1)
return false;
S.data[++S.top] = x; //先指针加 1,再入栈
return ture;
}
3)出栈
//出栈--删
bool Pop(SqStack &S,ElemType &x){ //加了引用符号
if(S.top == -1)
return false;
x = S.data[S.top--]; //先出栈,再指针减 1
return ture;
}
4)读取栈顶的元素
//读取栈顶的元素--查
bool GetTop(SqStack S,ElemType &x){
if(S.top == -1)
return false;
x = S.data[S.top];
return ture;
}
5)栈的判空
//栈--判空
bool StackEmpty(SqStack S)
if(S.top == -1)
return true;
else
return false;
共享栈
- 逻辑上两个栈,物理上共享同片存储空间
- 栈满:top1 - top0 == 1
- 优点:更有效利用存储空间,发生上溢的可能性降低、存取时间复杂度O(1)
3.栈的链式存储结构
- 采用单链表实现,所有操作均在单链表表头进行
- 优点:不存在栈满上溢的情况
提高了效率 更便于多个栈共享存储空间