我刚刚开始了我的第一堂 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; }
如果队列
size == 100
则为满,如果size == 0
,则为空。为什么很难检查?
但是,正如现在实施的那样,它认为size == 0
当且仅当front == rear
。这意味着,您可以从FloatQueue
中完全删除size
,而是检查front - rear == 0
是否 100。
但是:你必须考虑一件事:如果后端超过尺寸会发生什么?然后你肯定必须重新安排一些东西。我把它留给你找到一个好的解决方案,这可能意味着再次使用size
(提示:你不一定要在数组中移动数据)。
bool isFullQ (FloatQueue * pq)
{
if(pq->size==100)
return true;
}
bool isEmptyQ (FloatQueue * pq)
{
if(pq->front==pq->rear)
return false;
}