0% ont trouvé ce document utile (0 vote)
26 vues36 pages

Cours 10

Le document traite des types de données dynamiques, en particulier des tableaux statiques et dynamiques, ainsi que des pointeurs et des listes simplement chaînées. Il explique comment organiser la mémoire pour ces structures de données et comment manipuler les pointeurs pour accéder et modifier les valeurs. Des exemples de code illustrent la création et l'utilisation de ces structures en mémoire.

Transféré par

braintumor2019
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
26 vues36 pages

Cours 10

Le document traite des types de données dynamiques, en particulier des tableaux statiques et dynamiques, ainsi que des pointeurs et des listes simplement chaînées. Il explique comment organiser la mémoire pour ces structures de données et comment manipuler les pointeurs pour accéder et modifier les valeurs. Des exemples de code illustrent la création et l'utilisation de ces structures en mémoire.

Transféré par

braintumor2019
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPT, PDF, TXT ou lisez en ligne sur Scribd

Algorithmes et

structures de données

10ème cours
Patrick Reuter
http://www.labri.fr/~preuter
Aujourd’hui

-Types de données dynamiques


- Pointeurs
- New et Dispose
- Type de données dynamiques
- Listes
Type : tableaux (angl. ARRAY)

- structure de données la plus connue


- structure homogène, chaque élément est du
même type de base
- occupe de la place successive dans la
mémoire
- « random access » = l’accès aux différents
éléments se fait à coût égal
• Tableau statique
• Tableau dynamique
• Tableau statique
Organisation de la mémoire
var points : array[1..10] of byte; {10 octets}

#536.870.911
#536.870.910
...
points[10] #2009 90
... Occupe de la place
successive
points[3] #2002 31 dans la mémoire
points[2] #2001 25
points[1] #2000 130
...
#0

 points[index] #(2000+index-1)
• Tableau dynamique
var points : array of byte; {pointeur 4 octets}
var i : byte;
SetLength(points, 10);
points[0] := 130;
points[1] := 25;
… points[9] #129
...
points[2] #122
points[1] #121 25
points[0] #120 130

i #104 10
points #103 0
points #102 0
points #101 0
points #100 120

...
#0

 jours[index] #(120+index)
Adresse d’une variable
Organisation de la mémoire
var a : byte; ( 1 octet (byte) )

#536.870.911
#536.870.910
...
#1.000
...
#5
#4
#3
#2
#1
#0
Organisation de la mémoire
var a : byte;

#536.870.911
#536.870.910
...
#1.000
...
#5
a #4
#3
#2
#1
#0
Organisation de la mémoire
var a : byte;
a := 97;

#536.870.911
#536.870.910
...
#1.000
...
#5
a #4 97
#3
#2
#1
#0
Organisation de la mémoire
var a : byte;
a := 97;

#536.870.911
#536.870.910
...
#1.000
...
#5
a #4 97
#3
#2
#1
#0
Comment connaître l’adresse de a ?
 Addr(a)
Organisation de la mémoire
var a : byte;
a := 97;
p_a := Addr(a); { Sauvegarder l’adresse }

#536.870.911
#536.870.910
...
#1.000
...
#5
a #4 97
#3
#2
#1
#0
Comment connaître l’adresse de a ?
 Addr(a)
var a : byte;
var p_a : ^byte; {4 octets, lire : pointeur vers a}
a := 97;
p_a := Addr(a); { Sauvegarder l’adresse }
#536.870.911
#536.870.910
« p_a pointe vers a »
p_a #1.003 0
p_a #1.002 0
p_a #1.001 0
p_a #1.000 4
...
#5
a #4 97
#3
#2
#1
#0
Comment connaître l’adresse de a ?
 Addr(a)
var a : byte;
var p_a : ^byte; {4 octets, lire : pointeur vers a}
a := 97;
p_a := Addr(a); { Sauvegarder l’adresse }
p_a^ := 10; { Déréférencement }
#536.870.911
#536.870.910

p_a #1.003 0
p_a #1.002 0
p_a #1.001 0
p_a #1.000 4
...
#5
a #4 10
#3
#2
#1
#0
Comment connaître l’adresse de a ?
 Addr(a)
var a : byte;
var p_a : ^byte; {4 octets, lire : pointeur vers a}
a := 97;
p_a := Addr(a); { Sauvegarder l’adresse }

p_a^ := 10; { affectation par déréférencement


}

a := 10; { affectation }
var a : byte;
var p_a : ^byte; {4 octets, lire : pointeur vers a}
a := 97;
p_a := Addr(a); { Sauvegarder l’adresse }

p_a^ := 10; { affectation par déréférencement


}

a := 10; { affectation }

C’est équivalent !!
Définitions
• Déclaration d’un pointeur vers un byte

var p_a : ^byte;

• Déréférencement d’un pointeur :

p_a^

• Connaître l’adresse d’une variable a

Addr(a); {ou bien }


@a;
Solution
var p_a : ^byte; {4 octets, lire :...
New(p_a);
p_a^ := 10; { affectation par déréférencement
}
#536.870.911
#536.870.910
« p_a pointe vers p_a^ »
p_a #1.003 0
p_a #1.002 0
p_a #1.001 0
p_a #1.000 0

...
...
#5
#4
#3
#2
#1
p_a^ #0 10
Solution
var p_a : ^byte; {4 octets, lire : pointeur vers a}
...
New(p_a);
p_a^ := 10; { affectation par déréférencement
}
...
Dispose(p_a); #536.870.911
{ Libérer la mémoire }
#536.870.910

p_a #1.003 0
p_a #1.002 0
p_a #1.001 0
p_a #1.000 0
...
...
#5
#4
#3
#2
#1
#0
Ebauche da la mémoire plus
compacte
var a : byte;
var p_a : ^byte; {4 octets, lire : pointeur vers a}

p_a := Addr(a); { Sauvegarder l’adresse }


p_a^ := 10; { Déréférencement }
#536.870.911
#536.870.910
« p_a pointe vers a »
p_a #1.003 0
p_a #1.002 0
p_a #1.001 0
p_a #1.000 4
...
#5
a #4 10
#3
#2
#1
#0
Comment connaître l’adresse de a ?
 Addr(a)
var a : byte;
var p_a : ^byte; {4 octets, lire : pointeur vers a}

p_a := Addr(a); { Sauvegarder l’adresse }


p_a^ := 10; { Déréférencement }

p_a a 10
…..
type p_t_musicien = ^t_musicien; bassiste.cle #42
t_musicien = record bassiste.cle #41
cle : integer; bassiste.cle #40
nom : string; ...
annee : integer; guitariste.suivant #35
suivant : p_t_musicien; guitariste.suivant #34
end;
guitariste.suivant #33
var guitariste : t_musicien;
guitariste.suivant #32
var bassiste : t_musicien; guitariste.annee #31
var chanteur : t_musicien; guitariste.annee #30
var musicien : t_musicien; guitariste.annee #29
guitariste.annee #28
guitariste.nom #27
guitariste.nom #26
guitariste.nom #25
guitariste.nom #24
guitariste.cle #23
guitariste.cle #22
guitariste.cle #21
guitariste.cle #20
...
#0
…..
type p_t_musicien = ^t_musicien; bassiste.cle #42
t_musicien = record bassiste.cle #41
cle : integer; bassiste.cle #40
nom : string; ...
annee : integer; guitariste.suivant #35 0
suivant : p_t_musicien; guitariste.suivant #34 0
end;
guitariste.suivant #33 0
guitariste.suivant #32 40
var guitariste : t_musicien;
var bassiste : t_musicien; guitariste.annee #31
var chanteur : t_musicien; guitariste.annee #30
var musicien : t_musicien; guitariste.annee #29
guitariste.annee #28
guitariste.cle := 1; guitariste.nom #27
... guitariste.nom #26
guitariste.suivant := Addr(bassiste);
guitariste.nom #25
guitariste.nom #24
guitariste.cle #23 0
guitariste.cle #22 0
guitariste.cle #21 0
guitariste.cle #20 1
...
#0
Ebauche da la mémoire plus
compacte

‘R’ ‘o’ ‘b’ ‘e’ ‘r’ ‘t’

guitariste cle 1 bassiste cle


nom nom
annee 1982 annee

suivant suivant
Type liste simplement chaînée
type
p_t_liste_simple = ^t_liste_simple;

t_liste_simple = record
cle : integer;
nom : string;
annee : integer;
...

suivant : p_t_liste_simple;
end;
element1

element1^ cle 1
var element1 : p_t_liste_simple;
New(element1); nom
element1^.cle := 1; annee

suivant
Type liste simplement chaînée
var element1 : p_t_liste_simple;
var element2 : p_t_liste_simple;

New(element1);
New(element2);
element1^.suivant := element2;
element2^.suivant := NIL;

element1 element2

element1^ cle element2^ cle


nom nom
annee annee

suivant suivant
Type liste simplement chaînée
var element3 : p_t_liste_simple;
New(element3);
element2^.suivant := element3;
element3^.suivant := NIL;

element1 element2 element3

element1^ cle element2^ cle element3^ cle


nom nom nom
annee annee annee

suivant suivant suivant


Type liste simplement chaînée

- structure de données trés connue


- N’occupe pas de la place successive dans la
mémoire
Type liste simplement chaînée
{ Création de n éléments dans une
New(element);
boucle : }
element^.suivant := NIL;
temp := element;
var element : p_t_liste_simple;
premier := element;
var temp : p_t_liste_simple;
Pour i de 1 à n-1 faire
var premier : p_t_liste_simple;
New(element);
var i : integer;
element^.suivant := NIL;
temp^.suivant := element;
temp := element;
Fin pour

element

temp

premier

cle
nom
annee

suivant
Type liste simplement chaînée
{ Création de n éléments dans une
New(element);
boucle : }
element^.suivant := NIL;
temp := element;
var element : p_t_liste_simple;
premier := element;
var temp : p_t_liste_simple;
Pour i de 1 à n faire
var premier : p_t_liste_simple;
New(element);
var i : integer;
element^.suivant := NIL;
temp^.suivant := element;
temp := element;
Fin pour

element

temp

premier

cle cle
nom nom
annee annee

suivant suivant
Type liste simplement chaînée
{ Création de n éléments dans une
New(element);
boucle : }
element^.suivant := NIL;
temp := element;
var element : p_t_liste_simple;
premier := element;
var temp : p_t_liste_simple;
Pour i de 1 à n faire
var premier : p_t_liste_simple;
New(element);
var i : integer;
element^.suivant := NIL;
temp^.suivant := element;
temp := element;
Fin pour

element

temp

premier

cle cle
nom nom
annee annee

suivant suivant
Type liste simplement chaînée
{ Création de n éléments dans une
New(element);
boucle : }
element^.suivant := NIL;
temp := element;
var element : p_t_liste_simple;
premier := element;
var temp : p_t_liste_simple;
Pour i de 1 à n faire
var premier : p_t_liste_simple;
New(element);
var i : integer;
element^.suivant := NIL;
temp^.suivant := element;
temp := element;
Fin pour

element

temp

premier

cle cle
nom nom
annee annee

suivant suivant
Type liste simplement chaînée
{ Création de n éléments dans une
New(element);
boucle : }
element^.suivant := NIL;
temp := element;
var element : p_t_liste_simple;
premier := element;
var temp : p_t_liste_simple;
Pour i de 1 à n faire
var premier : p_t_liste_simple;
New(element);
var i : integer;
element^.suivant := NIL;
temp^.suivant := element;
temp := element;
Fin pour

premier

cle cle cle cle


nom nom nom
annee annee … annee
nom
annee

suivant suivant suivant suivant

Vous aimerez peut-être aussi