2012-04-14 11 views
0

Also habe ich diesen Code bereits bekam: http://pastebin.com/3wuFNWGAHinzufügen eines Knotens zu einer verknüpften Liste Stack in C

Und ich habe diese typedefs in einer .h-Datei bekam: http://pastebin.com/JTG9XHvW

ich meine Push-Funktion benötigen Hinzufügen eines Knotens zu my_stack durch Zuweisen von Speicher für den Knoten, Speichern der Daten (neues Element) in dem Knoten und Einfügen des Knotens an den Anfang des Stapels. Der Code läuft, aber wenn ich versuche, den Wert in my_stack-> top-> Daten zu drucken, nachdem ein neuer Wert auf den Stapel geschoben wurde, wird immer Null ausgegeben und nicht das Element, das ich angeblich auf den Stapel geschoben habe.

Für das Leben von mir kann ich nicht herausfinden, warum. Ich glaube nicht, dass ein Problem auftritt, wenn ich den neuen Knoten erstelle und den Wert in Daten speichere, also denke ich, dass es ein Problem gibt, wenn ich versuche, my_stack-> top-Punkt zum zuletzt hinzugefügten Knoten zu machen.

Dies ist auch mein erster Beitrag zu Stack Overflow. Ich hoffe, ich habe alles richtig gemacht.

Hier ist die Push-Funktion einen Wert auf den Stapel zu schieben:

void push(Stack *my_stack, int newElement) { 
    Node_s *newNode; 
    newNode = (Node_s *) malloc(sizeof(Node_s)); 
    if(newNode == NULL) { 
      printf("Error: malloc failed in push\n"); 
      exit(EXIT_FAILURE); 
    } 
    newNode->data = newElement; 
    newNode->next = my_stack->top; 
    my_stack->top = newNode; 
} 
+1

Bitte fügen Sie die * relevanten * Teile Ihres Codes dem Körper des Fadens hinzu – amit

+0

Ich fügte die Push-Funktion dem Körper hinzu. Ich glaube, das ist der relevante Teil für dieses Problem, aber ich bin mir nicht ganz sicher, was das Problem ist, so dass es schwierig ist, den relevanten Teil zu bestimmen. – FataOne

+0

Es scheint nicht das Problem zu sein, aber beachte, dass du 'Größe' nicht änderst, wenn du ein Element drückst. Außerdem: Können Sie auch die Beispieleingabe + Ausgabe und die erwartete Ausgabe hinzufügen? – amit

Antwort

1

Ihr Code wird Null für die Größe des Stapels drucken, wie Sie nie, dass zu erhöhen.

Es gibt auch 0 für das Element aus, weil der Typ des Datenfelds als double deklariert ist, aber Sie drucken es mit Ganzzahlspezifikator.

ändern:

printf("The value at the top of the stack is %d\n", my_stack->top->data); 

zu

printf("The value at the top of the stack is %lf\n", my_stack->top->data); 

behebt dieses Problem.

0

Es ist ziemlich klar!

Check this:

typedef struct Node_s { 
    double data; 
    struct Node_s* next; 
}Node_s; 

Daten als doppelt definiert.

Aber hier ...

push(my_stack, 100); 

Sie versuchen, einen int zu drücken.

Also ... vielleicht Ihre Überprüfung der Push-to-push(my_stack, 100.00); oder die typedef struct Node_s zu:

typedef struct Node_s { 
    int data; 
    struct Node_s* next; 
}Node_s; 
+0

Die Konvertierung ist kein Problem. Das Problem besteht nur beim Ausgabespezifikator. –

+0

Natürlich wäre es ein kleiner Fehler. Wie peinlich. Vielen Dank für die Hilfe, alle! Ich schätze es sehr. – FataOne

+0

Ja. Das Problem ist der Druck% d! –