|
mxListe.c |
/* mxListe.c */
#include "mxListe.h"
#include "mxTrap.h"
#include "mxFehler.h"
/* -------------------------------------------------------------------------------------------------------------------- */
/**************
** Fuktionen **
**************/
void ListeInitialisieren(tListe *Liste)
{
Liste->Anfang = NULL; /* eine leere Liste hat weder Anfangsknoten */
Liste->Ende = NULL; /* noch Endknoten; sonst waere sie nicht leer */
} /* ListeInitialisieren */
/* -------------------------------------------------------------------------------------------------------------------- */
int ListeLeer(tListe *Liste)
{
return((Liste->Anfang == NULL)); /* wo kein Anfang ist, da ist auch kein Ende */
} /* ListeLeer */ /* und somit gar nichts */
/* -------------------------------------------------------------------------------------------------------------------- */
void KnotenInitialisieren(tListenKnoten *Knoten, int aIndex)
{
Knoten->Vorgaenger = NULL; /* ein freier Knoten hat weder Vorgaenger */
Knoten->Nachfolger = NULL; /* noch Nachfolger; er weiss nur, welches */
Knoten->Index = aIndex; /* Feldelement er referenziert. */
} /* KnotenInitialisieren */
/* -------------------------------------------------------------------------------------------------------------------- */
void KnotenAnhaengen(tListe *Liste, tListenKnoten *Knoten )
{
if (Knoten->Vorgaenger || Knoten->Nachfolger) { /* Ist Knoten noch in anderer Liste ? */
SystemFehler(cKnotenNichtFrei); /* ja --> SystemFehler */
} else { /* nein --> an das Ende der Liste haengen */
Knoten->Vorgaenger = Liste->Ende; /* bisheriges Listenende wird Vorgaenger */
Knoten->Nachfolger = NULL; /* als Letzter hat er keine Nachfolger */
Liste->Ende = Knoten; /* Knoten wird Listenende */
if (!Liste->Anfang) { /* war Liste bisher leer ? */
Liste->Anfang = Knoten; /* ja --> Knoten wird auch Listenanfang */
} else { /* nein --> Knoten wird Nachfolger von */
Knoten->Vorgaenger->Nachfolger = Knoten; /* bisherigem Listenende */
}
}
} /* KnotenAnhaengen */
/* -------------------------------------------------------------------------------------------------------------------- */
tListenKnoten *KnotenAbhaengen(tListe *Liste)
{
tListenKnoten *KnotenP=NULL;
if ( Liste->Anfang == NULL ) { /* Abhaengen aus leerer Liste ? */
SystemFehler(cListeLeer); /* ja --> SystemFehler */
} else { /* nein --> ersten Knoten der Liste abhaengen: */
KnotenP = Liste->Anfang; /* Anfangsknoten bestimmen */
Liste->Anfang = KnotenP->Nachfolger; /* Anfang auf dessen Nachfolgerknoten setzen */
if ( Liste->Anfang == NULL) { /* war Knoten einziges Listenelement ? */
Liste->Ende = NULL; /* ja --> auch Ende zeigt auf nichts mehr */
} else { /* nein --> dann hat neuer Anfangsknoten */
Liste->Anfang->Vorgaenger = NULL; /* jetzt keinen Vorgaenger mehr */
}
KnotenP->Nachfolger = NULL; /* Knoten selbst befreien; Vorgaenger hatte */
} /* er sowieso keinen */
return(KnotenP);
} /* KnotenAbhaengen */
/* -------------------------------------------------------------------------------------------------------------------- */
void KnotenExtrahieren(tListe *Liste, tListenKnoten *Knoten )
{
if (((Knoten->Vorgaenger == NULL) /* Knoten schon frei, oder */
&& (Liste->Anfang != Knoten)) || (Liste->Anfang == NULL)) { /* Liste leer ? */
SystemFehler(cFalscheListe); /* ja --> Systemfehler */
} else { /* nein --> Knoten extrahieren */
if (Knoten->Vorgaenger == NULL) { /* ist Knoten Anfangsknoten der Liste? */
Liste->Anfang = Knoten->Nachfolger; /* ja --> Nachfolger wird neuer Anfang */
} else { /* nein --> Vorgaenger bekommt Nachfolger */
Knoten->Vorgaenger->Nachfolger = Knoten->Nachfolger; /* als Nachfolger */
}
if (Knoten->Nachfolger == NULL) { /* ist Knoten Endknoten der Liste? */
Liste->Ende = Knoten->Vorgaenger; /* ja --> Vorgaenger wird neues Ende */
} else { /* nein --> Nachfolger bekommt Vorgaenger */
Knoten->Nachfolger->Vorgaenger = Knoten->Vorgaenger; /* als Vorgaenger */
}
Knoten->Nachfolger = NULL; /* Vorgaenger- und Nachfolger-Verweise */
Knoten->Vorgaenger = NULL; /* loeschen */
}
} /* KnotenExtrahieren */
/* -------------------------------------------------------------------------------------------------------------------- */
int InitListe(void)
{
return TRUE;
}
Bei Problemen mit der Seite bitte eine Mail an Marek
Converted with C2HTML V0.669 by Iluvatar
Prozeßdatenverarbeitung