AGB  ·  Datenschutz  ·  Impressum  







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

Binärbaum in eine Datei speichern

Ein Thema von Teilzeitberlinerin · begonnen am 16. Mai 2008 · letzter Beitrag vom 17. Mai 2008
Antwort Antwort
Benutzerbild von Teilzeitberlinerin
Teilzeitberlinerin

Registriert seit: 29. Jul 2007
Ort: Berlin
4 Beiträge
 
Delphi 2005 Professional
 
#1

Binärbaum in eine Datei speichern

  Alt 16. Mai 2008, 16:10
Hallo alle zusammen,

ich habe einen Binärbaum, auf dessen Knoten sich je eine dynamische Liste befindet, programmiert. Das ganz soll als "Personendatenbank" funktionieren und daher wäre es auch sinnvoll,wenn ich alle diese Daten speichern und auch wieder einlesen könnte.

Ich kann mir noch nicht so richtig vorstellen, wie ich das realisieren soll.
Ich will gerne ein Typdatei von dem RECORD der Liste anlegen und dann den Baum Schritt für Schritt durchlaufen und alle Listeneinträge in die Datei einschreiben.

Geht das so einfach oder würdet ihr was anderes vorschlagen, was einfacherer zu programmieren ist ?!?! Wie kann ich aus der Datei wieder alles in den Binärbaum eintragen ?

Ich danke euch !
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Binärbaum in eine Datei speichern

  Alt 16. Mai 2008, 17:37
Du kannst einen binären Baum auch in einem Array ablegen.
Der Baum sollte aber schon ausgeglichen sein, sonst wird das Array sehr gross.
Das heisst jetzt aber nicht, dass du wirklich ein Array brauchst; es kommt darauf an, den Baum auf die
richtige Art zu traversieren.

Beispiel
Code:
-
   A
  / \
 B  C
gibt ein Array mit:
A|B|C
Unter B und C können nun jeweils wieder 2 Knoten sein, dann hat Array 7 Einträge.
In dem Buch wird das erklärt:
http://www.amazon.de/Algorithmen-Rob...14/ref=sr_1_12
Andreas
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Binärbaum in eine Datei speichern

  Alt 16. Mai 2008, 17:45
Denk mal an XML. Was du brauchst ist eigentlich nur ein Start-Tag und ein End-Tag. Du musst es ja nicht mit XML machen, aondern kannst das ganze auch binär speichern.
Meine Idee wäre folgende:
Code:
 .--------------------------------------------.
 V                                           |
 [Länge der Daten][Daten][ggf. öffnendes Tag] ' [schließendes Tag]
Das Öffnen- und Schließen-Tag wären im einfachsten Falle Bytes mit vorgegebenem Wert, z.B. 255 für Öffnen und 0 für Schließen.
Das müsste mit Streams ( ) sehr gut lösbar sein.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Binärbaum in eine Datei speichern

  Alt 16. Mai 2008, 17:45
Oder Daten von Index (Baum trennen)
Markus Kinzler
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Binärbaum in eine Datei speichern

  Alt 16. Mai 2008, 17:47
Klar, das geht auch. Wobei ich denke, dass meine Methode schneller ist, wenn der gesamte Baum eingelesen werden muss.
  Mit Zitat antworten Zitat
new32

Registriert seit: 10. Mai 2005
160 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Binärbaum in eine Datei speichern

  Alt 16. Mai 2008, 18:36
Code:
typedef struct _DB {         //a simple DataBase
   struct _DB *parent;      //if(parent==0) "root of the db"
   struct _DB *sChild, *bChild;   //sChild->key < key; bChild->key > key
   char *key;
   char *value;
DB;

static int DBRSave(DB *db, FILE *f){
   size_t lng;
   if(db->key && db->value && strlen(db->key) && strlen(db->value)){
      lng=strlen(db->key);
      fwrite(&lng, sizeof(size_t), 1, f);
      fwrite(db->key, lng, 1, f);

      lng=strlen(db->value);
      fwrite(&lng, sizeof(size_t), 1, f);
      fwrite(db->value, lng, 1, f);
   }
   if(db->sChild) DBRSave(db->sChild, f);
   if(db->bChild) DBRSave(db->bChild, f);
   return 0;
}

int DBSave(DB *root, FILE *f){
   size_t lng;
   DBRSave(root, f);
   lng=0L;
   fwrite(&lng, sizeof(size_t), 1, f);
   return 0;
}
copy&paste aus einem meiner Projekte; vielleicht bringts dir ja was.

Sorry für "C"
~?&/%§$§%\&?~
8)
  Mit Zitat antworten Zitat
bluesbear

Registriert seit: 14. Dez 2005
Ort: Hahnstätten
355 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Binärbaum in eine Datei speichern

  Alt 16. Mai 2008, 19:17
Es gibt zwei grundsätzliche Methoden, einen Baum Knoten für Knoten durchzugehen.
http://en.wikipedia.org/wiki/Depth-first_search
und
http://en.wikipedia.org/wiki/Breadth-first_search

Wenn man jedem Knoten eine fortlaufende ID gibt, ist es einfach, einen Baum in einer Tabelle oder wie auch immer abzuspeichern und beim einlesen zu rekonstruieren.
Klaus M. Hoffmann
  Mit Zitat antworten Zitat
Benutzerbild von Teilzeitberlinerin
Teilzeitberlinerin

Registriert seit: 29. Jul 2007
Ort: Berlin
4 Beiträge
 
Delphi 2005 Professional
 
#8

Re: Binärbaum in eine Datei speichern

  Alt 17. Mai 2008, 09:10
Hi,

ich danke euch für die viele Anregungen und ihr habt mir sehr weitergeholfen.
So, dann werde ich mal probieren das ganz umzusetzen.

Euch allen ein schönes Wochenende !!!
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:03 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