2016-12-28 1 views
-1

私が行うことになっているメソッドを実装する必要があります。キューから特定の値をデキューしますか?

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

私はコピー貼り付けやsthのような間違いでしょうか?

+2

どのように我々が知っていることができます。

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

は、その後、それは次のように使用することができますか?私たちは推測することができますが、この質問は広すぎます。あなたは[mcve]を提供しません。 'queue_t'についてはわかりません。 – Stargateur

+1

あなたのコード例ではキューから値が返されないので、実際にデキューされた値を 'int * val'パラメータで返す必要があり、ステータス結果を返す必要があります。また、これが循環バッファーの場合、 'q-> size'は冗長です(並行アクセスに問題があります)。 – Groo

答えて

1

戻り値dequeueは、valがデキューされたデータ(存在する場合)を保持すると想定されているときに、関数が一部のデータを正常にデキューしたかどうかを示すためです。あなたのキューがint値を保持する配列dataを持っている、それは次のようになる可能性があると仮定すると

int d; 
if (dequeue(myQueue, &d) != QUEUE_IS_EMPTY) 
{ 
    printf("dequeued value is %d\n", d); 
} 
else 
{ 
    printf("not data available\n"); 
} 
関連する問題