C排队问题(练习)

C排队问题(练习),c,queue,C,Queue,我刚刚开始学习C语言中的队列的第一课,有人给了我一个创建队列的练习,在队列中添加元素和删除元素。但是,我在检查队列是否已满时遇到问题 #包括 typedef结构浮动队列 { 浮动数据[100]; 内部后部; 整数大小; 内锋; }浮动队列; typedef枚举{false,true}bool; void initQ(FloatQueue*pq); bool-isFullQ(FloatQueue*pq); bool-isEmptyQ(FloatQueue*pq); void addQ(FloatQ

我刚刚开始学习C语言中的队列的第一课,有人给了我一个创建队列的练习,在队列中添加元素和删除元素。但是,我在检查队列是否已满时遇到问题

#包括
typedef结构浮动队列
{
浮动数据[100];
内部后部;
整数大小;
内锋;
}浮动队列;
typedef枚举{false,true}bool;
void initQ(FloatQueue*pq);
bool-isFullQ(FloatQueue*pq);
bool-isEmptyQ(FloatQueue*pq);
void addQ(FloatQueue*pq,float x);
浮动删除Q(浮动队列*pq);
int sizeQ(浮动队列*pq);
void initQ(FloatQueue*pq)
{
pq->size=0;
pq->前部=pq->后部=0;
}
空干管()
{
浮动队列q1;
initQ(&q1);
addQ(&Q199.9);
addQ(&Q1888);
而(!isEmptyQ(&q1))
{
printf(“%f”,deleteQ(&q1));
}
}
int sizeQ(浮动队列*pq)
{
返回pq->尺寸;
}
bool isFullQ(FloatQueue*pq)
{
返回true;
}
bool isEmptyQ(FloatQueue*pq)
{
返回false;
}
无效addQ(浮动队列*pq,浮动x)
{
(pq->后)+;
(pq->数据[pq->后]=x;
(pq->尺寸)+;
}
浮动删除Q(浮动队列*pq)
{
(pq->前)+;
返回;
}

如果
size==100,则队列已满;如果
size==0,则队列为空。为什么很难检查这一点

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


但是:您必须考虑一件事:如果后端超出尺寸,会发生什么情况?那你肯定得重新安排一下。我留给您去寻找一个好的解决方案,这可能意味着再次使用
size
(提示:您不必在数组中移动数据)。

只需检查size==0(空)或size==100(满)您已经尝试了什么来解决您的问题?我建议您再次仔细检查代码,回顾你的每个职能部门应该做什么。您将大小变量添加到队列结构的原因是什么?这不应该反映队列的大小吗?在这种情况下,您的“删除队列”(实际上是去队列)不应该减小大小吗?另外,考虑一下您希望从de queue API返回什么。一个好的单元测试应该是重复{addQ(pq,1.0);deleteQ(pq);}1000次。我想你当前的代码会有一个错误。
#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;
}
bool isFullQ (FloatQueue * pq)
{
  if(pq->size==100) 
  return true;
}

bool isEmptyQ (FloatQueue * pq)
{
  if(pq->front==pq->rear)
  return false;
}