Page 1 sur 1

Une Liste chainée à l'intérieur d'une liste chainée ?

Publié : jeu. 19/avr./2007 8:38
par Fanator
Je suis nouvellement inscrit et je me pose la question suivante : est-il possible de mettre une liste chainée à l'intérieur d'une autre liste chainée ? On peut déjà mettre des tableaux à l'intérieur d'une liste mais qu'en est-il d'une liste ? :?:

Publié : jeu. 19/avr./2007 9:29
par Progi1984
Mettre une liste dans une liste chainée... NON
Mettre un tableau dans une liste chainée... OUI

Publié : jeu. 19/avr./2007 14:08
par Fanator
Bonjour à tous ! je n'ai pas été très poli en mettant le premier post !
Merci Progi1984 !
Voilà un bout de mon programme...

....

Code : Tout sélectionner

Structure Aeronef
  NumPays.w
  NumCsteur.w
  NumAeronef.w
  NomAvion.s
  NomCode.s
  NomVersions.Versions
EndStructure

Structure Versions
  nbVersion.b
  Version.s[#NbVersions]
  FonctionType.s[#NbVersions]
EndStructure

Suite au Tuto sur les structures, il manque à mon humble avis, l'utilisation de la structure liée à la première.
Comment accéder aux tableaux statiques Versions et FonctionType  :?: 
[/list]

Publié : jeu. 19/avr./2007 15:26
par comtois

Code : Tout sélectionner

#NbVersions=3
Structure Versions
  nbVersion.b
  Version.s[#NbVersions]
  FonctionType.s[#NbVersions]
EndStructure

Structure Aeronef
  NumPays.w
  NumCsteur.w
  NumAeronef.w
  NomAvion.s
  NomCode.s
  NomVersions.Versions
EndStructure

;Je ne suis pas sûr d'avoir compris la question

Define Truc.Aeronef

Truc\NomVersions\Version[0] ="Version 0"
Truc\NomVersions\FonctionType[0] ="Fonction type 0"
Truc\NomVersions\Version[1] ="Version 1"
Truc\NomVersions\FonctionType[1] ="Fonction type 1"
Truc\NomVersions\Version[2] ="Version 2"
Truc\NomVersions\FonctionType[2] ="Fonction type 2"

For i = 0 To 2
  Debug Truc\NomVersions\Version[i]
  Debug Truc\NomVersions\FonctionType[i] 
Next i

Publié : jeu. 19/avr./2007 16:07
par cha0s
tu peut utiliser une file aussi c'assez facil a imbriquer j'ai codé sa si sa peut t'aider :

http://www.purebasic.fr/french/viewtopi ... ght=#63016

Publié : ven. 20/avr./2007 8:47
par Fanator
Bonjour !
j'ai essayé la solution suivante mais ça ne fonctionne pas :?:
Après bien des tests, pas moyen

Code : Tout sélectionner

#NbVersions=3 
Structure Versions  
  nbVersion.b
  Version.s[#NbVersions]
  FonctionType.s[#NbVersions] 
EndStructure 

Structure Aeronef 
  NumPays.w 
  NumCsteur.w 
  NumAeronef.w 
  NomAvion.s 
  NomCode.s 
  NomVersions.Versions
EndStructure  

NewList Truc.Aeronef()

; ICI : LE DEBUT DES PROBLEMES
; MESSAGE : The linked list doesn't have a current element 

Truc()\NomVersions\Version[0] ="Version 0"
Truc()\NomVersions\FonctionType[0] ="Fonction type 0" 
Truc()\NomVersions\Version[1] ="Version 1" 
Truc()\NomVersions\FonctionType[1] ="Fonction type 1" 
Truc()\NomVersions\Version[2] ="Version 2" 
Truc()\NomVersions\FonctionType[2] ="Fonction type 2" 

For i = 0 To 2 
  Debug Truc()\NomVersions\Version[i] 
  Debug Truc()\NomVersions\FonctionType[i]
Next i

Publié : ven. 20/avr./2007 11:58
par comtois
pour ajouter un élément dans une liste chaînée il faut utiliser la commande
AddElement()

Code : Tout sélectionner

#NbVersions=3
Structure Versions 
  nbVersion.b
  Version.s[#NbVersions]
  FonctionType.s[#NbVersions]
EndStructure

Structure Aeronef
  NumPays.w
  NumCsteur.w
  NumAeronef.w
  NomAvion.s
  NomCode.s
  NomVersions.Versions
EndStructure 

NewList Truc.Aeronef()

; ICI : LE DEBUT DES PROBLEMES
; MESSAGE : The linked list doesn't have a current element
AddElement(Truc())
Truc()\NomVersions\Version[0] ="Version 0"
Truc()\NomVersions\FonctionType[0] ="Fonction type 0"
Truc()\NomVersions\Version[1] ="Version 1"
Truc()\NomVersions\FonctionType[1] ="Fonction type 1"
Truc()\NomVersions\Version[2] ="Version 2"
Truc()\NomVersions\FonctionType[2] ="Fonction type 2"

For i = 0 To 2
  Debug Truc()\NomVersions\Version[i]
  Debug Truc()\NomVersions\FonctionType[i]
Next i

Publié : ven. 20/avr./2007 12:12
par Fanator
Merci Comtois !
Où avais-je la tête :!: :oops:
Cela me rassure, j'avais fini par croire que cela aurait été impossible.

Publié : mar. 06/mai/2008 18:25
par Fanator
Vu dans Code Archiv...

Code : Tout sélectionner

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=1676&highlight=
; Author: NicTheQuick (updated for PB 4.00 by Andre)
; Date: 15. July 2003
; OS: Windows
; Demo: Yes


; Example for using LinkedLists in LinkedLists



; Beispiel zur Verwendung von LinkedLists in LinkedLists

;Hier werden die Speicheradressen der einzelnen LinkedLists gespeichert 
Global NewList Speicher.l() 
;Hier sind die einzelnen LinkedLists gespeichert 
Global 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

Publié : mar. 06/mai/2008 23:53
par lionel_om
La lib Vector sinon qui est une liste chainée générique (de n'importe quel type).

/Lio