#ifndef Klasse_Liste
#define Klasse_Liste



template<class T> class Liste
{

//	Definition der Listenelemente

	typedef class ListenElement* ZeigerListenElement;

	class ListenElement
	{
		public:			//	man kann innerhalb der Klasse Liste
						//	auf die Parameter zugreifen!
			
		//	Attribute der Klasse ListenElement
			T Inhalt;	//	Inhalt ist der templierte Datentyp
			ZeigerListenElement Nachfolger;


		//	Operationen


		//	Konstruktor	
			ListenElement(void) 
			{
				//	erzeugt ein Listen-Element mit Nachfolgerzeiger auf NULL
			}


		//	Destructor
			~ListenElement(void) {}
	};



//	Definition der Klasse Liste

	//	Attribute der Klasse Liste
	ZeigerListenElement Anfang;	//	zeigt auf das erste Listenelement
	ZeigerListenElement Ende;		//	zeigt auf das letzte Listenelement
	ZeigerListenElement Aktuell;	//	zeigt auf aktuelles Listenelement


	//	Operationen der Klasse Liste
	public:	//	auf sie kann auch von außerhalb der Liste zugegriffen werden

	//	Constructor	
		Liste(void)	
		{
			//	initialisiert die Zeiger Anfang, Ende und Aktuell mit NULL
		}

	//	Destructor - löscht alle Elemente der Liste		
		~Liste(void) {}

	//	Hinzufügen eines Elementes zur Liste - wird am Ende angehängt
	//	der Inhalt des Elementes muß übergeben werden (Inh)		
		void ElementHinzufuegen(T Inh)
		{
			//	es müssen der Fall der leeren Liste (Anfang == Null) 
			//	und der Liste, die schon mindestens ein Element enthält,
			//	unterschieden werden
		}

	//	Löschen des aktuellen Elementes
	//	dabei aktuell wird auf das vorhergehende Element bzw. den Anfang gesetzt!!!
		void ElementLoeschen(void) 
		{
			//	es muß der Fall der leeren liste gesonder betrachtet werden
		}

	//	Rückgabe des Inhaltes des aktuellen Listenelementes	
		T HoleInhalt(void) 
		{
			T Inh;
			//	es muß der Fall Aktuell == NULL ausgeschlossen werden
			return Inh;
		}

	//	Setzt das aktuelle Listenelement um ein Element weiter
	//	als Kontrollwert wird ein Integer-Wert übergeben, der 1 ist,
	//	falls das Ende erreicht ist, und sonst 0		
		int NachfolgendesElement(void) 
		{
			int endeerreicht;	// =0, falls Ende nicht erreicht ist, =1, falls Ende erreicht
			//	...	
			return endeerreicht;
		}

	//	Setzt das aktuell berachtete Listenelement auf den Anfang		
		void SetzeAufAnfang(void) {}

	//	Gibt die Anzahl der Listenelemente als Integer zurück	
		int Laenge(void) 
		{
			int anzahl;
			//	...
			return anzahl;
		}
};



#endif