Bonjour à tous,
mon problème est le suivant, je dois réaliser une routine qui clone une liste simplement chaînée. Seulement, je ne vois pas très bien comment la réaliser.
Je vois bien pour 2 éléments mais après, je bloque ( et même avec des petits dessins).
Comme vous pouvez le voir, le éléments clonés à partir du 3e, seront mis avant le 2e... je vois pas du tout comment procéder pour les mettre dans le même ordre que dans la liste originelle.
Merci de me lire.
Voici donc les parties de l'unité que j'ai crée.
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100 procedure NouvelleListe(var l:Liste); begin l:=nil; end; (* ------------------------------------------- *) function ListeVide(l:Liste):boolean; begin result:=l=nil; end; (* ------------------------------------------- *) function DansListe(e:ElemListe;l:Liste):boolean; var temp:Liste; begin temp:=l; while (temp<>nil) and not ElemlisteEgal(temp^.info,e) do begin temp:=temp^.svt; end; result:=temp<>nil; end; (* ------------------------------------------- *) function InsererListe(E:ElemListe;var L:Liste):boolean; var nouveau:liste; begin if (not DansListe(E,L)) then begin new(nouveau); nouveau^.info:=E; nouveau^.svt:=L; L:=nouveau; result:=true; end else result:=false; end; (* ------------------------------------------- *) procedure InsererModifierListe(E:ElemListe;var l:Liste); var nouveau:liste; begin nouveau:=l; while (nouveau<>nil) and not ElemlisteEgal(nouveau^.info,e) do begin nouveau:=nouveau^.svt; end; if nouveau=nil then begin new(nouveau); nouveau^.info:=E; nouveau^.svt:=l; l:=nouveau; end else nouveau^.info:=E; end; (* ------------------------------------------- *) procedure Afficherliste(L:liste); var temp:liste; begin temp:=L; while (temp<>nil) do begin write(temp^.info,' '); temp:=temp^.svt; end; end; (* ------------------------------------------- *) procedure ClonerListe(var dest:Liste;source:Liste); var svtsource,nouveaudest:Liste; begin if source=nil then dest:=nil else begin new(dest); CopyElemListe(dest^.info,source^.info); dest^.svt:=nil; svtsource:=source^.svt; while (svtsource<>nil) do begin new(nouveaudest); CopyElemListe(nouveaudest^.info,source^.info); nouveaudest^.svt:=dest^.svt; dest^.svt:=nouveaudest; svtsource:=source^.svt end; nouveaudest^.svt:=nil; end; end;
Partager