一、栈的基本概念
栈是只允许在一端进行插入和删除操作的(受限)线性表
栈顶:允许插入和删除的一端
栈低:不允许插入和删除的一端
二、栈的基本操作
InitStack(&S):初始化一个空栈S;
StackEmpty(S):判断栈是否为空,空返回true,否则false;
Push(&S,x):进栈,若栈s未满,则将x加入使之成为新栈顶;
Pop(&S,&x):出栈,若栈s非空,则弹出栈顶元素,并用x返回;
GetTop(S,&x):读栈顶元素,若栈S非空,则用x返回栈顶元素;
DestroyStack(&S):销毁栈,并释放栈S占用的存储空间;
三、栈的顺序存储结构
1.顺序栈的实现以及基本运算
代码如下(示例):
#define MaxSize 50
typedef struct{
ElementType data[MaxSize];
int top;//栈顶元素的下标
}SqStack;
//初始化栈
void InitStack(SqStack &S){
S.top=-1;
}
void testStack(){
SqStack S;//声明一个顺序栈
InitStack(S);
}
//判断是否为空栈
bool StackEmpty(SqStack S){
if(S.top=-1)
return true;
return false;
}
//新元素入栈
bool Push(SqStack &S,ElemType x){
if(S.top=MaxSize-1)
return false;
//S.top = S.top +1;
S.data[++S.top]=x;
return true;
}
//新元素出栈
bool Pop(Stack &S,ElemType &x){
if(S.top=-1)
return false;
x=S.data[S.top];
S.top=S.top-1;
return true;
}
//读取栈顶元素
bool GetTop(Stack S,ElemType &x){
if(S.top=-1)
return false;
x=S.data[S.top];
return true;
}
2.共享栈
两个栈的栈底设置在空间两端,栈顶向中间延伸。
#define MaxSize 10//define用于替换而不是声明,将文本MaxSize替换成后面的文本
typedef struct {
ElemType data[MaxSize];
int top0;
int top1;
}ShStack;
//初始化
void InitStack(ShStack &S){
S.top0=-1;
S.top1=MaxSize;
}
总结
关于408数据结构栈的基本概念及代码实现基本操作的学习记录