2017-05-07 5 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 
}; 

通常はキューに問題はありませんが、2番目の構造体と混乱します。

だから私のアイデア:助けるため

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

感謝。

答えて

0

まず、コードにいくつか間違いがあります。 ここでは、2番目の構造の意味と、新しい優先度キューを作成するための正しい機能について説明します。 また、コードに必要な変更を導入しました。

最初の構造体は、キュー内に単一のノードを定義します。 第2の構造は、単一のキューを表す -

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には2つのタスクがあります:それはプリオキュー構造体のためにメモリを割り当て、新しい構造体を初期化します。新しい構造体は空でなければなりません。つまり、サイズは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を'struct PrioQueue`と同義にすることができます。
  • 割り当てが失敗した場合、この関数はNULLを返すことができます。つまり、返されたポインタをチェックするのは呼び出し側コードのタスクです。
  • オブジェクトには2つのタイプがあります。キューノードと保持構造、キュー自体です。 1つの待ち行列オブジェクトと、各待ち行列のための多数のノードオブジェクトがあります。
  • キューノードの割り当ては、何かをキューにプッシュする場合にのみ行われます。空のキューにはノードがありません。
  • pqueue_deleteも作成して、すべてのノードをクリーンアップし、キュー自体に割り当てられたメモリを解放します。
+0

ありがとうございました。それは私をたくさん助けました。 – wit4r7

関連する問題