共享栈的定义及基本操作的代码实现
所用编译器:Visual Studio Code 1.42.1 C++环境
#include
#define MaxSize 15
//定义int别名为ElemType
typedef int ElemType;
//栈的数据结构表示
typedef struct{
ElemType data[MaxSize];
int top0;
int top1;
}ShStack;
//初始化共享栈
void InitStack(ShStack &S){
S.top0=-1;
S.top1=MaxSize;
for(int i=0;i<MaxSize;i++){
S.data[i]=-2;
}
}
//初始化栈0
void InitStack0(ShStack &S){
S.top0=-1;
}
//初始化栈1
void InitStack1(ShStack &S){
S.top1=MaxSize;
}
//判满操作
bool ShStackMax(ShStack S){
return(S.top0+1==S.top1);
}
//栈0判空操作
bool ShStackEmpty0(ShStack S){
return(S.top0==-1);
}
//栈1判空操作
bool ShStackEmpty1(ShStack S){
return(S.top0==MaxSize);
}
//栈0进栈操作
bool Push0(ShStack &S,ElemType x){
if(S.top0+1==S.top1)
return false;
S.data[++S.top0]=x;
return true;
}
//栈1进栈操作
bool Push1(ShStack &S,ElemType x){
if(S.top0+1==S.top1)
return false;
S.data[--S.top1]=x;
return true;
}
//栈0出栈操作
bool Pop0(ShStack &S,ElemType &x){
if(S.top0==-1)
return false;
x=S.data[S.top0--];
return true;
}
//栈1出栈操作
bool Pop1(ShStack &S,ElemType &x){
if(S.top1==MaxSize)
return false;
x=S.data[S.top1++];
return true;
}
//栈0读栈顶元素
bool GetTop0(ShStack S,ElemType &x){
if(S.top0==-1)
return false;
x=S.data[S.top0];
return true;
}
//栈1读栈顶元素
bool GetTop1(ShStack S,ElemType &x){
if(S.top0==MaxSize)
return false;
x=S.data[S.top1];
return true;
}
//销毁共享栈
bool DestoryStack(ShStack &S){
S.top0=-1;
S.top1=MaxSize;
return true;
}
//进行测试
int main(){
ShStack S;
InitStack(S);
ElemType x,y,z,a,b,c,m,n;
//给栈0插入一些数
Push0(S,3);
Push0(S,6);
Push0(S,4);
Push0(S,2);
Push0(S,7);
//给栈1插入一些数
Push1(S,12);
Push1(S,7);
Push1(S,9);
Push1(S,4);
Push1(S,2);
//删除栈0一些元素
Pop0(S,x);
Pop0(S,y);
Pop0(S,z);
printf("删除栈0的第一个栈顶元素为%d\n",x);
printf("删除栈0的第二个栈顶元素为%d\n",y);
printf("删除栈0的第三个栈顶元素为%d\n",z);
//删除栈1一些元素
Pop1(S,a);
Pop1(S,b);
Pop1(S,c);
printf("删除栈1的第一个栈顶元素为%d\n",a);
printf("删除栈1的第二个栈顶元素为%d\n",b);
printf("删除栈1的第三个栈顶元素为%d\n",c);
//栈0判空操作
if(ShStackEmpty0(S))
printf("栈0为空\n");
else
printf("栈0不为空\n");
//栈1判空操作
if(ShStackEmpty1(S))
printf("栈1为空\n");
else
printf("栈1不为空\n");
//共享栈判满操作
if(ShStackMax(S))
printf("栈已满\n");
else
printf("栈未满\n");
//读栈0栈顶元素
GetTop0(S,m);
printf("现在栈0的栈顶元素为%d\n",m);
//读栈1栈顶元素
GetTop1(S,n);
printf("现在栈1的栈顶元素为%d\n",n);
//销毁共享栈
DestoryStack(S);
printf("销毁后栈0的top指针值为%d\n",S.top0);
printf("销毁后栈1的top指针值为%d\n",S.top1);
}
//输出结果
PS D:\VSCode\第三章 栈和队列\共享栈> cd "d:\VSCode\ ջͶ\ջ\" ; if ($?) { g++ ջ.cpp -o ջ } ; if ($?) { .\ջ }
删除栈0的第一个栈顶元素为7
删除栈0的第二个栈顶元素为2
删除栈0的第三个栈顶元素为4
删除栈1的第一个栈顶元素为2
删除栈1的第二个栈顶元素为4
删除栈1的第三个栈顶元素为9
栈0不为空
栈1不为空
栈未满
现在栈0的栈顶元素为6
现在栈1的栈顶元素为7
销毁后栈0的top指针值为-1
销毁后栈1的top指针值为15