Hallo,
ich habe eine Aufgabe vor mir undzwar habe ich eine verkette Liste bekommen und ich soll 2 Funktionen erstellen,eine Funktion soll alle zahlen in dieser Liste addieren und die andere soll wenn der Zeiger auf Null zeigt eine neue Liste erstellen, die erste Funktion habe ich hinbekommen aber bei der zweiten Funktion verstehe ich es nicht wie ich das in ein Code schreiben soll.
Ich bin so weit gekommen bis jetzt
Die 2 Funktionen die zu bearbeiten sind sind ganz unten(sum up elements und insert at tail)
ich wollte mit dem list pointer so weit gehen bis es auf NULL zeigt und dann dort eine Number einfügen aber wenn ich dann versuche die Funktion in Main aufzurufen klappt das nicht so ganz.
Hoffe mir kann da jemand helfen und mich aufklären.
Mit freundlichen Grüßen
atiufi
ich habe eine Aufgabe vor mir undzwar habe ich eine verkette Liste bekommen und ich soll 2 Funktionen erstellen,eine Funktion soll alle zahlen in dieser Liste addieren und die andere soll wenn der Zeiger auf Null zeigt eine neue Liste erstellen, die erste Funktion habe ich hinbekommen aber bei der zweiten Funktion verstehe ich es nicht wie ich das in ein Code schreiben soll.
Ich bin so weit gekommen bis jetzt
Die 2 Funktionen die zu bearbeiten sind sind ganz unten(sum up elements und insert at tail)
ich wollte mit dem list pointer so weit gehen bis es auf NULL zeigt und dann dort eine Number einfügen aber wenn ich dann versuche die Funktion in Main aufzurufen klappt das nicht so ganz.
C:
#include <stdio.h>
#include <stdlib.h>
// Datentyp fuer die Knoten der verketteten Liste. Die Listenelemente sind
// Zahlen. Ein Knoten besteht aus einer Zahl und aus einem Zeiger.
struct node {
int number;
struct node *next;
};
// Funktionsprototyp zum Hinzufuegen einer neuen Zahl in die Liste.
// Die Zahl wird am Listenkopf hinzugefuegt.
// Erhaelt die Zahl und den aktuellen Listenkopf als Parameter, liefert
// den neuen Listenkopf zurueck
struct node *insert_at_head(int x, struct node *list);
// Funktionsprototyp zum Anzeigen der Listenelemente. Erhaelt den Listenkopf
// als Parameter, hat keinen Rueckgabewert (void)
void display_list(struct node *list);
// Funktionsprototyp zum Addieren der Zahlen in der Liste. Erhaelt den
// Listenkopf, liefert die Summe der Zahlen in der Liste zurueck. Liefert 0
// zurueck fuer die leere Liste. Den Funktionsrumpf weiter unten ergaenzen!
int sum_up_elements(struct node *list);
// Funktionsprototyp zum Hinzufuegen einer neuen Zahl in die Liste.
// Die Zahl wird am Listenende hinzugefuegt.
// Erhaelt die Zahl und den aktuellen Listenkopf als Parameter, liefert
// den neuen Listenkopf zurueck. Den Funktionsrumpf weiter unten ergaenzen!
struct node *insert_at_tail(int x, struct node *list);
int main() {
// my_list ist ein Zeiger auf struct node. Urspruenglich NULL, Liste ist leer
struct node *my_list = NULL;
my_list = insert_at_head(10, my_list);
// Die Zahl 3 in die Liste hinzufuegen. Den zurueckgelieferten Zeiger
// der my_list zuweisen, d.h., my_list zeigt danach zum Knoten mit der Zahl
// "3".
my_list = insert_at_head(3, my_list);
// Noch ein paar weitere Zahlen einfuegen
my_list = insert_at_head(15, my_list);
// Jetzt ist 15 am Listenkopf!
my_list = insert_at_head(-4, my_list);
// Jetzt ist -4 am Listenkopf!
my_list = insert_at_head(99, my_list);
// Jetzt ist 99 am Listenkopf!
// Die Listenelemente anzeigen
display_list(my_list);
printf("Sum of the numbers: %d\n",sum_up_elements(my_list));
return(0);
}
// Implementierung der Funktion insert_at_head
struct node *insert_at_head(int x, struct node *z) {
struct node *new_node = malloc(sizeof(struct node));
if (new_node == NULL) {
printf("Fehler bei der Speicherallokation\n");
return(NULL);
}
// Die Zahl x in den neuen Knoten speichern
new_node->number = x;
// Verweis zum naechsten Knoten, naemlich zum aktuellen Listenkopf
new_node->next = z;
// Zeiger zum neuen Knoten zurueckgeben
return(new_node);
}
// Implementierung der Funktion display_list
void display_list(struct node *z) {
while (z != NULL) {
printf("%d ", z->number);
z = z->next;
}
printf("\n");
}
int sum_up_elements(struct node *z) {
int sum=0;
for(; z->next !=NULL;z=z->next){
sum +=z->number;
}
return(sum);
}
struct node *insert_at_tail(int x, struct node *list) {
struct node *new_node = malloc(sizeof(struct node));
if (new_node == NULL) {
printf("Fehler bei der Speicherallokation\n");
return(NULL);
}
for(;list->next!=NULL;list=list->next){
new_node->number=x;
}
return(new_node);
}
Hoffe mir kann da jemand helfen und mich aufklären.
Mit freundlichen Grüßen
atiufi