习题3.12 另类循环队列
这个题emmmm,还是有点意思的,我当时错了两次,后面百度加上查《大话数据结构》才发现问题所在。
我们先读一下题,另类循环队列,他是使用了一个循环数组作为了循环队列使用,然后队列的结构体里面含有
- 储存元素的数组:*Data
- 队列头指针:Front
- 队列中所含元素的数量:Count
- 队列中的最大容量: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];
}
}
来源:CSDN
作者:快乐风男hasaki
链接:https://blog.csdn.net/qq_45472201/article/details/104563741