AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

arbeiten mit zeigern

Ein Thema von ferby · begonnen am 16. Jan 2005 · letzter Beitrag vom 23. Jan 2005
 
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#7

Re: arbeiten mit zeigern

  Alt 21. Jan 2005, 20:54
Hi,

sortiertes Einfügen könnte man zum Beispiel so implementieren:

Delphi-Quellcode:
procedure SortiereEin(var Start: zeiger; s: String)
var
  NeueDaten: zeiger; // Zeiger auf den neuen Datensatz
  Suchzeiger, Schleppzeiger: zeiger; // Zeiger zum Suchen der Einfügeposition
begin
  // neuen Eintrag anlegen
  new(NeueDaten);
  NeueDaten^.name := s;

  // alles auf Anfang
  Suchzeiger = Start;
  Schleppzeiger = Start;

  // Jetzt wird Suchzeiger so lange auf das nächste Element gesetzt, bis dieses nil
  // ist, es also kein weiteres Element gibt oder bis es größer als das neues ist.
  // Man geht also bis zu dem Element, *vor* dem man einfügen muss.
  while (Suchzeiger <> nil) and
        (Suchzeiger^.name <= NeueDaten^.name) do
  begin
    // Da das Element nach dem eingefügt wird, verändert werden muss, wird der Zeiger
    // darauf gespeichert ...
    Schleppzeiger := Suchzeiger;

    // ... bevor Suchzeiger erhöht wird.
    Suchzeiger := Suchzeiger^.next;
  end;

  if Suchzeiger = Start then
  begin
    // Falls vor dem ersten Element eingefügt werden muss oder bisher noch kein Element
    // in der Liste war, muss Start verändert werden.
    // (Es gibt Möglichkeiten diese Abfrage einzusparen, aber ich denke so ist es am
    // verständlichsten.)

    // next muss auf das Element zeigen, auf das bisher Start verwiesen hat, damit die
    // Liste nicht unterbrochen wird.
    NeueDaten^.next = Start;

    // dann kann Start verändert werden
    Start := NeueDaten;
  end
  
  else
  begin
    // Wenn das neue Element in die Mitte oder an's Ende der Liste eingefügt werden soll,
    // muss statt Start next des Vorgängerelements verändert werden (und genau dazu braucht
    // man den Schleppzeiger).

    // next von NeueDaten wird auf das Element gesetzt, vor dem eingefügt wird
    NeueDaten^.next := Suchzeiger;

    // und anschließend next von dem Element verändert, nach dem das neue eingefügt wird
    Schleppzeiger^.next := NeueDaten;
  end;
end;
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
 


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 06:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz