2017-05-07 109 views
0

我是編程C中的新手。我嘗試編程很多以變得更好:) 但是此刻我陷入了一個愚蠢的地步。如何創建一個新的隊列

我有一個任務來創建一個優先級隊列。我在一開始就得到了這兩個結構。

struct q_elem_s { 
char* name; 
int priority; 
struct q_elem_s *next; 
}; 

struct PrioQueue { 
int size;  //size of the queue 
q_elem *root; //Beginn of the queue 
}; 

通常我沒有隊列的問題,但我從第二個結構混淆。

所以我的想法:

PrioQueue* pqueue_new() { 
q_elem = malloc(sizeof(q_elem_s)); 
return NULL; 
} 

感謝您的幫助。

回答

0

首先你的代碼有幾處錯誤。 我在這裏解釋了第二個結構意味着什麼,以及創建新優先級隊列的正確函數是什麼。 我也在你的代碼中引入了必要的修改。

第一個結構定義隊列中的單個節點。 雖然第二結構表示單個隊列 -

struct PrioQueue { 
    int size;  //size of the queue 
    struct q_elem_s *root; //Beginn of the queue 
}; 

結構q_elem_s *根是頭節點或根節點。

你的功能應該像 -

struct PrioQueue* pqueue_new() { 
    struct PrioQueue *queue = malloc(sizeof(struct PrioQueue)); 
    queue->root = NULL; 
    return queue; 
} 
+0

非常感謝。這對我幫助很大。 – wit4r7

0

您的函數pqueue_new有兩個任務:它爲prio隊列struct分配內存,並使新結構生命週期。新的結構應該是空的,就是它的大小是tero,它還沒有任何節點。返回的值必須是句柄新PRIO隊列:

PrioQueue* pqueue_new() { 
    PrioQueue *q = malloc(sizeof(*q)); 

    if (q) { 
     q->size = 0; 
     q->root = NULL; 
    } 

    return q; 
} 

注意事項:

  • 您當前的代碼不會有型PrioQueue,只有struct PrioQueue。您可以使用tyedef使PrioQueue成爲構造PrioQueue的同義詞。
  • 該功能在分配失敗時可以返回NULL。這意味着調用代碼的任務是檢查返回的指針。
  • 請注意,您有兩種類型的對象:隊列節點和保持結構,隊列本身。每個隊列有一個隊列對象和零到許多節點對象。
  • 隊列節點的分配只會在您將某些內容推送到隊列時發生。一個空隊列沒有任何節點。
  • 您還應該編寫一個匹配pqueue_delete,清除所有節點並釋放爲隊列本身分配的內存。
+0

非常感謝你。這對我幫助很大。 – wit4r7