从队列中取消特定值?

时间:2016-12-28 13:35:07

标签: c algorithm data-structures

我必须实现一个应该执行的方法:

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

我想知道这是一个错误,比如复制粘贴还是某事?

1 个答案:

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