Seite 1 von 1

Linkedlists in Linkedlists

Verfasst: 30.01.2010 22:49
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 ?

Re: Linkedlists in Linkedlists

Verfasst: 30.01.2010 23:09
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