来源 | OSCHINA 社区
作者 | 华为云开发者联盟-高彬滔
摘要:本文为大家详解数据结构中栈的定义和操作。
本文分享自华为云社区《数据结构:详细讲解栈的定义、栈的操作》,作者:高彬滔 。
1.栈的定义
栈(stack):是只允许在一端进行插入或者删除操作的线性表(即后进先出,大概可以理解为吃饱了吐出来)
其他常见操作:StackEmpty (S): 判断一个栈 S 是否为空,若 S 为空,则返回 true,否则返回 false
3. 顺序栈
3.1 顺序栈的定义# defineMaxSize 10 //定义栈中元素的最大个数
typedefstruct{
ElemType data[MaxSize]; //静态数组存放栈中的元素
inttop; //栈顶指针
}SqStack; //结构体重命名
声明一个顺序栈后就会在内存中分配一整片连续的空间,其中内存大小为:MaxSize*sizeof (ELemType)
voidtestStack{
SqStack S; //声明一个顺序栈
} 3.2 栈的初始化操作
由于栈顶指针 top 需要指向此时栈顶元素,所以让 top 指向 0 是不合理的,可以初始化让 top 指向 - 1; 判断一个栈是否为空,即判断 S.top 是否等于 - 1
初始化栈:
voidInittack(SqStack){
SqStack S; //声明一个顺序栈
S.top=- 1;
}
判断栈空:
bool StackEmpty(SqStack S){
if(S.top==- 1) //栈空
returntrue;
else
returnfalse; //非空
} 3.3 进栈操作
分析:
if(S.top==NaxSize- 1)
returnfalse;
S.top+= 1;
S. data[S.top]=x;
returntrue;
} 3.4 出栈操作bool Push(SqStack &S,ElemType &x){
if(S.top==- 1)
returnfalse;
x=S. data[S.top--];
returntrue;
} 3.5 读栈顶元素操作bool GetTop(SqStack &S,ElemType &x){
if(S.top==- 1)
returnfalse;
x=S. data[S.top];
returntrue;
} 4. 共享栈
两个栈共享同一片空间
# defineMaxSize 10 //定义栈中元素的最大个数
typedefstruct{
ElemType data[MaxSize]; //静态数组存放栈中的元素
inttop0; //0号栈栈顶指针
inttop1; //1号栈栈顶指针
}SqStack; //结构体重命名
初始化栈:
voidInitStack(ShStack &S){
S.top0= -1;
S.top1=MaxSize;
} 5. 链栈的定义
ElemType data; //数据域
structLinknode* next; //指针域
}*LiStack //栈类型定义
END