2017-05-07 7 views
0

Ich bin neu in Programmierung C. Ich versuche, viel zu programmieren, um besser zu werden :) Aber im Moment steckte ich an einem dummen Punkt fest.Wie erstelle ich eine neue Warteschlange

Ich habe eine Aufgabe, eine Prioritätswarteschlange zu erstellen. Ich habe diese beiden Strukturen am Anfang bekommen.

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 
}; 

Normalerweise habe ich keine Probleme mit einer Warteschlange, aber ich werde von der zweiten Struktur verwirrt.

Also meine Idee:

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

Danke für die Hilfe.

Antwort

0

Erstens gibt es mehrere Fehler in Ihrem Code. Ich erkläre Ihnen hier, was die zweite Struktur bedeutet und was die korrekte Funktion zum Erstellen einer neuen Prioritätswarteschlange sein soll. Ich habe auch notwendige Änderungen in Ihrem Code eingeführt.

Die erste Struktur definiert einen einzelnen Knoten in Ihrer Warteschlange. Während die zweite Struktur stellt eine einzelne Warteschlange -

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

struct q_elem_s * Wurzel ist der Kopf-Knoten oder der Wurzelknoten.

sollte Ihre Funktion aussehen -

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

Vielen Dank. Es hat mir sehr geholfen. – wit4r7

0

Ihre Funktion pqueue_new hat zwei Aufgaben: Sie weist Speicher für eine prio-Warteschlangenstruktur zu und initialisiert die neue Struktur. Die neue Struktur sollte leer sein, dh ihre Größe ist Tero und sie hat noch keine Knoten. Der Rückgabewert muss der Griff in die neuen Prio Warteschlange:

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

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

    return q; 
} 

Dinge zu beachten:

  • Ihr aktueller Code hat keinen Typen PrioQueue, nur struct PrioQueue. Sie können tyedef verwenden, um PrioQueue ein Synonym für'struct PrioQueue` zu ​​machen.
  • Die Funktion kann NULL zurückgeben, wenn die Zuweisung fehlschlägt. Das bedeutet, dass es die Aufgabe des aufrufenden Codes ist, den zurückgegebenen Zeiger zu überprüfen.
  • Beachten Sie, dass Sie zwei Arten von Objekten haben: Die Queue-Knoten und die Holding-Struktur, die Queue selbst. Es gibt ein Warteschlangenobjekt und null bis viele Knotenobjekte für jede Warteschlange.
  • Die Zuweisung von Warteschlangenknoten findet nur statt, wenn Sie etwas in die Warteschlange schieben. Eine leere Warteschlange hat keine Knoten.
  • Sie sollten auch eine passende pqueue_delete schreiben, die alle Knoten bereinigt und den für die Warteschlange selbst zugewiesenen Speicher freigibt.
+0

Thank you very much. Es hat mir sehr geholfen. – wit4r7

Verwandte Themen