T
thefy
Gast
Hallo Leute,
ich versuche einen Stack zu erzeugen. Dieser soll aber durch Nodes und eine einfach verkette Liste erstellt werden.
Eigentlich funktioniert es fast komplett. Nur die Print Funktion macht Probleme. Der Fehler müsste denke ich in der Zuordnung von head liegen.
Da ich jetzt ja immer weiter runter gehe aber head auf den obersten Node zeigt.
Deswegen funktioniert die while function nicht und er gibt nur aus:
--Top--
4
3
2
1
Segmentation fault
Das wird durch folgende Test main Funktion erzeigt:
Das source File sieht so aus:
Was genau ist das Problem im Code? Könnt ihr mir eventuell sagen wie man das Lösen könnte. Gerne allgemein weil ich es ja auch verstehen möchte
Vielen Dank schon mal!
ich versuche einen Stack zu erzeugen. Dieser soll aber durch Nodes und eine einfach verkette Liste erstellt werden.
Eigentlich funktioniert es fast komplett. Nur die Print Funktion macht Probleme. Der Fehler müsste denke ich in der Zuordnung von head liegen.
Da ich jetzt ja immer weiter runter gehe aber head auf den obersten Node zeigt.
Deswegen funktioniert die while function nicht und er gibt nur aus:
--Top--
4
3
2
1
Segmentation fault
Das wird durch folgende Test main Funktion erzeigt:
Code:
int main(){
struct Stack* my_stack = new_stack("mystack");
printf("Add numbers from 1 to 4 in order to stack:\n");
push_value(my_stack, 1);
push_value(my_stack, 2);
push_value(my_stack, 3);
push_value(my_stack, 4);
print_stack(my_stack);
return 0;
}
Das source File sieht so aus:
Code:
struct Stack{
struct Node* top;
char stackname;
};
struct Node{
int data;
struct Node* next;
};
//Erzeuge einen neuen Stack mit dem gegebenen Namen (Name kann NULL sein)
struct Stack* new_stack(char* name) {
struct Stack* neu = (struct Stack*) malloc(sizeof(struct Stack));
neu->top = NULL;
neu->stackname = *name;
return neu;
}
//Lege den gegebenen Wert auf den stack. Diese Funktion erzeugt ein Node mit den gegeben Werten und legt es auf den stack.
void push_value(struct Stack* the_stack, int value) {
struct Node* neu = (struct Node*) malloc(sizeof(struct Node));
neu->data = value;
neu->next = the_stack->top;
the_stack->top = neu;
}
//Lege den gegebenen Node auf den stack. Diese Funktion ist für den Fall, dass ein Node schon vorhanden ist.
void push(struct Stack* the_stack, struct Node* new_node) {
new_node->next = the_stack->top;
the_stack->top = new_node;
}
//Gebe den Stack aus.
void print_stack(struct Stack* the_stack) {
printf("--Top--\n");
struct Node *head = the_stack->top;
struct Node *current = the_stack->top;
printf("%d\n", head->data);
while (head != (current = current->next)){
printf("%d\n", current->data);
}
printf("--Bottom--\n");
}
Was genau ist das Problem im Code? Könnt ihr mir eventuell sagen wie man das Lösen könnte. Gerne allgemein weil ich es ja auch verstehen möchte
Vielen Dank schon mal!