2016-12-28 118 views
-1

我要实现的是应该做的方法:从队列中取出特定值?

// 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; 
    } 

我不知道这是像复制粘贴或错误的错误?

+2

我们怎么能知道呢?我们只能猜测,这个问题太广泛了。你不提供[mcve]。我们不知道'queue_t'。 – Stargateur

+1

您的代码示例没有从队列中返回任何值,所以我的猜测是您需要通过'int * val'参数返回实际出列值,并返回状态结果。另外,如果这是一个循环缓冲区,那么'q-> size'是多余的(并且会导致并发访问问题)。 – Groo

回答

1

dequeue的返回值可能是为了告诉函数是否成功地将某些数据出队,而val应该保留出队数据(如果有的话)。

假设您的队列中有抱着int值的数组data,它可能是这样的:

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"); 
}