Tutorial 1_28

Verkettete Listen

______________________________________________________________________
// 1_28 Verkettete Listen

#include <stdio.h>
#include <string.h>

struct Listenelement
{
    char Name[50];
    int Munition;
    int Kampfstaerke;
    int Lebensenergie;

    // Zeiger auf das nächste Listenelement:
    Listenelement* Naechstes;
};

Listenelement* Letztes(void);
void Neues_Element(char* Name, int Munition, int Kampfstaerke, int Lebensenergie);
void Ausgabe(void);
void Liste_Loeschen(void);

Listenelement Liste;


void main(void)
{
    int auswahl=0;

    printf("Geben sie die Daten fuer den ersten Character ein:\n"
        "Achtung: Dieser Charcter kann nicht geloescht werden");
    printf("Geben sie Name, Munition, Kampfstaerke und Lebensenergie an\n"
        "Name:\n");
    scanf("%s", &Liste.Name);
    printf("Munition:\n");
    scanf("%d", &Liste.Munition);
    printf("Kampfstaerke:\n");
    scanf("%d", &Liste.Kampfstaerke);
    printf("Lebensenergie:\n");
    scanf("%d", &Liste.Lebensenergie);

    char Name[50];
    int Munition=0;
    int Kampfstaerke=0;
    int Lebensenergie=0;

    while(auswahl != 4)
    {
        printf("Was wollen sie tun?\n"
            "1. Einen Charakter speichern\n"
            "2. Die Liste der vorhandenen Charaktere einsehen\n"
            "3. Alle Charactere loeschen\n"
            "4. BEENDEN\n");
        scanf("%d", &auswahl);
        switch(auswahl)
        {
        case 1:
            printf("Geben sie Name, Munition, Kampfstaerke und Lebensenergie an\n"
                "Name:\n");
            scanf("%s", &Name);
            printf("Munition:\n");
                scanf("%d", &Munition);
            printf("Kampfstaerke:\n");
            scanf("%d", &Kampfstaerke);
            printf("Lebensenergie:\n");
            scanf("%d", &Lebensenergie);
            Neues_Element(Name, Munition, Kampfstaerke, Lebensenergie);
            break;
        case 2:
            Ausgabe();
            break;
        case 3:
            Liste_Loeschen();
            printf("Alle Charactere bis auf den ersten wurden geloescht\n");
        default:
            break;
        }

    } // Ende while
}

void Neues_Element(char* Name, int Munition, int Kampfstaerke, int Lebensenergie)
{
    Listenelement* Element = new Listenelement;
    strcpy(Element->Name, Name);
    Element->Munition = Munition;
    Element->Kampfstaerke = Kampfstaerke;
    Element->Lebensenergie = Lebensenergie;
    Element->Naechstes = NULL;
    Listenelement* Zeiger = Letztes();
    Zeiger->Naechstes = Element;
}

Listenelement* Letztes(void)
{
    Listenelement* Zeiger = &Liste;
    while(NULL != Zeiger->Naechstes)
    {
        Zeiger = Zeiger->Naechstes;
    }
    return Zeiger;
}

void Ausgabe(void)
{
    Listenelement* Zeiger = &Liste;
    while(NULL != Zeiger)
    {
        printf("%s %d %d %d\n", Zeiger->Name, Zeiger->Munition, Zeiger->Kampfstaerke, Zeiger->Lebensenergie);
        Zeiger = Zeiger->Naechstes;
    }
}

void Liste_Loeschen(void)
{
    while(NULL != Liste.Naechstes)
    {
        Listenelement* Zeiger = & Liste;
        while(Letztes() !=  Zeiger->Naechstes)
            Zeiger = Zeiger->Naechstes;

        delete Letztes();
        Zeiger->Naechstes = NULL;
    }
}
______________________________________________________________________
Zurück