顺序栈
用顺序存储方式实现的栈
定义
#define MaxSize 10
typedef struct {
data[MaxSize]; //静态数组存放栈中元素
int top; //栈顶指针-->记录栈顶的数组下标
}SqStack;
初始化
//栈的初始化操作
//将栈顶指针指向-1
void InitStack(SqStack &S){
S.top=-1;
}
判空
//判断栈是否为空
/*
由于栈顶指针是指向当前的栈顶,也就是数组下标,初始化为-1,代表空栈,因此只需要判断栈顶指针是否为-1
*/
bool StackRmpty(SqStack S){
if(S.top==-1)
return true;
else
return false;
}
进栈
//进栈操作
//首先让栈顶指针指向操作的空间,然后进行赋值
bool Push(SqStack &S,ElemType x){
//判断栈是否满--->栈顶指针是否等于Maxsize-1
if(S.top==MaxSize-1)
return false;
S.data[++S.top]=x;
return true;
}
出栈
//出栈操作,并使用x将出栈的元素带出
bool Pop(SqStack &S,ElemType &x){
//判断是否为空栈
if(S.top==-1)
return false;
x=S.data[S.top--]; //首先将栈顶元素取出,然后指针下移,逻辑上表示已经出栈
return true;
}
取栈顶元素
//取栈顶元素
//大体步骤与出栈类似,不同的是没有移动栈顶指针
bool GetTop(SqStack &S,ElemType &x){
//判断栈是否为空
if(S.top==-1)
return false;
x=S.data[S.top]; //取出栈顶元素
return true;
}
共享栈
利用栈底位置相对不变的特性,让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在两端,两个共享栈向中间延申
定义
#define MaxSize 10
typedef struct{
ElemType data[MaxSize];
int top0;
int top1;
}ShStack;
//初始化
bool InitStack(ShStack &S){
S.top0=-1;
S.top1=MaxSize;
return true;
}
//判断栈满的条件
//if top0+1==top1