2016-12-11 6 views
1

Ich kann wirklich nicht verstehen, was mit meinem Code falsch ist.Wie man Element zur Warteschlange hinzufügt

Alles ist in Ordnung, wenn ich das erste Element hinzufüge, aber danach funktioniert es nicht. Wenn ptr NULL ist, tritt es in die While-Schleife ein. Gibt es ein Problem beim Überprüfen, ob null ist?

struct Car 
{ 
    int startTime; 
    char *model; 
    char *code; 
    char *location; 
    struct Car *next; 
    int deptEnterTime; 
    bool waitingForFraming; 
    bool waitingForPainting; 
    bool waitingForPolishing; 
    bool waitingForEngine; 
    bool waitingForElectronic; 
    bool waitingForIndoor; 
    bool waitingForTest; 
}; 

struct Car *head = NULL; 
void insert(int startTime, char *model, char *code) 
{ 
    /*create a link*/ 
    struct Car *link = (struct Car*) malloc(sizeof(struct Car)); 

    link->startTime= startTime; 
    link->model = model; 
    link->code = code; 
    link->waitingForFraming=true; 
    link->waitingForPainting=false; 
    link->waitingForPolishing=false; 
    link->waitingForEngine=false; 
    link->waitingForElectronic=false; 
    link->waitingForIndoor=false; 
    link->waitingForTest=false; 

    if(head == NULL) 
    { 
     head = link; 
    } 
    else 
    { 
     struct Car *ptr; 
     ptr = head->next; 

     while(ptr != NULL) 
     { 
      ptr = ptr->next; 
     } 
     ptr = link; 

    } 
} 

Antwort

0

für den Anfang müssen Sie next das Datenelement gesetzt für das hinzugefügte Element auf NULL.

struct Car *link = (struct Car*) malloc(sizeof(struct Car)); 

link->next = NULL; 
//... 

Dieser Teil der Funktion ist auch falsch

else 
{ 
    struct Car *ptr; 
    ptr = head->next; 

    while(ptr != NULL) 
    { 
     ptr = ptr->next; 
    } 
    ptr = link; 

} 

Es sollte wie

else 
{ 
    struct Car *ptr = head; 

    while(ptr->next != NULL) 
    { 
     ptr = ptr->next; 
    } 
    ptr->next = link; 

} 

sind berücksichtigen, geschrieben werden, dass, wenn Sie gehen Elemente an das Ende des hinzufügen Liste dann sollten Sie mindestens eine zweiseitige Liste deklarieren. Andernfalls ist das Hinzufügen von Elementen am Ende der Liste ineffizient.

+0

funktioniert dank dir – hkn

+0

@hkn ich bin froh. :) –

0

Sie sollten es zuweisen nutzbare Struktur nicht nächste zu halten, ist hier, wie Sie es tun könnte:

struct Car *ptr = head; 
while(ptr->next != NULL) 
{ 
    ptr = ptr->next; 
} 
ptr->next = link; 

Und ich würde vorschlagen, Link-> neben gesetzt zu vermeiden, auf NULL dort Zufallsdaten :

.... 
link->waitingForTest=false; 
link->next=NULL; 

if(head == NULL) 
..... 
+0

bekommen segmentierung fehler wenn ich das tat .. – hkn

Verwandte Themen