C排队问题(练习)
我刚刚开始学习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
#包括
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;
}