王道课后习题3.2.1:循环队列设置tag标志域判断队满队空

题目描述:

循环队列设置tag标志域判断队满队空

算法思想:

tag等于0的情况下,若因删除导致Q.Rear==Q.Front则为队空

tag等于1的情况下,若因插入导致Q.Rear==Q.Front则为队满

核心代码:

//tag等于0的情况下,若因删除导致Q.Rear==Q.Front则为队空
//tag等于1的情况下,若因插入导致Q.Rear==Q.Front则为队满
bool EnQueue(Queue &Q,int x)//,int tag)
{
    //if((Q.Rear%MaxSize==Q.Front)&&tag==1)
    //这里不需要再%MaxSize
    if((Q.Rear==Q.Front)&&tag==1)
        return false;
    Q.data[Rear]=x;
    Q.Rear=(Q.Rear+1)%MaxSize;
    Q.tag=1;//可能队满
    //这里其实挺有意思的,只有当同时满足Q.Rear==Q.Front)&&tag==1的时候才会return false
    //只要你入队了,你就有可能队满
//    if(Q.Rear==Q.Front)
//        tag=1;
    return true;
}
bool DeQueue(Queue &Q,int &x)//,int tag)
{
    if(Q.Rear==Q.Front&&tag==0)
        return false;
    x=Q.data[Front];
    Front=(Front+1)%MaxSize;
    Q.tag=0;//可能队空
    //只要你出队了,你就有可能队空
    return true;
}
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值