Hallo,
ich habe da folgendes Problem.
Und zwar habe ich da eine Doppelt verkettete List
vorliegen.
Es soll eine Methode geschrieben werden,
mit dessen Hilfe ich zwei benachbarte Knoten miteinander
vertauschen kann.
D.h. Vertausche Knoten mit dessen Vorgänger.
Hat da jemand einen Ansatz oder einen Hinweis,
wo ich mehr Infos bekommen kann?
Egal ob nun in Java oder C++.........
Seite 1 von 1
Doppelt Verkettete Listen Elemete ( Knoten ) Tauschen
Anzeige
#2
geschrieben 11. Januar 2008 - 07:58
Ich mache die Beispiele mal in Java.
Bei einer doppelt verketteten Liste, hält ein Element eine Referenz auf das vorherige und nachfolgende Element, was so aussehen könnte
Wenn du nun zwei benachbarte Elemente tauschen möchte, müsstest du maximal vier Elemente anpassen:
1 2 3 4 (2 und 3 werden getauscht) => 1 3 2 4
Bedeutet,
1 hält eine Referenz auf 3
3 hält eine Referenz auf 1 und 2
2 hält eine Referenz auf 3
4 hält eine Referenz auf 2
Und das kannst du relativ simpel machen, indem du einfach nur die entsprechende Setter aufrufst.
Bei einer doppelt verketteten Liste, hält ein Element eine Referenz auf das vorherige und nachfolgende Element, was so aussehen könnte
public class Element { private Element previous; private Element next; ... und entsprechende Setter und Getter }
Wenn du nun zwei benachbarte Elemente tauschen möchte, müsstest du maximal vier Elemente anpassen:
1 2 3 4 (2 und 3 werden getauscht) => 1 3 2 4
Bedeutet,
1 hält eine Referenz auf 3
3 hält eine Referenz auf 1 und 2
2 hält eine Referenz auf 3
4 hält eine Referenz auf 2
Und das kannst du relativ simpel machen, indem du einfach nur die entsprechende Setter aufrufst.
#3
geschrieben 11. Januar 2008 - 09:07
hallo danke dir,
aber Setter und Getter und nänliches steht da nicht zur verfügung:
und zwar sihet es da so aus.
die liste hat einen zeiger auf den aktuellen knoten ( cursor ),
weiterhin besitzt jeder knoten einen verweis ( referenz ) auf den nachfolger ( next ) und eine referenz auf dern vorgänger ( pred ), sowie eine referenz ( val )
auf das datenobjekt, welches in dem konoten ist.
navigieren tut man mit cursor.next ( einen vor ) oder cursor.pred ( einen zurück ). mit cursor.val hat man zugrieff auf die val referenz.
aber Setter und Getter und nänliches steht da nicht zur verfügung:
und zwar sihet es da so aus.
die liste hat einen zeiger auf den aktuellen knoten ( cursor ),
weiterhin besitzt jeder knoten einen verweis ( referenz ) auf den nachfolger ( next ) und eine referenz auf dern vorgänger ( pred ), sowie eine referenz ( val )
auf das datenobjekt, welches in dem konoten ist.
navigieren tut man mit cursor.next ( einen vor ) oder cursor.pred ( einen zurück ). mit cursor.val hat man zugrieff auf die val referenz.
#4
geschrieben 11. Januar 2008 - 09:48
Was anderes habe ich auch nicht geschrieben.
Natürlich kannst du direkt auf die Attribute zugreifen, aber in OOP sollte man sie immer kapseln.
Trotzdem bleibt das Prinzip gleich. Du musst die Knoten durchgehen und die Referenzen so ändern, wie im meinem vorherigen Post beschrieben.
Natürlich kannst du direkt auf die Attribute zugreifen, aber in OOP sollte man sie immer kapseln.
Trotzdem bleibt das Prinzip gleich. Du musst die Knoten durchgehen und die Referenzen so ändern, wie im meinem vorherigen Post beschrieben.
#5
geschrieben 16. Januar 2008 - 00:19
Zitat (Witi: 11.01.2008, 09:48)
Natürlich kannst du direkt auf die Attribute zugreifen, aber in OOP sollte man sie immer kapseln.
Trotzdem bleibt das Prinzip gleich. Du musst die Knoten durchgehen und die Referenzen so ändern, wie im meinem vorherigen Post beschrieben.
Trotzdem bleibt das Prinzip gleich. Du musst die Knoten durchgehen und die Referenzen so ändern, wie im meinem vorherigen Post beschrieben.
hört sich stark nach einer aufgabe aus dem unterricht an, weshalb er es vielleicht so machen muss.ich würde mir dafür eine methode schreiben, an die du zwei elemente übergibst. du hast also die objekte
...<->obj0<->obj1<->obj2<->obj3<->...
obj1 und obj2 willst du tauschen. dann schreibst du eine methode (nicht mit den namen in übergabeparametern durcheinander kommen:
private void TauscheObjekte(obj0, obj1) { obj2.prev = obj1.prev obj1.prev = obj2 obj1.next = obj2.next obj2.next = obj1 }
Dieser Beitrag wurde von bLaCkRaBbIt bearbeitet: 16. Januar 2008 - 00:21
Thema verteilen:
Seite 1 von 1