C++两栈共享空间

 两栈共享空间就是定义一个数组,对数组的两端进行操作的栈。

共享栈的图示:

栈的插入操作步骤:

首先判断栈是否已经满了, 当top1 = top2 - 1时候,说明栈已经满了,不能再插入了

否则没有满,判断要往那个栈插入,往栈1插入,就--top1,因为从前往后插,  如果是栈2,就--top2,因为是从数组后往插入,所以插入的索引位置应该往前移动.

const int MAXSIZE = 100;
class stack{
    public:
        int data[MAXSIZE];
        int top1,top2;   //top表示头位置, rear表示数组的尾操作
        
    stack(){
    top1 = -1;             //利用构造函数,初始化栈,当top=-1  和rear=MAXSIZE时候为空栈
    top2 = MAXSIZE;
    }

    //当共享空间栈满的条件是,top1 = top2-1;  top从前往添加元素,top2从后往前添加元素
    void push(int i, int input_data){    
        if(top1 == top2 - 1){
            couut<<"栈满了"<<endl;
        } 
        else{
            if(i == 1){
                data[++top1] = input_data;
            }
            if(i==2){
                data[--top2] = input_data;
            }
        }
    }
}    

 2.两栈共享空间出栈操作

出栈操作,想出哪个栈,就判断哪个栈是否为空即可,如想出栈1元素,就看栈1是否为空,与栈2是否为空,是否为满都没有关系.

栈1空的条件是top1=-1为空,否则不为空,当不为空的时候,返回数据并让指针前移动

return data[top1--]  是将数据先return后 再让top1前移动,表示减少一个元素

栈2为空的条件是 top1=MAXSIZE;否则不为空,  当不为空的时候,返回数据并让top2值后移。

int pop(int i){
    if(i==1){
        if(top1==-1){
            cout<<"栈1空了";
        }else{
            return data[top--];
        }
    }

    if(i==2){
        if(top2 == MAXSIZE){
            cout<<"栈2空了"<<endl;
        }else{
            return data[top2++];
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值