GenericStack.cs 2.17 KB
Newer Older
Uwe Wienkop's avatar
Uwe Wienkop committed
1 2
using Microsoft.VisualBasic;
using System;
Uwe Wienkop's avatar
Uwe Wienkop committed
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
using System.Collections.Generic;
using System.Text;

// Erstellen Sie mit Hilfe einer Liste einen generischen Stapel (Stack), in dem beliebige Elemente
// gespeichert werden können.
// Ein Stack ist eine Datenstruktur, ähnlich wie ein Stapel auf Ihrem Schreibtisch. Das, was 
// zuoberst aufliegt, wird auch zuerst wieder heruntergenommen.
// Sie können einen Stapel leicht mithilfe einer Liste aufbauen. Hierfür benötigen Sie folgenden Methoden:
// - AddFirst: Als erstes Element einfügen
// - GetFirst(bool removeFromStack=true): Liefert das erste Element zurück und entfernt es vom Stapel; kann 
//            per removeFromStack unterbunden werden
// - Contains(T): Sucht nach dem übergebenen Element und liefert true/false zurück
// - GetEnumerator() : Ermöglicht einen Durchlauf durch den Stapel und liefert nach und nach alle Elemente zurück



namespace _06_UebgSaGenerics
{
Uwe Wienkop's avatar
Uwe Wienkop committed
21
    class GenericStack <T>
Uwe Wienkop's avatar
Uwe Wienkop committed
22
    {
Uwe Wienkop's avatar
Uwe Wienkop committed
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
        private class Element  // Element ist eine private Hilfsklasse der Klasse StringListe
        {
            public T obj;
            public Element next = null;
            public Element(T daten) { this.obj = daten; }
            public override string ToString() => obj.ToString();
        }

        Element anf = null, ende = null;
        int anz = 0;      // Sehr sinnvoll für Index-Ops
                          //public StringListe() { }

        public void AddFirst(T daten)
        {
            // 1. Leere Liste
            // 2. Es existiert mind. ein Element
            Element neuesElement = new Element(daten);   // Neues Element anlegen
            anz++;
            if (anf == null)                            // 1.Fall: Leere Liste?
                anf = ende = neuesElement;
            else
            {
                neuesElement.next = anf;                // 2. Fall
                anf = neuesElement;
            }
        }
        public T GetFirst(bool removeFromStack = true)
        {
            if (anf == null) throw new Exception("Stapel ist leer");

            T zwischen = anf.obj;
            if (removeFromStack == true) anf = anf.next;
            return zwischen;
        }
        


Uwe Wienkop's avatar
Uwe Wienkop committed
60 61
    }
}