Geschrieben von afixl am 09.06.2005, 15:52

/*
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;
}

Bewertung Anzahl
5
100,0 %
2 Bewertungen