Ring - push Object

Status
Nicht offen für weitere Antworten.

Wusaa

Aktives Mitglied
Hallo,
habe nächste woche ne klausur und ich versteh das folgende stück quellcode einer Methode "push" aus einer Klasse "Ring" (doppeltverkettete liste) nicht richtig.

Also ich schreibe jetzt mal hinter jede Zeile was ich glaube was sie macht 🙂
Wäre super wenn mir jemand helfen könnte bzw. es korrigiert

Code:
public void push( RingObject element ) throws RingFull {
      if ( numberElements > size -1 ) throw new RingFull();   // anzahl der elemente müssen > als die verfügbare größe -1 sein

      if ( start == null ) {      // wenn kein erstes Element existiert
    	 start = end = new Node();  //da kein erstes Element existiert ist der Start = Ende = neuer Knoten der eingefügt wird
    	 start.element = element;                         //  verstehe ich nicht
         start.backward = start.forward = start;    //  verstehe ich nicht
         
      } else {   // Anfuegen eines neuen Knoten am Anfang "start") des Rings
         Node tempNode = new Node();   //  verstehe ich  nicht
         tempNode.element  = element;  //  verstehe ich nicht
         tempNode.backward = start;     //  verstehe ich nicht
 		 tempNode.forward  = end;    // ist ab hier bis
		 start.forward     = tempNode;
		 start             = tempNode;
		 end.backward      = start;  // hier die doppelte verkettung?
	 
      } // if ..else
      numberElements++;
   } // push( int )



MfG
 
Code:
public void push( RingObject element ) throws RingFull {
      if ( numberElements > size -1 ) throw new RingFull();   // anzahl der elemente müssen > als die verfügbare größe -1 sein

      if ( start == null ) {      // wenn kein Element existiert
        start = end = new Node();  //da kein erstes Element existiert ist der Start = Ende = neuer Knoten der eingefügt wird
        start.element = element;                         //  hier wird das start Element gesetzt und das ist genau das was du mit push oben übergibst
         start.backward = start.forward = start;    //  wenn du von deinem start Node eines zurück gehst bist du wieder beim start und wenn du einen vorwärts gehst bist du auch wieder beim start da es ja nur ein Element gibt
         
      } else {   // Einfügen eines neuen Elements in den Ring wenn schon ein start Node vorhanden ist
         Node tempNode = new Node();   //  neuen Node erstellen
         tempNode.element  = element;  //  dein übergebenes Element wird an den Node gehangen
         tempNode.backward = start;     //  wenn du von deinem neuen Node eins zurück gehst bist du wieder am anfang (start) da das Node ja an das ende gehangen wird

       tempNode.forward  = end;    // wenn du von deinem Temp Node eins vorwärts gehst bis du am ende(=start)

       start.forward     = tempNode; // wenn du jetzt von deinem start Node eines Vorwärts gehst bist du bei dem Node welches du gerade eingefügt hast

       start             = tempNode; //der neue Node wird der start Node

       end.backward      = start;  // dein Ende zeigt wieder auf den neuen Anfang
   
      } // if ..else
      numberElements++;
   } // push( int )

ich habe es mal versucht zu erklären hoffe es ist richtig so
 
Wusaa hat gesagt.:
Code:
public void push( RingObject element ) throws RingFull {
      if ( numberElements > size -1 ) throw new RingFull();   // anzahl der elemente müssen > als die verfügbare größe -1 sein
// Ja

      if ( start == null ) {      // wenn kein erstes Element existiert
// Ja
    	 start = end = new Node();  //da kein erstes Element existiert ist der Start = Ende = neuer Knoten der eingefügt wird
// Ja
    	 start.element = element;                         //  verstehe ich nicht
// Einfach das Einfügen des Elements
         start.backward = start.forward = start;    //  verstehe ich nicht
// Der Vorgänger und Nachfolger werden auf sich selbst gesetzt
// Keine Ahnung warum 
         
      } else {   // Anfuegen eines neuen Knoten am Anfang "start") des Rings
// Ja
         Node tempNode = new Node();   //  verstehe ich  nicht
// Neuen Node erstellen
         tempNode.element  = element;  //  verstehe ich nicht
// Mit Element füllen
         tempNode.backward = start;     //  verstehe ich nicht
// Sein Vorgänger wird das alte start
 		 tempNode.forward  = end;    // ist ab hier bis
// Sein Nachfolger wird end
		 start.forward     = tempNode;
// Das Nachfolgerelement des jetzigen start's wird der neue Knoten
		 start             = tempNode;
// tempNode wird das neue start der Liste
		 end.backward      = start;  //
// Der Vorgänger des Knotens end wird der neue Knoten
	 
      } // if ..else
      numberElements++;
   } // push( int )



MfG
 
hm is doch noch nicht soo ganz klar.


Diese Beiden Zeilen sind mir nicht ganz klar.







tempNode.backward = start; // Sein Vorgänger wird das alte start
//wenn du von deinem neuen Node eins zurück gehst bist du wieder am anfang (start) da das Node ja an das
ende gehangen wird

Weil das TempNode fügt man ja hinten an, oder? Und wenn ich dann ein Element nach vorne gehe bin ich wieder am Start. Ok das kann ich soweit nachvollziehen



tempNode.forward = end; // Sein Nachfolger wird end
//wenn du von deinem Temp Node eins vorwärts gehst bis du am ende(=start)


ABER, wieso bin ich wenn ich 1 Element nach vorne gehe am Ende(=start)

Das tempNode is doch hinten, und angenommen es sind 10 elemente in der liste. Wenn ich jetzt einen Schritt nach vorne bin ich doch sogesehen bei Element #9#
oder?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben