M
Ich sehe, du hast da einige Fehler in deinem Code untergebracht.
Du versuchst hier eine einfach verkettete Liste zu implementieren.
Hier mal ein paar Fehler, die du gemacht hast: ich werde hier jetzt nicht
alle aufzählen.
--
struct Element
{
int wert;
Element* next; // Element kennt er nicht.
struct Element* next; // so muesste es heißen.
};
oder du fügst folgende Zeile vorweg ein:
typedef struct Element Element;
--
Siehe auch die Definition von struct List.
--
In C ist es nicht erlaubt, Funktionen zu überladen.
d.h:
void setValue(struct List* l, int i);
void setValue(struct Element* e, int i);
innerhalb einer Datei ist nicht erlaubt.
--
Du verwendest den Struct Element eigentlich gar nicht.
Brauchst du auch nicht, es ist eventuell schöner die Daten von
den Verwaltungsinformationen (next,...) zu trennen. Dafür brauchst du dann
struct Element.
So, nun gebe ich dir mal eine erste Implementierung einer einfach verketteten
Liste, die du dann noch vervollständigen mußt und vor allem auch Sicherheits-
abfragen hinzufügen solltest.
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int wert;
} Element;
typedef struct List {
struct List* next;
Element* element;
} List;
void ListElementAdd(List* liste, Element* el) {
while (liste->next) liste = liste->next;
if (!liste->element) liste->element = el;
else {
List *neu = malloc(sizeof(*neu));
neu->element = el;
neu->next = NULL;
liste->next = neu;
}
}
List *ListCreate(void) {
List *neu = malloc(sizeof(*neu));
neu->next = NULL;
neu->element = NULL;
return neu;
}
Element *ElementCreate(void) {
Element *el = malloc(sizeof(*el));
el->wert = 0;
return el;
}
void ElementSetValue(Element *el, int value) {
el->wert = value;
}
void ElementPrint(Element *el) {
if (!el) printf("Element leer\n");
else printf("Wert: %d\n", el->wert);
}
void ListPrint(List *liste) {
int i = 0;
printf("======== Ausgabe Liste ========\n");
while (liste) {
printf("Liste: %d ", ++i);
ElementPrint(liste->element);
liste = liste->next;
}
}
int main(void) {
List* liste = ListCreate();
Element *el = ElementCreate();
ElementSetValue(el, 5);
ListElementAdd(liste, el);
el = ElementCreate();
ElementSetValue(el, 10);
ListElementAdd(liste, el);
ListPrint(liste);
return 0;
}
Ach ja, du solltest die Elemente und Liste auch anschließend wieder mit free()
freigeben.
Gruß mcr