Bonjour !!

Le titre ne dit pas tout. En fait j'ai très bien pigé le concept de liste chaîné simple, que j'arrive très bien mettre en oeuvre en pascal.

Par contre j'ai un souci avec les listes doublement chaînées. Là aussi j'ai compris le concept que j'arrive très bien à visualiser sur papier mais dès qu'il faut mettre en pratique je bloque.

En fait la seule solution que j'ai trouvé pour réaliser cela est une liste statique doublement chaînée pas très élégante de ce style :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
 
type	
	chaine 	= string[20] ;
	Pdonnee = ^donnee ;
	donnee	= record
			nom : chaine ;
			pSuivant : Pdonnee ;
			pPrecedant : Pdonnee ;
		       end ;
	liste =	record
		   debut : Pdonnee ;
		   fin	: Pdonnee ;
		 end ;
var
	cellule1, cellule2, cellule3 : Pdonnee ;
	pListe	: liste ;
 
BEGIN
 
		new (cellule1) ;
		new (cellule2) ;
		new (cellule3) ;
 
		pListe.debut := nil ;
		pListe.fin := cellule2 ;
 
		cellule1^.nom := 'joe' ;
		cellule1^.pPrecedant := pListe.debut ;
		cellule1^.pSuivant := pListe.fin ;
 
		pListe.debut := Cellule1 ;
		pListe.fin := Cellule3 ;
 
		cellule2^.nom := 'fred' ;
		cellule2^.pPrecedant := pListe.debut ;
		cellule2^.pSuivant := pListe.fin ;
 
		pListe.debut := Cellule2 ;
		pListe.fin := nil ;
 
		cellule3^.nom := 'jack' ;
		cellule3^.pPrecedant := pListe.debut ;
		cellule3^.pSuivant := pListe.fin ;
 
		pListe.debut := cellule1 ;
		pListe.fin := cellule3 ;
 
		readln ;
 
END.
Ce code ne réalise aucun traitement visible mais il créé une liste doublement chaînée à sa façon.

En fait mon problème c'est que j'ai du mal à réaliser la même chose à l'aide d'UNE SEULE variable en mémoire statique (cellule) au lieu des 3 (cellule1, cellule2, cellule3) que j'ai créées, en employant une boucle sous contrôle pour créer la liste dynamiquement.

C'est vrai je vois mal comment je pourrais, au moment de sa création, faire un enregistrement pointé prendre la référence d'un autre enregistrement qui n'existe meme pas encore ...

Dans mon code c'est facile puisque les 3 enregistrements existent deja avant la création de la chaîne.

Si on pouvait bien éclairer ma lanterne, surtout que jsuis vraiment débutant ou alors jsuis trop fatigué