0

我刚刚开始了 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;
}
4

2 回答 2

0

队列是满的size == 100,如果是空的size == 0。为什么很难检查呢?

然而,正如它现在实施的那样,它认为size == 0当且仅当front == rear. 这意味着,您可以size从完全删除FloatQueue,而是检查是否front - rear == 0相应。100。

但是:您必须考虑一件事:如果后端超过尺寸会发生什么?那么你肯定需要重新安排一些东西。我把它留给你找到一个好的解决方案,这可能意味着size毕竟要再次使用(提示:你不一定要在数组中移动数据)。

于 2013-09-20T08:32:23.433 回答
0
bool isFullQ (FloatQueue * pq)
{
  if(pq->size==100) 
  return true;
}

bool isEmptyQ (FloatQueue * pq)
{
  if(pq->front==pq->rear)
  return false;
}
于 2013-09-20T09:07:43.033 回答