共享栈:定义及基本操作的代码实现

共享栈的定义及基本操作的代码实现
所用编译器: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的第三个栈顶元素为90不为空
栈1不为空
栈未满
现在栈0的栈顶元素为6
现在栈1的栈顶元素为7
销毁后栈0的top指针值为-1
销毁后栈1的top指针值为15

你可能感兴趣的:(栈的基本操作,c++,数据结构,栈)