/*
Einfach
Verkettete Liste
Beispiel
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*******************************************
Verkettete Listen sind nichts anderes als
Strukturen die einen Pointer auf den eigenen
Strukturtyp enthalten. In diesem Fall ist
es *next. *next zeigt auf das nächste
Element der Liste. Ist die Liste zu Ende
muss *next der Wert NULL zugewiesen werden.
So wird Ende der Liste erkannt.
*******************************************/
typedef struct Points{
struct Points *next;
float x,y,z;
}Points3D;
/*Es entsteht tatsächlich eine Kette
----------- -----------
| | | |
|points01 | |points01 |
| *next->| *next-> u.s.w.
----------- -----------
*/
/********************************************
Diese Funktion erweitert die Liste um ein
Element.
*********************************************/
Points3D *addPoint(float x,float y,float z,Points3D *p)
{
//Speicher für das neue Element anfordern
p->next = (Points3D*)malloc(sizeof(Points3D));
//Den Zeiger um ein Element weiteschieben
p=p->next;
//Die Werte zuweisen
p->x=x;
p->y=y;
p->z=z;
//next wird auf NULL gesetz.Das ist das
//vorläufige Ende der Liste;
p->next=NULL;
//Pointer auf das neue Listenelement
//wird zurüchgegeben
return p;
}
//points01 zeigt auf
//ein Glied der Kette
Points3D *points01,*firstpoint;
//firstpoint merkt sich
//den Beginn der Kette
int main(int argc,char *argv[])
{
int c;
float x,y,z;
//Liste Initialisieren
points01=(Points3D*)malloc(sizeof(Points3D));
points01->next=0;
points01->x=0;
points01->y=0;
points01->z=0;
firstpoint=points01;
//Eingabeschleife
do
{
//Drei Werte x y und z eingeben
printf("\nEingabe x: ");
scanf("%f",&x);
printf("\nEingabe y: ");
scanf("%f",&y);
printf("\Eingabe z: ");
scanf("%f",&z);
printf("x=%f y=%f z=%f \n\n\nListe:"
,x,y,z);
//Neuen Datensatz an die Liste anhängen
points01=addPoint(x,y,z,points01);
//Gesamte Liste Ausgeben
//Pointer auf den Anfang der Liste setzen
points01=firstpoint;
//Während das Ende der Liste nicht erreicht
//wurde
while(points01->next != NULL)
{
//Pointer 1 Element Weiterschieben
points01=points01->next;
printf("\nx=%f y=%f z=%f ",
points01->x,points01->y,points01->z);
}
}while(1);
return 0;
}