Page 1 of 1

A list of lists

Posted: Sun Jan 04, 2004 4:55 pm
by two_bits
Lo everyone, is it possible to have a list of lists?
Or create a structure that contains a list?

something like:

structure JinglBells
newlist BatMansmells ()
endstructure

Posted: Sun Jan 04, 2004 5:45 pm
by Rob

Posted: Sun Jan 04, 2004 7:20 pm
by two_bits
OK - thanx mate - i think i can just about understand how its done with the help of Babelfish :)

Posted: Mon Jan 05, 2004 1:45 am
by newbie
Personally i use a linked list of a structure type :

Code: Select all

Structure keys
    keyvalue.b
    keypos.b
EndStructure

NewList SetKeys.keys()
then later in teh code i assign values :

Code: Select all

AddElement(SetKeys())
SetKeys()\keyvalue = 32 
SetKeys()\keypos = 1

AddElement(SetKeys())
SetKeys()\keyvalue = 54 
SetKeys()\keypos = 2
.
.
.
and at the end i use the values :

Code: Select all

ResetList(SetKeys())
While NextElement(SetKeys())
  keyval = SetKeys()\keyvalue
  pos = SetKeys()\keypos
.
.
.

linked lists are very usefull to store information with the exact memory size needed to store them, no need anymore of "Dim array.b(256)".

If you need more fields just add variables to your structure :)

Posted: Mon Jan 05, 2004 1:21 pm
by Christian
Hi!

I found this in the CodeArchiv of Andre:

Code: Select all

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=1676&highlight=
; Author: NicTheQuick
; Date: 15. July 2003


; Example for using LinkedLists in LinkedLists
; Beispiel zur Verwendung von LinkedLists in LinkedLists

;Hier werden die Speicheradressen der einzelnen LinkedLists gespeichert 
NewList Speicher.l() 
;Hier sind die einzelnen LinkedLists gespeichert 
NewList LinkedList.l() 

Procedure NewLinkedList()           ;Erstellt eine neue LinkedList und ein neues Element in der Liste 
  If LastElement(LinkedList()) 
    AddressLast.l = @LinkedList() 
  EndIf 
  
  AddElement(LinkedList()) 
  Address.l = @LinkedList() 
  PokeL(Address - 8, 0) 
  PokeL(Address - 4, 0) 
  
  If AddressLast 
    PokeL(AddressLast - 8, 0) 
  EndIf 
  AddElement(Speicher()) 
  Speicher() = Address 
EndProcedure 

Procedure NextLinkedList()          ;Springt zur nächsten dynamischen LinkedList 
  If NextElement(Speicher()) 
    ChangeCurrentElement(LinkedList(), Speicher()) 
    ProcedureReturn #TRUE 
  Else 
    ProcedureReturn #FALSE 
  EndIf 
EndProcedure 

Procedure PreviousLinkedList()      ;Springt zur vorherigen dynamischen LinkedList 
  If PreviousElement(Speicher()) 
    ChangeCurrentElement(LinkedList(), Speicher()) 
    ProcedureReturn #TRUE 
  Else 
    ProcedureReturn #FALSE 
  EndIf 
EndProcedure 

Procedure FirstLinkedList()         ;Springt zur ersten LinkedList 
  If FirstElement(Speicher()) 
    ChangeCurrentElement(LinkedList(), Speicher()) 
  Else 
    ProcedureReturn #FALSE 
  EndIf 
EndProcedure 

Procedure LastLinkedList()          ;Springt zur letzten LinkedList 
  If LastElement(Speicher()) 
    ChangeCurrentElement(LinkedList(), Speicher()) 
  Else 
    ProcedureReturn #FALSE 
  EndIf 
EndProcedure 

Procedure DeleteLinkedList()        ;Löscht eine LinkedList mit allen Elementen 
  If @Speicher() 
    ChangeCurrentElement(LinkedList(), Speicher()) 
    DeleteElement(LinkedList()) 
    While NextElement(LinkedList()) 
      DeleteElement(LinkedList()) 
    Wend 
    DeleteElement(Speicher()) 
    ProcedureReturn #TRUE 
  Else 
    ProcedureReturn #FALSE 
  EndIf 
EndProcedure 

Procedure FirstLinkedListElement()  ;Springt zum ersten Element in der LinkedList 
  If Speicher() 
    ChangeCurrentElement(LinkedList(), Speicher()) 
  EndIf 
EndProcedure 

;BEISPIEL-CODE 
;¯¯¯¯¯¯¯¯¯¯¯¯¯ 
NewLinkedList()             ;Wir erstellen eine LinkedList mit 2 Elementen 
LinkedList() = 1 
AddElement(LinkedList()) 
LinkedList() = 2 

NewLinkedList()             ;Und noch eine mit 3 Elementen 
LinkedList() = 3 
AddElement(LinkedList()) 
LinkedList() = 4 
AddElement(LinkedList()) 
LinkedList() = 5 

NewLinkedList()             ;Noch eine mit 4 Elementen 
LinkedList() = 6 
AddElement(LinkedList()) 
LinkedList() = 7 
AddElement(LinkedList()) 
LinkedList() = 8 
AddElement(LinkedList()) 
LinkedList() = 9 

FirstLinkedList()           ;Wir springen zur ersten LinkedList 
Debug LinkedList() 
While NextElement(LinkedList()) 
  Debug LinkedList()        ;und gehen alle Elemente durch 
Wend 

LastLinkedList()            ;Die letzte LinkedList 
Debug LinkedList() 
While NextElement(LinkedList()) 
  Debug LinkedList() 
Wend 

PreviousLinkedList()        ;Die vorherige LinkedList 
Debug LinkedList() 
While NextElement(LinkedList()) 
  Debug LinkedList() 
Wend
regards,
Christian