共享栈的简单实现(C语言)

本文介绍了如何使用C语言实现共享栈,共享栈是一种利用同一数组空间实现两个栈的方法,提高了空间利用率。文章详细讲解了共享栈的基本操作,包括入栈、出栈、读取栈顶元素和输出栈,并提供了代码实现及初始化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

认识共享栈

共享栈的本质就是一个数组存放两个栈,公用一个数组空间。由于顺序栈是创建时就固定了空间大小,而这些空间通常不会一下用完,共享栈可以提高空间的利用率。
在这里插入图片描述
通过设置两个栈顶游标即可很容易得把数组空间分成两个部分来操作管理。
在这里插入图片描述

基本操作

由于有两个栈,所以操作函数要写两遍分别对不同的栈进行操作。在主函数调用的时候可以使用函数指针(链接: C语言指针入门.)方便操作。

入栈
// 入栈
// A栈
bool PushA(ShStack *S, ElemType e){
   
    if((*S).topA + 1 == (*S).topB) return false;  // 栈满,返回错误
    (*S).data[++(*S).topA] = e;     // 数据存入
    return true;
}
// B栈
bool PushB(ShStack *S, ElemType e){
   
    // (*S).topA 和 S->topA 等价
    if(S->topA + 1 == S->topB) return false;  // 栈满,返回错误
    S->data[--S->topB] = e;
    return true;
}
出栈
// 出栈
// A栈
bool PopA(ShStack *S, ElemType *e){
   
    if(S->topA == -1) return false; //判空
    *e = S->data[S->topA--];
    return true;
}
// B栈
bool PopB(ShStack *S, ElemType *e){
   
    if(S->topB == MaxSize) return false; //判空
    *e = S->data[S->topB++];
    return true;
}
读取栈顶元素
// 读取栈顶元素
void GetTop(ShStack S, ElemType *top_A, ElemType *top_B){
      // 同时获取两个栈的栈顶
    if(S.topA == -1){
      // A栈判空
        printf("StackA is empty!\n");
    }else{
   
        *top_A = S.data[S.topA];    // 获取栈顶数据,通过指针返回
    }
    if(S.topB == MaxSize){
      // B栈判空
        printf("StackB is empty!\n");
    }else{
   
        *top_B = S.data[S.topB];    // 获取栈顶数据,通过指针返回
    }
}
输出栈
// 输出栈
void PrintStack(ShStack S){
   
    int a = S.topA + 1;
    int b = MaxSize - S.topB;
    if(S.topA == -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值