public class Queue{  //Die Queue zu A22 

	private int z=0; //Zaehler fuer length-Methode

	class Eintrag{
		Object inhalt;
		Eintrag next;
		Eintrag(Object inhalt, Eintrag next){
			this.next = next;
			this.inhalt = inhalt;
		}
	}
	
	Eintrag ende;
		
	public void enQueue(Object x){
		if (ende==null){
			ende=new Eintrag(x, null);
			ende.next=ende;
		}
		else ende.next=new Eintrag(x, ende.next);
		z++;
	}
	
	public Object deQueue(){
		if(ende==null){
			Object temp=ende;
			Eintrag ende=null;
			return temp;
			
		}
		else{
			Object x=ende.inhalt;
			if(ende.next==ende) ende=null;
			else{
				Eintrag vorletztes=ende.next;
				while(vorletztes.next!=ende){
					vorletztes=vorletztes.next;
				}
				vorletztes.next=ende.next;
				ende=vorletztes;
			}
		z--;
		return x;
		}
	}

	public int length(){
		return z;
	}
	
	public String toString(){
		String text = "Queue (Laenge "+length()+")\n";		
		if(ende!=null){
			Eintrag temp=ende;
			do{ 
				if(temp.next!=ende){
					temp = temp.next;
					text += temp.inhalt+", ";
				}
				else{ // das letzte Glied der Kette ohne Trennzeichen ausgeben
					temp = temp.next;
					text += temp.inhalt+"";
				}
			}while(temp!=ende);
		}
		return text;
	}

	public String toString(String ts){
		String text = "Queue (Laenge "+length()+")\n";		
		if(ende!=null){
			Eintrag temp=ende;
			do{
				if(temp.next!=ende){
					temp = temp.next;
					text += temp.inhalt+ts;
				}
				else{ // das letzte Glied der Kette ohne Trennzeichen ausgeben
					temp = temp.next;
					text += temp.inhalt+"";
				} 
			}while(temp!=ende);
		}
		return text;
	}
	
	public Object[] toArray(){
		int l = length();
		Eintrag A = ende.next;
		Object[] X = new Object[l];

		for(int i=0;i<l;i++){
			X[i] = A.inhalt;
			A = A.next;
		}
		return X;
	}
	
}
