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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Fanator
Messages : 20
Inscription : jeu. 19/avr./2007 8:14

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

Message 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 ? :?:
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Mettre une liste dans une liste chainée... NON
Mettre un tableau dans une liste chainée... OUI
Fanator
Messages : 20
Inscription : jeu. 19/avr./2007 8:14

Message 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]
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message 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
Fanator
Messages : 20
Inscription : jeu. 19/avr./2007 8:14

Message 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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Fanator
Messages : 20
Inscription : jeu. 19/avr./2007 8:14

Message par Fanator »

Merci Comtois !
Où avais-je la tête :!: :oops:
Cela me rassure, j'avais fini par croire que cela aurait été impossible.
Fanator
Messages : 20
Inscription : jeu. 19/avr./2007 8:14

Message 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
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

La lib Vector sinon qui est une liste chainée générique (de n'importe quel type).

/Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Répondre