?
Danke dir, Th69. So ein dummer Fehler aber auch. Jetzt funktioniert alles. Bekomme auch die Ergebnisse heraus die es sein sollen.
Zu dir SeppJ:
Ja, die eine kleine habe ich beim Kopieren nicht mitkopiert. Habe den Code um einiges gekürzt.
Es ist auch noch eine verkettete Liste drin gewesen, deswegen der next Zeiger.
Außerdem hab es auch noch eine sequenziell gespeicherte Liste, die eben nicht die Zeiger, sondern die tatsächlichen Elemente enthielt. Die Übung diente lediglich dazu, den Unterschied zwischen diesen Listen zu verdeutlichen.
Die Aufgabenstellung beinhaltet, jede Liste zunächst auszugeben, den Durchschnittswert der Elemente zu berechnen und anschließend ein weiteres Element hinzuzufügen und das ganze nochmal zu machen.
An sich war die Aufgabe sehr einfach, wie ich empfinde. Hatte das ganze auch in 20 Minuten runtergeschrieben.
Zu deiner Befürchtung mit dem Element, dass ich eventuell verwerfe. In der createElement wird hierfür Speicherplatz reserviert und anschließend mit Beispielwerten gefüllt. Somit exestieren diese doch auch dort?!
Und ich habe schon verstanden, dass meine Liste nur Zeiger auf Elemente beinhaltet.
Trotzdem Danke für die schnelle Antwort.
Falls noch Interesse Interesse an den Funktionen besteht, stell hier mal den Header Code rein:
#ifndef __LISTDEFS_H
#define __LISTDEFS_H
#include <stdio.h>
#include <stdlib.h>
// Strukturdefinitionen fuer die unterschiedlichen Listen
typedef struct Element{
int id;
double value;
struct Element *next;
}Element;
typedef struct {
int maxSize;
int size;
Element daten[100];
} SList;
typedef struct {
int maxSize;
int size;
Element *daten[100];
} ZList;
typedef struct{
Element *start;
Element *ende;
} VList;
// Hilfsfunktionen zur Elementerzeugung und Listenaufbau
// Ein Element erzeugen
Element *createElement(int id, double val){
Element *e = (Element *) malloc (sizeof (Element));
e->id = id;
e->value = val;
return e;
}
//Sequenziell gespeicherte Liste
SList *createSList(){
SList *sList = (SList *) malloc (sizeof(SList));
Element *e;
sList->maxSize = 100;
e = createElement(0,25);
sList->daten[0] = *e;
free( e);
e = createElement(1,55);
sList->daten[1] = *e;
free(e);
e= createElement(2,75);
sList->daten[2] = *e;
free(e);
e= createElement(3,115);
sList->daten[3] = *e;
free(e);
sList->size = 4;
return sList;
}
ZList *createZList(){
ZList *zList = (ZList *) malloc (sizeof(ZList));
zList->size = 5;
zList->maxSize = 100;
zList->daten[0] = createElement(0,15);
zList->daten[1] = createElement(1,25);
zList->daten[2] = createElement(2,35);
zList->daten[3] = createElement(3,45);
zList->daten[4] = createElement(4,55);
return zList;
}
VList *createVList(){
// Liste initialisieren
VList *l = (VList *) malloc (sizeof(VList));
Element *p[4];
l->start = createElement(0,0);
l->ende = createElement(0,0);
// Einige Werte eintragen
p[0] = createElement(1,17);
p[1] = createElement(2,35);
p[2] = createElement(3,36);
p[3] = createElement(4,20);
// manueller Listenaufbau!!
l->start->next=p[0];
p[0]->next = p[1];
p[1]->next = p[2];
p[2]->next = p[3];
p[3]->next = l->ende;
l->ende->next = NULL;
return l;
}
#endif;