Linkedlists in Linkedlists

Für allgemeine Fragen zur Programmierung mit PureBasic.
supra
Beiträge: 25
Registriert: 14.03.2006 20:13

Linkedlists in Linkedlists

Beitrag von supra »

moin moin :D

ich wollte für ein kleines Projekt Linkedlists verwenden da sie für gewisse Sachen angenehmer zu handlen sind als Arrays gerade wenn man nicht weiß wieviele elemente man benötigen wird.
Allerdings fehlt mir eins...

Als Beispiel:

Code: Alles auswählen

Structure  File
  FileName.s
  FileCRC.l
  FileFlags.l
  *memFile.l
EndStructure

Structure Directory
  DirName.s
  DirFlags.l
  Files.File[$FF] ; ersetzbar ? 
EndStructure

NewList Dirs()

AddElement(Dirs())
Ist es möglich den File array durch eine linked list zu ersetzen ?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Linkedlists in Linkedlists

Beitrag von STARGÅTE »

nein Leider nicht, außer du verwendest eine Include die sowas ermöglicht (siehe Tips und Tricks hier im Forum)

ein schnellerer Weg wäre

Code: Alles auswählen

Structure Directory
  DirName.s
  DirFlags.l
  Files.File[0]
EndStructure
danach erzeugst du selber den Speicher für diese Variable:

Code: Alles auswählen

*Dir.Directory = AllocateMemory(SizeOf(Directory))
wenn du nun ein Element hinzufügen willst erweiters du den Speicher:

Code: Alles auswählen

Elemente = 4
*Dir.Directory = ReAllocateMemory(*Dir, SizeOf(Directory)+Elemente*SizeOf(File))
Somit wäre es zwar keine LinkedList, aber eine Art Array welches du in der größe ändern kannst.
Du musst nur den Speuicher selber verwalten und ggf. größer / kleiner machen.
Den Pointer speicherst du dann in deiner
NewList Dirs()

Auf die Elemente kannst du dann zugreifen:

Code: Alles auswählen

*Dir\Files[Element]
In der Strukture bedeutet Files.File[0] das das Array unbestimmte Länge hat, für die Strukture aber gilt das es nicht auftaucht. somit beim ReAllocate immer die Mänge an Elementen (Array-Felder) dazuaddieren mit deren Größe
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
Antworten