AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Frage zum Sortieren einer verketteten Liste
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zum Sortieren einer verketteten Liste

Ein Thema von Chris P · begonnen am 20. Aug 2004 · letzter Beitrag vom 24. Aug 2004
Antwort Antwort
Seite 2 von 3     12 3      
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Frage zum Sortieren einer verketteten Liste

  Alt 20. Aug 2004, 17:33
Kann mir bitte jemand helfen
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#12

Re: Frage zum Sortieren einer verketteten Liste

  Alt 20. Aug 2004, 19:33
so,

jetzt hab ich 's:

Bei einer einfach verküpften Liste müssen 3! Zeiger verändert werden, du brauchst also zwei Hilfsvariablen.

Delphi-Quellcode:
var
  changed: boolean;
  nav, help1, help2: tListenElement;
begin

  changed := true;
  while changed do // deine Version mit der zweiten Schleife sollte auch funktionieren,
  begin // aber so muss du die Anzahl der Elemente der Liste nicht kennen.
    changed := false;
    nav := root; // Zeiger auf den Anfang setzen
    while not (nav^.next = nil) do // solange wir nicht am Ende sind weiter machen
    begin
      If nav^.name > nav^.next^.name then // vergleichen
      begin
        help1 := nav; // die zwei Elemente vertauschen.
        nav := nav^.next; // man beachte, dass hierzu drei Zeiger geändert werden müssen!
        help2 := nav^.next;
        nav^.next := ´nav^.next^.next;
        help2^.next := help1;
        changed := true;
        If help1=root then root := nav; // falls wir gerade das root-Element geändert haben, root neu setzen
      end;
      nav := nav^.next; // auf zum nächsten Element :)
    end;
  end;

end;
Peter Enenkel
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Frage zum Sortieren einer verketteten Liste

  Alt 23. Aug 2004, 10:24
Funktioniert aber nicht ganz.

Was macht eigentlich der 2. Hilfszeiger.
Ich habe in meiner Liste 5 Elemente.
Die 2. WHILE - Schleife läuft nur 4 mal durch und dann kommt eine Zugriffsverletzung.

Wo liegt der Fehler???

Hast du es schon getestet?
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#14

Re: Frage zum Sortieren einer verketteten Liste

  Alt 23. Aug 2004, 10:41
Ersetze die 2. While-Anweisung mit:

while Assigned(nav) and Assigned(nav^.next) do greetz
mytar
Francis Obikwelu
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#15

Re: Frage zum Sortieren einer verketteten Liste

  Alt 23. Aug 2004, 10:46
Noch eine Änderung:

Delphi-Quellcode:
var
  changed: boolean;
  nav, help1, help2: tListenElement;
begin

  changed := False;

  repeat //<<<
    nav := root;
    while Assigned(nav) and Assigned(nav^.next) do //<<<
    begin
      if nav^.name > nav^.next^.name then
      begin
        help1 := nav;
        nav := nav^.next;
        help2 := nav^.next;
        nav^.next := nav^.next^.next;
        help2^.next := help1;
        
        changed := True;
        if help1 = root then
         root := nav;
      end;
      nav := nav^.next;
    end;
  until not changed; //<<<

end;
Francis Obikwelu
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Frage zum Sortieren einer verketteten Liste

  Alt 23. Aug 2004, 13:03
Danke erstmal, aber ich verstehe immer noch nicht für was der 2. Hilfszeiger "HELP2" gut ist.


Er bekommt doch nur Werte zugewiesen aber mit diesen Werten wird doch gar nichts gemacht.
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#17

Re: Frage zum Sortieren einer verketteten Liste

  Alt 23. Aug 2004, 14:41
so, ich hab noch mal drüber nachgedacht und hoffe nun eine endgültige (und endlich auch richtige) Lösung präsentieren zu können:

Mein letzter Ansatz mit zwei Hilfsvariablen war in sofern falsch, da ich die Problematik der von einander abhänigen Referenzen (siehe Anhang) nicht in letzter Konsequenz beachtet hatte.

Man benötigt nun mehr vier Hilfsvariablen (Erläuterungen hierzu im Anhang):

Delphi-Quellcode:
helpA := nav;
helpB := nav^.next;
helpC := nav^.next^.next;

help := helpA;
helpA := helpB;
helpB := helpC;
helpC := help;
Die von mytar vorgeschlagenen Änderungen ändern sind nicht zwingend notwendige Verbesserungen. Die erste (Assinged) sichert das ganze zusätzlich ab, sollte aber auch ohne funktionieren (wenn der Tauschvorgang nun endlich stimmt). Die zweite stellt eine kleine Optimierung dar (aber nur wenn sie richtig implementiert wird! das changed := false steht nämlich an falscher Stelle es muss wenn dann innerhalb der repeat-Schleife stehen! Insgesammt spärt die repeat- gegenüber der while-Schleife eine Überprüfung der Abbruchsbedingung -_-
Trotzdem würde ich die Veränderungen übernehmen

Das Endergebnis sollte also folgendermaßen aussehen:

Delphi-Quellcode:
var
  changed: boolean;
  nav, help, helpA, helpB, helpC: tListenElement;
begin

  repeat
    changed := False; //<<<
    nav := root;
    while Assigned(nav) and Assigned(nav^.next) do
    begin
      if nav^.name > nav^.next^.name then
      begin
        helpA := nav;
        helpB := nav^.next;
        helpC := nav^.next^.next;

        help := helpA;
        helpA := helpB;
        helpB := helpC;
        helpC := help;
       
        changed := True;
        if help = root then
         root := nav;
      end;
      nav := nav^.next;
    end;
  until not changed;
end;

EDIT: Anhang vergessen ...
Miniaturansicht angehängter Grafiken
tauschvorgang.jpg  
Peter Enenkel
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Frage zum Sortieren einer verketteten Liste

  Alt 23. Aug 2004, 18:36
Danke, werde es gleich mal ausprobieren!

Wenns nicht klappt dann meld ich mich noch ma...
  Mit Zitat antworten Zitat
Chris P

Registriert seit: 8. Mär 2004
230 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Frage zum Sortieren einer verketteten Liste

  Alt 23. Aug 2004, 18:51
Das klappt leider gar nicht.

Das Programm hängt sich auf!

Ich verstehe das nicht so ganz mit den Hilfszeigern.

Sie werden untereinander vertauscht aber sonst auch nichts!

Die Variable NAV muss doch nach dem Tauschvoragng wieder einen Werte bekommen.

Nach jedem Schleifendurchlauf verfallen doch die Werte der Hilsvariablen wieder.

Kann mir denn keiner helfen??
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#20

Re: Frage zum Sortieren einer verketteten Liste

  Alt 23. Aug 2004, 20:37
irgendwie dreh ich mich im Kreis

probiers mal so:

Delphi-Quellcode:
var
  changed: boolean;
  nav, help, helpA, helpB, helpC: tListenElement;
begin

  repeat
    changed := False; //<<<
    nav := root;
    while Assigned(nav) and Assigned(nav^.next) do
    begin
      if nav^.name > nav^.next^.name then
      begin
        helpA := nav;
        helpB := nav^.next;
        helpC := nav^.next^.next;

        help := helpA;
        helpA := helpB;
        helpB := helpC;
        helpC := help;

        nav := helpA;
        nav^.next := helpB;
        nav^.next^.next := helpC;
        
        changed := True;
        if help = root then
         root := nav;
      end;
      nav := nav^.next;
    end;
  until not changed;
end;
wenn's nicht funktioniert häng mal dein Project an, dann probier ich selber mal ein bischen dran rum
Peter Enenkel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz