C 队列问题(练习)



我刚刚开始了我的第一堂 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;
}

最新更新