2014-10-22 155 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