C队列问题(练习)

时间:2013-09-20 08:20:01

标签: c queue

我刚刚在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;
}

2 个答案:

答案 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;
}