我刚刚在C的队列中开始了我的第一课,我接受了练习来创建队列,添加元素和删除元素到队列中。但是,我在检查队列是已满还是空时遇到问题。
#include <stdio.h> typedef struct FloatQueue { float data[100]; int rear; int size; int front; } FloatQueue; typedef enum {false, true} bool; void initQ (FloatQueue * pq); bool isFullQ (FloatQueue * pq); bool isEmptyQ (FloatQueue * pq); void addQ(FloatQueue * pq, float x); float deleteQ ( FloatQueue * pq); int sizeQ (FloatQueue * pq); void initQ (FloatQueue * pq) { pq->size = 0; pq->front = pq->rear = 0; } void main () { FloatQueue q1; initQ (&q1); addQ (&q1, 99.9); addQ (&q1, 888); while (!isEmptyQ(&q1)) { printf("%f", deleteQ (&q1)); } } int sizeQ (FloatQueue * pq) { return pq->size; } bool isFullQ (FloatQueue * pq) { return true; } bool isEmptyQ (FloatQueue * pq) { return false; } void addQ ( FloatQueue * pq, float x) { (pq->rear) ++; (pq->data[pq->rear]) = x; (pq->size) ++; } float deleteQ ( FloatQueue * pq ) { (pq->front)++; return; }
答案 0 :(得分:0)
如果size == 100
,则队列已满,如果size == 0
则为空。为什么难以检查?
但是,正如现在实施的那样,只有当size == 0
时才会保留front == rear
。这意味着,您可以完全从size
删除FloatQueue
,而是检查front - rear == 0
是否为size
。 100.
但是:你必须考虑一件事:如果后端超过尺寸会发生什么?那你肯定要重新排列一些东西。我留给你找一个好的解决方案,这可能意味着再次使用{{1}}(提示:你不一定要在数组中移动数据)。
答案 1 :(得分:0)
bool isFullQ (FloatQueue * pq)
{
if(pq->size==100)
return true;
}
bool isEmptyQ (FloatQueue * pq)
{
if(pq->front==pq->rear)
return false;
}