c - 从队列中取出特定值?

标签 c algorithm data-structures

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

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

相关文章:

c - 这个函数如何在不使用任何指针的情况下工作?

c - 如何在 Mac OSx 上处理来自外部程序的数据

c - 从 csv 文件读入二维数组并使用 c 对数组进行排序

algorithm - 有向循环图的最长路径

algorithm - 二维空间中点的排序

c - 在我输入负整数之前,如何让这段代码扫描一个整数序列?我以为 %u 不会取负整数

algorithm - 根据图案(展开)折叠一张纸并给出层的顺序

java - 调整圆形数组的大小,在双端队列实现中

java - 为什么红黑树中这两个节点不是黑色的?

javascript - `String.match` 数组的结果如何包含索引、组等?