习题3.12 另类循环队列

*爱你&永不变心* 提交于 2020-02-29 01:42:35

习题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];
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!