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