2016-12-28 43 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"); 
}