一个数组实现双堆桟--C语言

用一个数组实现双堆桟,最大的利用数组空间,使只要数组有空间就能入栈成功。

1、定义一个双堆桟

#define MaxSize
struct DStack{
    ElementType Data[Maxsize];
    int Top1;
    int Top2;
}S;
S.Top1=-1;
S.Top2=MaxSize;

2、实现双堆桟的入栈

void Push(struct DStack *PtrS, ElementType item, int Tag){
    //Tag用来区分是哪一个堆桟
    if(PtrS->Top2 - PtrS->Top1 == 1){
        printf("堆桟满");
        return;
    }
    if(Tag==1){
        PtrS->Data[++(PtrS->Top1)]=item;
    }else{
        PtrS->Data[--(PtrS->Top2)]=item;
    }
}

3、实现双堆桟的出栈

ElementType Pop(struct DStack *PtrS, int Tag){
    if(Tag==1){
        if(PtrS->Top1 == -1){
            printf("堆桟1空");
            return NULL;
        }else{
            return PtrS->Data[(PtrS->Top1)--];
        }
    }else{
         if(PtrS->Top2 == MaxSize){
            printf("堆桟2空");
            return NULL;
        }else{
            return PtrS->Data[(PtrS->Top2)++];
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值