1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Doppelt verkettete Listen Elemete ( Knoten ) tauschen

Discussion in 'Programmieren' started by bastelhamster1, Jan 10, 2008.

Thread Status:
Not open for further replies.
  1. 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++.........
     
  2. RealC++

    RealC++ Kbyte

    Doppeltverkettete Liste heisst, dass deine Datenelemente so aussehen, oder:

    struct Mein_Listenelement
    {
    .....//Data
    .....struct Mein_Listenelement *Naechstes_Element;
    .....struct Mein_Listenelement *Vorheriges_Element;
    };


    So könnte es funktionieren:
    Code:
    struct Mein_Listenelement
    {
    	//Data
    	struct MeinListenelement *Naechstes_Element;
    	struct MeinListenelement *Vorheriges_Element;
    };
    
    void ElementMitSeinemVorgaengerTauschen(struct Mein_Listenelement *Zutauschendes_Element);
    {
    	struct Mein_Listenelement *Hilfs_Zeiger_1=Zutauschendes_Element->Vorheriges_Element,*Hilfs_Zeiger_2=Zutauschendes_Element->Naechstes_Element;
    
    	Zutauschendes_Element->Naechstes_Element->Vorheriges_Element=Zutauschendes_Element->Vorheriges_Element;
    	Zutauschendes_Element->Vorheriges_Element->Vorheriges_Element->Naechstes_Element=Zutauschendes_Element->Vorheriges_Element;
    
    	Zutauschendes_Element->Vorheriges_Element=Zutauschendes_Element->Vorheriges_Element->Vorheriges_Element;
    	Zutauschendes_Element->Naechstes_Element=Hilfs_Zeiger_1;
    
    	Hilfs_Zeiger_1->Vorheriges_Element=Zutauschendes_Element;
    	Hilfs_Zeiger_1->Vorheriges_Element=Hilfs_Zeiger_2;
    }
    P.S.: Wenn vor oder nach den beiden zutauschenden Elementen kein weiteres Element vorhanden ist, gibts Probleme. Du musst erst überprüfen ob Zutauschendes_Element entweder das letzte, das zweite oder irgend ein anderes Element ist. Du hasst also drei mögliche Fälle.
    (Für die beiden einfacheren musst du wohl noch selbst Hand anlegen...)
     
  3. Danke dir schon mal. So ein Listenelement hat da noch einen Zeiger ( Refernz ) auf eine Opjekt ( val ), wo die "Daten als Objekt" drin sind, aber mit diesen Zeiger muss ich an änlich verfahren.......
    Danke.......
     
  4. Zeigen die beiden Hilfszeiger auf die Elemente,
    welche getauscht werden sollen, oder auf die Elemente, die die beiden
    zu tauschenden einschließen???
     
  5. RealC++

    RealC++ Kbyte

    Der erste zeigt auf das Element vor dem Zutauschenden und der zweite auf das einschliessende vor dem Zutauschenden.
    (Im Ausgangszustand)

    P.S.: Bei der Deklaration/Initialisierung der Zeiger, am Anfang der Funktion, wäre das ersichtlich.
     
Thread Status:
Not open for further replies.

Share This Page