Algorithmes et structures de donnes 10me cours Patrick

  • Slides: 36
Download presentation
Algorithmes et structures de données 10ème cours Patrick Reuter http: //www. labri. fr/~preuter

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

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

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 • Tableau dynamique

 • Tableau statique

• Tableau statique

Organisation de la mémoire var points : array[1. . 10] of byte; {10 octets}

Organisation de la mémoire var points : array[1. . 10] of byte; {10 octets} #536. 870. 911 #536. 870. 910. . . points[10] #2009 90. . . points[3] points[2] points[1] #2002 #2001 #2000 31 25 130 Occupe de la place successive dans la mémoire . . . #0 points[index] #(2000+index-1)

 • Tableau dynamique

• Tableau dynamique

var points : array of byte; {pointeur 4 octets} var i : byte; Set.

var points : array of byte; {pointeur 4 octets} var i : byte; Set. Length(points, 10); points[0] : = 130; points[1] : = 25; … points[9] #129. . . points[2] points[1] #122 #121 25 points[0] #120 130 i points #104 #103 #102 #101 #100 10 0 120. . . #0 jours[index] #(120+index)

Adresse d’une variable

Adresse d’une variable

Organisation de la mémoire var a : byte; ( 1 octet (byte) ) #536.

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.

Organisation de la mémoire var a : byte; #536. 870. 911 #536. 870. 910. . . #1. 000. . . a #5 #4 #3 #2 #1 #0

Organisation de la mémoire var a : byte; a : = 97; #536. 870.

Organisation de la mémoire var a : byte; a : = 97; #536. 870. 911 #536. 870. 910. . . #1. 000. . . a #5 #4 #3 #2 #1 #0 97

Organisation de la mémoire var a : byte; a : = 97; #536. 870.

Organisation de la mémoire var a : byte; a : = 97; #536. 870. 911 #536. 870. 910. . . #1. 000. . . a #5 #4 #3 #2 #1 #0 97 Comment connaître l’adresse de a ? Addr(a)

Organisation de la mémoire var a : byte; a : = 97; p_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. . . a #5 #4 #3 #2 #1 #0 97 Comment connaître l’adresse de a ? Addr(a)

var a : byte; var p_a : ^byte; a : = 97; p_a :

var a : byte; var p_a : ^byte; a : = 97; p_a : = Addr(a); {4 octets, lire : pointeur vers a} { Sauvegarder l’adresse } #536. 870. 911 #536. 870. 910 p_a #1. 003 p_a #1. 002 p_a #1. 001 p_a #1. 000 0 0 « p_a pointe vers a » 0 4. . . a #5 #4 #3 #2 #1 #0 97 Comment connaître l’adresse de a ? Addr(a)

var a : byte; var p_a : ^byte; {4 octets, lire : pointeur vers

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 p_a #1. 002 p_a #1. 001 p_a #1. 000 0 4. . . a #5 #4 #3 #2 #1 #0 10 Comment connaître l’adresse de a ? Addr(a)

var a : byte; var p_a : ^byte; a : = 97; p_a :

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

var a : byte; var p_a : ^byte; a : = 97; p_a :

var a : byte; var p_a : ^byte; a : = 97; p_a : = Addr(a); {4 octets, lire : pointeur vers 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é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); @a; {ou bien }

var p_a : ^byte; New(p_a); p_a^ : = 10; Solution {4 octets, lire :

var p_a : ^byte; New(p_a); p_a^ : = 10; Solution {4 octets, lire : . . . { affectation par déréférencement #536. 870. 911 #536. 870. 910 p_a #1. 003 p_a #1. 002 p_a #1. 001 p_a #1. 000 « p_a pointe vers p_a^ » 0 0. . . p_a^ #5 #4 #3 #2 #1 #0 } 10

Solution {4 octets, lire : pointeur vers a} var p_a : ^byte; . .

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

Ebauche da la mémoire plus compacte

Ebauche da la mémoire plus compacte

var a : byte; var p_a : ^byte; {4 octets, lire : pointeur vers

var a : byte; var p_a : ^byte; {4 octets, lire : pointeur vers a} p_a : = Addr(a); p_a^ : = 10; #536. 870. 911 #536. 870. 910 p_a #1. 003 p_a #1. 002 p_a #1. 001 p_a #1. 000 { Sauvegarder l’adresse } { Déréférencement } 0 0 « p_a pointe vers a » 0 4. . . a #5 #4 #3 #2 #1 #0 10 Comment connaître l’adresse de a ? Addr(a)

var a : byte; var p_a : ^byte; {4 octets, lire : pointeur vers

var a : byte; var p_a : ^byte; {4 octets, lire : pointeur vers a} p_a : = Addr(a); p_a^ : = 10; p_a { Sauvegarder l’adresse } { Déréférencement } a 10

type p_t_musicien = ^t_musicien; t_musicien = record cle : integer; nom : string; annee

type p_t_musicien = ^t_musicien; t_musicien = record cle : integer; nom : string; annee : integer; suivant : p_t_musicien; end; var var guitariste bassiste chanteur musicien : : t_musicien; …. . bassiste. cle #42 bassiste. cle #41 bassiste. cle #40 . . . guitariste. suivant #35 guitariste. suivant #34 guitariste. suivant #33 guitariste. suivant #32 guitariste. annee #31 guitariste. annee #30 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; t_musicien = record cle : integer; nom : string; annee

type p_t_musicien = ^t_musicien; t_musicien = record cle : integer; nom : string; annee : integer; suivant : p_t_musicien; end; …. . bassiste. cle #42 bassiste. cle #41 bassiste. cle #40 guitariste. suivant #35 guitariste. suivant #34 guitariste. suivant #33 guitariste. suivant #32 var guitariste : t_musicien; guitariste. annee #31 var bassiste : t_musicien; guitariste. annee #30 var chanteur : t_musicien; 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 guitariste. cle #22 guitariste. cle #21 guitariste. cle #20 #0 . . . 0 0 0 40 0 1. . .

Ebauche da la mémoire plus compacte ‘R’ ‘o’ ‘b’ guitariste ‘e’ ‘r’ ‘t’ cle

Ebauche da la mémoire plus compacte ‘R’ ‘o’ ‘b’ guitariste ‘e’ ‘r’ ‘t’ cle 1 nom annee 1982 suivant bassiste cle nom annee suivant

Type liste simplement chaînée type p_t_liste_simple = ^t_liste_simple; t_liste_simple = record cle : integer;

Type liste simplement chaînée type p_t_liste_simple = ^t_liste_simple; t_liste_simple = record cle : integer; nom : string; annee : integer; . . . end; suivant : p_t_liste_simple; element 1 var element 1 : p_t_liste_simple; New(element 1); element 1^. cle : = 1; element 1^ cle nom annee suivant 1

Type liste simplement chaînée var element 1 : p_t_liste_simple; var element 2 : p_t_liste_simple;

Type liste simplement chaînée var element 1 : p_t_liste_simple; var element 2 : p_t_liste_simple; New(element 1); New(element 2); element 1^. suivant : = element 2; element 2^. suivant : = NIL; element 1^ element 2 cle element 2^ cle nom annee suivant

Type liste simplement chaînée var element 3 : p_t_liste_simple; New(element 3); element 2^. suivant

Type liste simplement chaînée var element 3 : p_t_liste_simple; New(element 3); element 2^. suivant : = element 3; element 3^. suivant : = NIL; element 1^ element 2 cle element 2^ element 3 cle element 3^ cle nom annee suivant

Type liste simplement chaînée - structure de données trés connue - N’occupe pas de

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 boucle : }

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

Type liste simplement chaînée { Création de n éléments dans une boucle : }

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

Type liste simplement chaînée { Création de n éléments dans une boucle : }

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

Type liste simplement chaînée { Création de n éléments dans une boucle : }

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

Type liste simplement chaînée { Création de n éléments dans une boucle : }

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