习题3.12 另类循环队列

本文深入探讨了使用循环数组实现的另类循环队列,详细解析了队列的结构体设计,包括储存元素的数组、队列头指针、元素数量及最大容量。文章通过具体实例介绍了循环队列中元素位置的计算公式,并提供了添加和删除操作的AC代码,强调了正确返回类型的重要性。

习题3.12 另类循环队列
这个题emmmm,还是有点意思的,我当时错了两次,后面百度加上查《大话数据结构》才发现问题所在。
我们先读一下题,另类循环队列,他是使用了一个循环数组作为了循环队列使用,然后队列的结构体里面含有

  1. 储存元素的数组:*Data
  2. 队列头指针:Front
  3. 队列中所含元素的数量:Count
  4. 队列中的最大容量:Maxsize

然后我在总结下循环队列的特点。
首先: 循环队列是一个环,那么就有一个问题出现了,我们咋知道某个元素在队列里是从头指针开始数的第几个???
那么,循环队列的元素下标就有细微的改变。刚刚开始我便是因为读题不清加上从来没用过循环队列,从而WA了两次。
某个元素的求在队列中的位置的公式:
i=Q->Front+Q->Count)%Q->MaxSize
那这题也没啥障碍了。但还有一个要注意的点,就是删除函数,它的返回值是一个ElementType类型,那么我们不能返回bool类型。
AC代码

bool AddQ( Queue Q, ElementType X )
{
    if(Q->MaxSize==Q->Count)
    {
        printf("Queue Full\n");
        return false;
    }
    else
    {
        Q->Count++;
        Q->Data[(Q->Front+Q->Count)%Q->MaxSize]=X;
        return true;
    }
}
ElementType DeleteQ( Queue Q )
{
    if(Q->Count==0)
    {
        printf("Queue Empty\n");
        return ERROR;
    }
    else
    {
        Q->Count--;
        Q->Front=(Q->Front+1)%Q->MaxSize;
        return Q->Data[Q->Front];
    }
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值