我必须实现一个应该执行的方法:
// int dequeue(queue_t* q, int* number);
但是我想知道第二个论点是什么意思,因为dequeing总是取最后一个值。我使用循环缓冲区来实现它。我最初的想法是:
int dequeue(queue_t* q, int* val) {
if(q->size==0){
printf("Queue is Empty\n");
return QUEUE_IS_EMPTY;
}
else {
printf("Dequeueing\n");
q->size--;
q->front++;
if (q->front == q->capacity)
{
q->front = 0;
}
}
return 0;
}
我想知道这是一个错误,比如复制粘贴还是某事?
答案 0 :(得分:1)
dequeue
的返回值可能是为了说明函数是否成功地将某些数据出列,而val
应该保留出列数据(如果有的话)。
假设您的队列中有一个数组data
,其中包含int
值,则可能是这样的:
int dequeue(queue_t* q, int* val)
{
if(q->size==0){
printf("Queue is Empty\n");
return QUEUE_IS_EMPTY;
}
else
{
printf("Dequeueing\n");
*val = q->data[q->front]; // Here you set the data value
q->size--;
q->front++;
if (q->front == q->capacity)
{
q->front = 0;
}
}
return 0;
}
然后它可以像:
一样使用int d;
if (dequeue(myQueue, &d) != QUEUE_IS_EMPTY)
{
printf("dequeued value is %d\n", d);
}
else
{
printf("not data available\n");
}