Information hierarchisch strukturieren

Anfängerfragen zum Programmieren mit PureBasic.
Ruskie
Beiträge: 4
Registriert: 22.12.2008 20:22

Information hierarchisch strukturieren

Beitrag von Ruskie »

Servus,

Wie schon im Titel steht, versuch ich Daten baumförmig zu strukturieren, dass ich sie in etwa so verwenden kann:

Code: Alles auswählen

ÜbergeordnetesObjekt(x)\UntergeordnetesObjekt(y)\Eigenschaft(z) = blubb
Zunächst hab ich versucht eine LinkedList in einer Structure zu erstellen, was aber anscheinend nicht funktioniert. Statische Arrays kommen auch nicht in Frage, da ich sie nicht während der Laufzeit des Programms dimensionieren kann.

Weiß jemand hierfür eine Lösung, ohne allzu komplexe Umwege (z.B. eigene LinkedLists schreiben etc.) gehen zu müssen?

mfg Ruskie
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

du kannst es zB so machen:

Code: Alles auswählen

Structure PointerField
 *Field.PointerField[0]
EndStructure


*MyTree.PointerField = AllocateMemory(12)

*MyTree\Field[1] = AllocateMemory(20)

*MyTree\Field[1]\Field[4] = AllocateMemory(12)

*MyTree\Field[1]\Field[4]\Field[0] = 1

Debug *MyTree\Field[1]\Field[4]\Field[0]
sieht vllt etwas schräg aus, aber der Trick ist halt, das du ein Null-Array in der Structure hast, welche mit AllocateMemory einen Speuicherbereich bekommt, sodass du "wie du es willst" in seiner größe ändern kannst, aber trotzdem auf die Indizes zugreifen kannst.

Das ganze ist dann noch sich selber erzeugend, sodass du Bäume erzeugen kannst.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

mal ne Frage ? woher weiß ich was ich bei AllocateMemory angeben muß
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ich habe hier einfach n Beispiel gemacht.

Ein Pointer hat unter 32Bit system 4 Byte also wäre mein Array mit 3 Feldern 12 Byte groß

muss es größer werden (oder auch kleiner) nutze ich ReAllocateMemory()
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Information hierarchisch strukturieren

Beitrag von PMV »

Es gibt hier im Forum auch schon eigene Linked Listen und sogar
Baumstrukturen. Einfach mal suchen :wink:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

hier mal dein Code mit Kommentaren von mir

Habe ich das richtig verstanden ???

Code: Alles auswählen


Structure PointerField 
 *Field.PointerField[0] 
EndStructure 

*MyTree.PointerField = AllocateMemory(12)       ;für die folgenden 3 mytree * 4 = 12

*MyTree\Field[1] = AllocateMemory(20)           ;für field[4] = 5 * 4 = 20

*MyTree\Field[1]\Field[4] = AllocateMemory(12)  ;für field[0] = 8 Bytes zuviel bzw Platz für 0-2

*MyTree\Field[1]\Field[4]\Field[0] = 1 

Debug *MyTree\Field[1]\Field[4]\Field[0]

Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Information hierarchisch strukturieren

Beitrag von Kiffi »

Ruskie hat geschrieben:Wie schon im Titel steht, versuch ich Daten baumförmig zu strukturieren, dass ich sie in etwa so verwenden kann:

Code: Alles auswählen

ÜbergeordnetesObjekt(x)\UntergeordnetesObjekt(y)\Eigenschaft(z) = blubb
dafür böte sich auch XML an ;-)

Code: Alles auswählen

SetXMLNodeText(XMLNodeFromPath(oXml,"UebergeordnetesObjekt[x]\UntergeordnetesObjekt[y]\Eigenschaft[z]"), "blubb")
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ja so ähnlich,

ich erzeuge halt Speicherbereich für "imaginäre" Arrays, ob die nun gefällt werden oder nicht ist erst mal egal, wichtig wäre nur dabei das auch wieder irgendwie zu löschen, sonst verliert man schnell seine Bereiche ...

Diese erzeugen von Memory erspart sozusagen das "vorher wissen" wie größ ein Statisches Array wird. also nur n Pointer auf eine weiteren Speicher erzuegen usw.

wie geasgt meinen Code nicht ganz ernst nehmen, in der Anwendung sieht das dann anders aus ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Information hierarchisch strukturieren

Beitrag von ts-soft »

Kiffi hat geschrieben:dafür böte sich auch XML an ;-)
Darauf wollte ich auch schon aufmerksam machen, habs aber sein gelassen,
da diese Möglichkeit meist ignoriert wird, obwohl es wohl das einfachste
wäre /:->
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Moin ts!
hast dich ja ne weile nich blicken lassen.
wo warstn?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten