我必须实现一个应该执行的方法:
// int dequeue(queue_t* q, int* number);
但我想知道第二个参数的意义是什么,因为出队总是采用最后一个值。我使用循环缓冲区来实现它。我最初的想法是:
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;
}
我想知道这是一个错误,比如复制粘贴还是什么?
最佳答案
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");
}
关于c - 从队列中取出特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41363232/