共享栈

共享栈的实现与操作
本文介绍了如何使用一个数组来实现两个共享栈的数据结构,并详细解释了共享栈的初始化、入栈、出栈及获取栈顶元素等核心操作。
1.定义

    所谓共享栈就是利用一个数组实现两个栈. 先来看一下共享栈的数据结构

typedef struct SharedStack
{
    int top1;
    int top2;
    SeqStackType* data;
}SharedStack;
2. 初始化
void SharedStackInit(SharedStack* stack)
{
    if(stack == NULL)
    {
        return;//非法输入
    }
    stack -> top1 = 0;
    stack -> top2 = MAXSIZE;
    stack -> data = (SeqStackType*)malloc(sizeof(MAXSIZE));
    if(stack -> data == NULL)
    {
        return;//内存申请失败
    }
}

这里写图片描述

3. 第一个栈入栈
void SharedStackPush1(SharedStack* stack, SeqStackType value)
{
    if(stack == NULL)
    {
        return;//非法输入
    }
    if(stack -> top1 == stack -> top2)
    {
        return;//共享栈已满
    }
    stack -> data[stack -> top1++] = value;
}

这里写图片描述

4. 第二个栈入栈
void SharedStackPush2(SharedStack* stack, SeqStackType value)
{
    if(stack == NULL)
    {
        return;//非法输入
    }
    if(stack -> top1 == stack -> top2)
    {
        return;//共享栈已满
    }
    stack -> data[--stack -> top2] = value;
}

这里写图片描述

5. 第一个栈出栈
void SharedStackPop1(SharedStack* stack)
{
    if(stack == NULL)
    {
        return;//非法输入
    }
    if(stack -> top1 == 0)
    {
        return;//栈空
    }
    stack -> top1--;
}

这里写图片描述

6. 第二个栈出栈
void SharedStackPop2(SharedStack* stack)
{
    if(stack == NULL)
    {
        return;//非法输入
    }
    if(stack -> top2 == MAXSIZE)
    {
        return;//栈空
    }
    stack -> top2++;
}

这里写图片描述

7. 取第一个栈的栈顶元素
int SharedStackTop1(SharedStack* stack, SeqStackType* value)
{
    if(stack == NULL || value == NULL)
    {
        return 0;//非法输入
    }
    *value = stack -> data[stack -> top1 -1];
    return 1;
}

这里写图片描述

8. 取第二个栈的栈顶元素
int SharedStackTop2(SharedStack* stack, SeqStackType* value)
{
    if(stack == NULL || value == NULL)
    {
        return 0;
    }
    *value = stack -> data[stack -> top2];
    return 1;
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值