Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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 )
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
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 )
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?