2014-10-22 41 views
0

我的任务是编写添加到队列后面并从前面移除的函数。C编程使用FIFO从队列中删除(先进先出)

我已经写信给添加到队列功能:

void queue_put(Queue *q, Qitem *new_item) 
{ 

    new_item->next = NULL; 

    if (queue_empty(q)){ 

      q->front = new_item; 

    } else { 

      q->back->next = new_item; 
    } 

    q->back = new_item; 

} 

这工作得很好,但我努力写从队列的前面删除功能:

Qitem * queue_get(Queue *q) 
{ 
    if (queue_empty(q)) { 

      return (Qitem *)0; 

    } else { 

      Qitem front_item = q->front; 
      q->front = q->front->next; 
      return front_item; 
    } 

} 

以上是我最好的尝试,但它不起作用,我想知道是否有人可以帮忙?我意识到这可能是一个基本问题,但我很新。

+0

在这种情况下,您应该发布一个简短正确的可编译示例。 – 2501 2014-10-22 10:42:03

+0

问题在于它包含许多需要编译的文件的程序的一部分,并且不可能将其全部发布在这里。我认为从C队列中排除某些东西可能是相当普遍的做法,但如果不是,我会继续研究,看看我能否找到答案。不管怎么说,还是要谢谢你。 – Neil 2014-10-22 10:49:13

+0

当队列中的* last *项目被删除时,您的队列忽略空值 - 设置返回指针。 – WhozCraig 2014-10-22 10:49:30

回答

0

这个怎么样?

Qitem * queue_get(Queue *q) 
{ 
    if (queue_empty(q)) { 

      return (Qitem *)0; 

    } else { 

      Qitem *front_item = q->front; 
      Qitem *back_item = q->back; 
      q->front = q->front->next; 
      if (front_item == back_item) { 
       q->back = NULL; // single element 
      } 
      return front_item; 
    } 
} 
+0

这似乎为我工作。非常感谢你! – Neil 2014-10-22 10:58:01