Algorithmes et structures de donnes 10me cours Patrick
- Slides: 36
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. . . 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
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
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. . . a #5 #4 #3 #2 #1 #0
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. 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 : = 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 : = 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 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 : = 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 : = 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’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 : . . . { 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; . . . 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
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 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 : 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 : 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 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; 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; 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 : = 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 la place successive dans la mémoire
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 : } 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 : } 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 : } 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 : } 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
- Le pain que tu nous donnes
- Jsus
- Homologous structures definition
- Viande maturée danger
- Cours anthropologie infirmier
- Identitovigilance définition oms
- Cours sévigné abidjan
- Distance interréticulaire hexagonal
- Assemblage en cours
- Les helminthes cours
- Puffing billy aspirateur
- Psychologie expérimentale - cours
- Syllabus de cours
- Commentaire jsp
- La gestion internationale des ressources humaines
- Musibiol exercice
- Cours dynatrace
- L'équilibre alimentaire cours ifsi
- Fin de semaine prochaine
- Aéraulique cours
- Cours hydrogéologie master
- Cours marketing segmentation ciblage positionnement
- La biodiversité au cours du temps
- Intégrale impropre cours
- Filtrage numérique cours
- La tectonique des plaques - cours
- Cours den
- Pharmacocinétique
- Cours turbomachine
- Cours sur la méthode croc
- Cours mimo
- Cours cap apr
- Nombre chromatique d'un graphe
- Cours fiscalité
- Cours fdf3
- Congruence modulo cours
- Les compteurs cours