Académique Documents
Professionnel Documents
Culture Documents
et
Structure de donnes
Dr. Bienvenu FASSINUT-MOMBOT
2 / 232
Un problme mtaphysique ?
Structures
struct Data_t {
int index_;
char* value_;
} Data_t;
Structures de
donnes
3 / 232
Objectifs
Concevoir et raliser un algorithme correct et efficace pour un
problme donn.
Sensibilisation aux problmes algorithmiques et leur performance,
que ce soit sous la forme de complexit asymptotique ou la
performance sur des machines daujourdhui en tenant compte de la
performance du cache, et de la capacit multiprocesseur.
Introduire des types abstraits, discuter leurs implmentations
possibles
4 / 232
Contenu
Notions de bases de lalgorithmique
Algorithmique et Programmation
Procdure de ralisation dun programme
Structures de donnes
Programmation
Algorithmique et Programmation
Quest-ce quun algorithme ?
Algorithmique et Programmation
Exemple : Algorithme de rsolution dune quation
Un algorithme de rsolution de l'quation ax+b = 0
donnes : a et b entiers
Algorithme :
ecrire("Rsolution de lquation : ax+b=0")
lire(a), lire(b)
Si a est non nul Alors,
on obtient la solution : x = -b/a
Sinon Si b est non nul Alors,
l'quation est insoluble
Sinon tout rel est solution
Rsultat : la solution de lquation ax+b=0; si elle existe
8 / 232
Algorithmique et Programmation
Quest-ce quun programme ?
ALGORITHME:
ecrire("Rsolution de lquation: ax+b=0")
lire(a), lire(b)
Si a est non nul Alors,
on obtient la solution : x = -b/a
Sinon Si b est non nul Alors,
l'quation est insoluble
Sinon tout rel est solution
Structure de contrle
conditionnelle
#include <stdlib.h>
int main (void) {
int a,b;
puts("Rsolution de lquation:
ax+b=0\n");
printf("a?\n"); scanf("%d",&a);
printf("b?\n"); scanf("%d",&b);
if(a 0) printf("x=%f\n",-b/a);
else if (b 0) puts("lquation
est insoluble\n");
else puts("tout rel est
solution\n");
return EXIT_SUCCESS;
9 / 232
}
Algorithmique et Programmation
Quelle est la diffrence ?
En utilisant des images :
Algorithme :
10 / 232
Algorithmique et Programmation
Quelle est la diffrence ?
En utilisant des images :
Programme :
11 / 232
Les pseudo-codes
Nom de lalgorithme
Spcifications
de lalgorithme
Dclaration des
constantes et des
variables
DEBUT
// instructions : suite de squences
// et ruptures de squences
FIN
Corps de lalgorithme
(traitements)
13 / 232
Notion dinstruction
Une instruction est un ordre lmentaire - au sens
algorithmique, que peut excuter un programme.
Les donnes manipules par les instructions sont:
Loprateur dGALIT
=
14 / 232
Notion dinstruction
Oprateurs d'entre/sortie
Clavier et cran
LIRE(x)
Fichiers texte
"lect"
: lecture seule
"ecr"
: criture seule
"lectEcr" : lecture-criture
Notion de squence
DEBUT
ACTION 1 :
CORRESPONDANCE :
LIRE(valeur)
ACTION 2 :
produit <-- valeur *
valeur
ACTION 3 :
ECRIRE(produit)
FIN
ALGORITHME: carre
//BUT :
calcul le carr dun nombre
//ENTREE : entier saisi par lutilisateur
//SORTIE : valeur de lentier au carr
VAR :
valeur, produit : ENTIER
DEBUT
LIRE( valeur )
//ACTION 1
produit <-- valeur * valeur //ACTION 2
ECRIRE( produit )
//ACTION 3
FIN
16 / 232
ACTION 2a :
ACTION 2b :
ECRIRE("choix a")
ECRIRE("choix b")
FIN
17 / 232
Structure algorithmique
La structure algorithmique concerne la concatnation et
les imbrications de squences et ruptures de squences.
Ruptures de squences ou structures de contrle :
Rupture conditionnelle (et non rptitive) dinstructions
SIALORS...FINSI
SI...ALORSSINON...FINSI
CAS...PARMI...FINCASPARMI
CASPARMIPARDEFAUT...FINCASPARMI
24 / 232
25 / 232
Notion de variable
La notion de variable est trs importante en
programmation
Dans un programme informatique, on a, en permanence,
besoin de stocker
provisoirement des valeurs :
donnes issues du disque dur ;
donnes fournies par l'utilisateur (frappes au clavier) ;
rsultats (intermdiaires ou dfinitifs) obtenus par le
programme.
27 / 232
Notion de variable
Du point de vue smantique, une variable est une entit
qui possde trois caractristiques :
28 / 232
Notion de variable
Le type dune variable indique au compilateur la manire de stocker la
variable en mmoire
En employant une image
Une variable est un rcipient, que l'ordinateur va reprer par une
tiquette (un nom). Pour avoir accs au contenu du rcipient, il suffit de
le dsigner par son tiquette.
Notion de variable
Lorsqu'on dclare une variable, il ne suffit pas de crer
un rcipient (rserver un emplacement mmoire).
Il faut encore prciser ce que l'on voudra mettre dedans, car de
cela dpendent la taille et la nature du rcipient.
30 / 232
Notion de Pointeur
Le pointeur est une variable de type "adresse dune autre
variable":
La dclaration s'effectue sous la forme :
Notion de Pointeur
La valeur de la
variable
nombre_entier (5720)
se trouve ladresse
04DFF5C2
Pnombre_entier
contient ladresse
(04DFF5C2) de la
variable
nombre_entier, et se
trouve ladresse
04DFF5C8
La valeur de
nombre_entier (5720)
est accessible l'aide
de *Pnombre_entier
Nom
Adresse
Contenu
04DFF5C0
nombre_entier
04DFF5C2
5720
04DFF5C4
04DFF5C6
Pnombre_entier
04DFF5C8
04DFF5CA
04DFF5C2
04DFF5CC
04DFF5CE
04DFF5D0
33 / 232
Notion de Pointeur
Allocation dynamique de la mmoire ou rservation
mmoire
34 / 232
les traitements doivent tre scinds en plusieurs modules (sousprogrammes) et la structure algorithmique principale doit tre regroup
dans le programme principal en intgrant les appels ventuels aux sousprogrammes.
Un module peut appel un autre module, si ce module appelle le module
appelant, cette spcificit se nomme : la rcursivit croise.
Un module peut s'appeler lui-mme (la rcursivit).
chiffre
C
O
P
I
E
valeur
6
5
Espace
mmoire pour
les variables du
programme
principal
Espace
mmoire pour
les variables de
la procdure
5
41 / 232
6
chiffre
6
5
5
PROGRAMME: affichage
VAR:
chiffre
:ENTIER
DEBUT
chiffre<-- 5
ECRIRE( chiffre )
incremente( &chiffre )
ECRIRE( chiffre )
FIN
&chiffre
Pvaleur &chiffre
Espace
mmoire pour
les variables du
programme
principal
Espace
mmoire pour
les variables de
la procdure
6
42 / 232
43 / 232
Structures de donnes
Donnes
etudiant = structure
nom, prnom : chane de caractres
ge : entier positif
Algorithme
sexe : caractre
...
fin structure
Structures
de
donnes
Rsultats
ENTIER
(4 octets
ou
32 bits)
Oprations
possibles
Addition
Soustraction
Multiplication
Division
Exposant
Modulo
Comparaisons
Oprations
possibles
Addition
REEL
Soustraction
(8 octets
Multiplication
ou
Division
64 bits)
Exposant
Comparaisons
47 / 232
Oprations
possibles
CARACTERE
Comparaison
Extraction
(1 octet
ou
8 bits)
48 / 232
CHAINE
Oprations
possibles
Concatnation
Longueur
Extraction
49 / 232
Oprations
possibles
BOOLEEN
Comparaison
= <>
(1 octet
Ngation
ou
Conjonction
ET
8 bits)
Disjonction
OU
50 / 232
nom de la donne
nom_de_la_donnee :ENTIER
type lmentaire
Le type est toujours
prcd du signe :
51 / 232
nom de la donne
valeur d'initialisation
type lmentaire
Le type est toujours
prcd du signe :
52 / 232
nom de la donne
valeur d'initialisation
nom de la donne
opration
Symbole
d'affectation
Opration lors
de l'affectation
55 / 232
56 / 232
Tableaux
Deux dimensions
Trois dimensions
57 / 232
indice maximum
nom du tableau
type lmentaire
Le type lmentaire (ENTIER,
REEL, CARACTERE, CHAINE,
BOOLEEN), est toujours prcd
du signe :
58 / 232
nom du tableau
indice maximum
type lmentaire
Le type lmentaire (ENTIER,
REEL, CARACTERE, CHAINE,
BOOLEEN), est not aprs les
valeurs affectes.
59 / 232
valeur
nom du tableau
nom de la donne
nom du tableau
nom_du_tableau [ indice_courant ]
nom_du_tableau [ indice_courant ] + 1
nom du tableau
Nom du tableau
contenant la valeur
d'affectation.
indice courant
L'indice courant du tableau dont la
valeur est extraite peut tre diffrent
de celui de la r-affectation.
opration
Opration lors
de l'affectation
62 / 232
nom du tableau
type lmentaire
Le type lmentaire (ENTIER, REEL,
CARACTERE, CHAINE, BOOLEEN), est
toujours prcd du signe :
63 / 232
nom du tableau
seconde dimension
Les lments sont ordonns dans la
seconde dimension, entre
accolades.
64 / 232
nom du tableau
nom_du_tableau [ indice_courant1d ]
[ indice_courant2d ] valeur
indice courant seconde dimension
L'indice courant est ici l'indice de la seconde dimension.
65 / 232
66 / 232
nom du tableau
indices
type lmentaire
Le type lmentaire (ENTIER, REEL,
CARACTERE, CHAINE, BOOLEEN), est
toujours prcd du signe :
67 / 232
Indice
Indice
Indice
Indice
Indice
Indice
lundi
mardi
mercredi
jeudi
vendredi
samedi
dimanche
68 / 232
seconde dimension
premire dimension
1
10
11
12
1
2
3
4
30
31
69 / 232
seconde dimension
premire dimension
tro
isi
me
dim
en
sio
n
70 / 232
nom_champ_n : type_champ_n
Il est alors possible daccder ses champs laide lune des deux
notations quivalentes ci-dessous
(*ptr).nom_du_champ <-- une valeur
ptr-->nom_du_champ <-- une valeur
74 / 232
TD 1 : Structure de contrle
Exercice 1 : SI..ALORS..FINSI
Exercice 2 : SI..ALORS..SINON..FINSI
Exercice 3 : CAS..PARMI..PARDEFAUT..FINCASPARMI
76 / 232
TD 1 : Structure de contrle
Exercice 1 rsolu : SI..ALORS..FINSI
TD 1 : Structure de contrle
Exercice 2 rsolu : SI..ALORS..SINON..FINSI
TD 1 : Structure de contrle
Exercice 3 rsolu : CAS..PARMI..PARDEFAUT..FINCASPARMI
ALGORITHME: nombre_jours
VAR:
mois
:CHAINE
nbre_jours
:ENTIER
DEBUT
LIRE( mois )
CAS( mois )PARMI:
CAS1: "Fvrier"
nbre_jours <-CAS2: "Avril"
nbre_jours <-CAS3: "Juin"
nbre_jours <-CAS4: "Septembre"
nbre_jours <-CAS5: "Novembre"
nbre_jours <-PARDEFAUT:
nbre_jours <-FINCASPARMI
ECRIRE ("Il y a ", nbre_jours," jours en
FIN
28
30
30
30
30
31
", mois)
79 / 232
TD 1 : Structure de contrle
Exercice 4 rsolu : TANTQUE..FAIRE..; REPETER..TANTQUE/JUSQUA..;
Enonc : Le programme affiche systmatiquement chaque mot que l'utilisateur
frappe jusqu' ce que le mot "fin" soit saisi. Le programme s'arrte ce momentl, le mot fin tant le dernier apparatre sur lcran.
ALGORITHME: mots_tapes2
//affichage du mot tap ds lors que celui-ci
//n'est pas le mot "fin"
VAR:
mot
:CHAINE
DEBUT
REPETER
LIRE( mot )
ECRIRE( mot )
TANTQUE( mot <> "fin" )
FIN
80 / 232
Enonc : Ecrire un algorithme qui demande deux nombres l'utilisateur et l'informe ensuite
si leur produit est ngatif ou positif (on laisse de ct le cas o le produit est nul).
Attention toutefois : on ne doit pas calculer le produit des deux nombres.
Exercice 2
Enonc : Ecrire un algorithme qui demande trois noms l'utilisateur et l'informe ensuite
s'ils sont rangs ou non dans l'ordre alphabtique.
Exercice 3
Exercice 4
Enonc : Ecrire un algorithme qui demande deux nombres l'utilisateur et, sans calculer le
produit, l'informe ensuite si le produit est ngatif, positif ou nul.
Exercice 5
Enonc : Ecrire un algorithme qui demande lge d'un enfant l'utilisateur. Ensuite, il
l'informe de sa catgorie :
"Poussin" de 6 7 ans
"Pupille" de 8 9 ans
"Minime" de 10 11 ans
"Cadet" aprs 12 ans
81 / 232
Choix :
83 / 232
Premires tapes:
85 / 232
En dautres termes:
86 / 232
f(n)
type de complexit
linaire
n2
bn
exponentielle
logbn
nb
temps pour n6
32
232/2 x 10-9 65 s
326 x 10-9 1 s
64
264/2 x 10-9 4 s
646 x 10-9 1 mn 8 s
128
256
512
1024
C (n) 1010
89 / 232
g est une borne inf. : sert connatre le temps min que prendra lalgorithme
90 / 232
Attention!
Notion de complexit
Temps dexcution
temps(T, n) a C(n)
94 / 232
Concept fondamental :
en mathmatique :
relation de rcurrence :
n! = n(n - 1)!
pour n >= 1 avec 0! = 1
en informatique :
fonctions rcursives.
Principe en algorithmique
96 / 232
98 / 232
99 / 232
appel
appel
appel
fact()
3 x fact(3-1)
fact(0)
3
2
1
0
1
2
3
fact(3)
fact(2)
fact(1)
1 x 1
2 x 1
3 x 2
2 x fact(2-1)
1 x fact(1-1)
1
1
2
6
100 / 232
EMPILER( 3 )
EMPILER( 2 )
EMPILER( 1 )
DEPILER()
DEPILER()
DEPILER()
1
2
3
101 / 232
Et il y a aussi Fibonacci
Exemple : Un robot peut avancer par des pas de 1 ou 2
mtres.
Calculer le nombre de faons diffrentes
Distance
Suite de pas
Nb de
possibilits
1,1 ou 2
1, 1, 1 ou 1, 2 ou 2, 1
5
102 / 232
Et il y a aussi Fibonacci
Pas(n): Nombre de
possibilits pour
parcourir n mtres.
Pas(1) = 1, Pas(2) = 2;
Pour n>2:
Pas(n-1)
Pas(n-2)
Donc, Pas(n) =
Pas(n-1)+Pas(n-2)
Entre: n
Sortie: Pas(n)
Procdure Pas (n)
Si n=1 ou n=2 alors
Retourne n
Retourne Pas(n-1) + Pas(n-2)
Fin Pas
Squence de Fibonacci:
f1 = 1
f2 = 2
fn = fn-1 + fn-2 pour n>2
103 / 232
"Drcursiver"
drcursiver =
104 / 232
"Drcursiver"
Remarques
Les programmes itratifs sont souvent plus efficaces,
mais les programmes rcursifs sont plus faciles
crire.
Les compilateurs savent, la plupart du temps,
reconnatre les appels rcursifs terminaux, et ceux-ci
nengendrent pas de surcot par rapport la version
itrative du mme programme.
Il est toujours possible de drcursiver un algorithme
rcursif.
105 / 232
106 / 232
Rcursivit : Bilan
un algorithme rcursif peut tre transform en algorithme itratif
(ne le faire que si on voit que l'algorithme "patine" ou besoin
imprieux)
un programme itratif n'est pas toujours plus efficace qu'un
programme rcursif
la rcursivit est centrale
107 / 232
VALIDATION
VALIDATION
des
des modules,
modules,
puis
puis du
du
programme
programme
FAIRE
FAIRE UN
UN PROGRAMME
PROGRAMME
==
modlisation
modlisation
++
Rsolution
Rsolution
MODULARITE
MODULARITE
==
qualit
qualit accrue
accrue
du
du programme
programme
Cest
Cest une
une tche
tche qui
qui
ncessite
ncessite de
de la
la rigueur
rigueur
DECOUPAGE
DECOUPAGE
EN
EN MODULES
MODULES
fonctions,
fonctions,
(procdures
(procdures ::
moins
moins utilises)
utilises)
RECURSIVITE
RECURSIVITE
simplification
simplification
des
des fonctions
fonctions
rptitives
rptitives
108 / 232
109 / 232
TD 2 : Complexit algorithmique
Exercice 1
Enonc : crire une fonction en langage algorithmique qui prend en paramtre un entier i et calcule la valeur
u(i) dfinie par rcurrence par :
u0 1; u1 2
u j 1 3 u j u j 1 pour j 1
Exercice 2
3 x 2 x 1 si x 1
f x
0
sinon
a) crire une fonction en langage algorithmique qui prend en paramtre un entier x et calcule f(x).
b) crire une fonction en langage algorithmique qui prend en paramtre un entier n et calcule la somme :
S n f n f n 1 f n 2 f n 3 f n 4
2 f n 4 f n 8 f n16
Un f n f n
Dans cette somme, les divisions sont des divisions euclidiennes. On arrtera la somme lorsque la valeur f
calcule est nulle.
111 / 232
113 / 232
E
115 / 232
E
116 / 232
117 / 232
Fonctions lmentaires :
AJOUTER(nom_liste,element) //ajout en queue
INSERER(nom_liste,element) //insertion courante
element <-- RETIRER(nom_liste)
//retrait
ECRIRE(nom_liste,element)
//criture courante
element <-- LIRE(nom_liste) //lecture courante
Fonction complmentaire :
VIDER(nom_liste) //ordonne le retrait de tous les
lments
var_booleen <-- RECHERCHER(nom_liste,element) //recherche
un lment particulier
118 / 232
AJOUTER
AJOUTER
AJOUTER
AJOUTER
AJOUTER
AJOUTER
AJOUTER
AJOUTER
(l_quinte,"1")
(l_quinte,"4")
(l_quinte,"5")
(l_quinte,"7")
(l_quinte,"10")
(l_quinte,"15")
(l_quinte,"23")
(l_quinte,"25")
7
5
10
15
23
25
119 / 232
RECHERCHER(l_quinte,"10")
RETIRER(l_quinte)
RECHERCHER(l_quinte,"4")
RETIRER(l_quinte)
7
5
10
RECHERCHER(l_quinte,"25")
RETIRER(l_quinte)
15
23
25
120 / 232
7
5
15
23
121 / 232
7
5
15
23
122 / 232
suivant [1..8]
chevaux [1..8]
precedent [1..8]
10 15 23 25
4
/
123 / 232
2.
3.
124 / 232
afficher un lment
ElementAfficher
Pour les lments qui utilisent de la mmoire dynamique ou qui ont besoin
d'tre initialiss, on a besoin de primitives pour allouer et dsallouer la
mmoire dynamique (crer et dtruire) :
allouer la mmoire dynamique ou initialiser un lment
ElementCreer
125 / 232
Dans la suite :
une position sera un entier ou un pointeur
Structure de donne
Une liste est un pointeur sur une structure deux
champs
un tableau automatique qui contient les lments de la liste
un entier indiquant l'indice du dernier lment de la liste
suivant
L
Cellules\0
Chanes\0
130 / 232
131 / 232
adresse1
adresse5
suivant
adresse7
adresse8
adresse7
adresse8
adresse3
adresse2
adresse3
adresse4
adresse6
Exemple : (a b c) et (d e)
adresse9
adresse10
132 / 232
inconvnients
ncessite de connatre l'avance la taille maximum de la liste
coteux en mmoire si on a des listes de taille trs variable
rend coteuses les oprations d'insertion et de suppression
(en O(n))
133 / 232
inconvnients
risque de mauvaise manipulation sur les pointeurs (contrle de la
validit des positions qui augmente la complexit ou fragilise la
structure de donnes)
coteux en mmoire si beaucoup de grosses listes (un pointeur
par cellules)
rend coteuses les oprations longueur, prcdent, sentinelle,
insrer en fin ( en o(n))
134 / 232
Une pile est une structure en forme de liste pour laquelle les oprations
dajout et de retrait dlment ne sont effectues qu une seule
extrmit, appele sommet de pile (ou tte).
Une pile est une structure de donnes du type LIFO (Last In First
Out), ce qui correspond "dernier entr premier sorti".
Une pile est une zone contigu de la mmoire pouvant contenir des
valeurs
Une pile est une structure qui permet un processus informatique de "se
souvenir" pendant un certain temps dune information ou d'une suite
d'informations.
Ce qui est "empil" est considr comme tant des lments non encore
traits, du travail restant effectuer, par exemple :
Pile permettant de mmoriser les rsultats intermdiaires dun calcul.
Gestion des variables locales lors des appels dune fonction (tudi lors des
modules suivants).
135 / 232
136 / 232
Fonctions lmentaires :
EMPILER(nom_pile,element) //ajout dans la pile
element <-- DEPILER(nom_pile) //retrait
element <-- TETE(nom_pile) //lecture seulement
var_booleen <-- PILE_VIDE(nom_pile) //test
var_booleen <-- PILE_PLEINE(nom_pile) //test
Fonction complmentaire :
VIDER(nom_pile) //ordonne le retrait de tous les lments
PILEDETRUIRE(nom_pile) //permet de dtruire la pile
138 / 232
8
3
9
51
17
5
56
139 / 232
calcul [1..6]
56
5
5+(9+8)*3
17
9
51
3
8
140 / 232
141 / 232
un pointeur vers une zone dans le tas alloue pour pouvoir contenir
un nombre d'lments gal la profondeur maximum
l'indice du sommet de la pile
la profondeur maximale de la pile
typedef struct {
ELEMENT *elements ; /* tableau des lments */
int sommet ;
int profMax ; /* capacit de la pile */
} pile,*PILE ;
143 / 232
STRUCTURE cell
element :ELEMENT
*suivant : cell //liste simplement chanes
TYPE *LISTE : cell
STRUCTURE PILE
sommet : LISTE
nb_elt : ENTIER
Structure PILE
Comparaison entre tableau et liste
Dans les deux types de gestion des piles, chaque
primitive ne prend que quelques oprations (complxit
en temps constant).
Par contre, la gestion par listes prsente lnorme
avantage que la pile a une capacit virtuellement
illimite (limite seulement par la capacit de la RAM).
La mmoire tant alloue mesure des besoins.
Au contraire, dans la gestion par tableaux, la mmoire
est alloue au dpart avec une capacit fixe.
145 / 232
Une file est une structure en forme de liste pour laquelle les
oprations dajout sont effectues une seule extrmit
appele : la queue de la file ; et les oprations de retrait sont
effectues l'autre extrmit appele : la tte de la file.
La notion de file se rapproche de celle dune file dattente
comme au cinma,
Ce concept est courant en informatique, par exemple : gestion de
la file d'attente des impressions sur une imprimante en rseau,
...
Pour rsumer, les lments dune file sont traits dans leur
ordre darrive : llment prsent depuis le plus longtemps est
le premier, on dit quil est en tte
Une file est une structure de donne du type FIFO (First In
First Out), ce qui correspond "premier entr premier sorti".
146 / 232
147 / 232
148 / 232
Fonctions lmentaires :
ENFILER(nom_file,element) //ajout dans la file
element <-- DEFILER(nom_file) //retrait
element <-- TETE(nom_file) //lecture seulement
var_booleen <-- FILE_VIDE(nom_file) //test
var_booleen <-- FILE_PLEINE(nom_file) //test
Fonction complmentaire :
VIDER(nom_file) //ordonne le retrait de tous les lments
149 / 232
ENFILER( 'B' )
R U O J N O B
ENFILER( 'O' )
ENFILER( 'N' )
ENFILER( 'J' )
ENFILER( 'O' )
BONJOUR
ENFILER( 'U' )
ENFILER( 'R' )
ECRIRE( DEFILER(), DEFILER(), DEFILER(), DEFILER(),
DEFILER(), DEFILER(), DEFILER() )
150 / 232
TETE
transmission [1..7]
QUEUE
151 / 232
ELEMENT
ENTIER
ENTIER
ENTIER
FILE
152 / 232
153 / 232
STRUCTURE cell
element
: ELEMENT
*suivant : cell //cellules chanes
TYPE *cellule : cell
STRUCTURE FILE
tete
: cellule //pointeur de tte
queue
: cellule //pointeur de queue
nb_elt
: ENTIER //profondeur de la file
TYPE *FFILE : FILE
154 / 232
155 / 232
156 / 232
FILE
FILE
o
o lon
lon entre
entre par
par
la
la queue
queue et
et sort
sort
par
par la
la tte
tte
STRUCTURE
STRUCTURE
LINEAIRE
LINEAIRE
donnes
donnes mises
mises bout
bout
bout,
bout, adressage
adressage via
via
indice
indice ou
ou pointeur
pointeur
TABLEAU
TABLEAU
11 dimension,
dimension,
22 dimensions,
dimensions,
33 dimensions
dimensions
ou
ou plus
plus
LISTES
LISTES
chanage
chanage
simple
simple ou
ou
double
double
PILE
PILE
o
o lon
lon entre
entre et
et
sort
sort par
par le
le
sommet
sommet (tte)
(tte)
157 / 232
159 / 232
Vision largie :
160 / 232
S = {1,2,3,4,5,6}
A = {(1;2),(1;3),(2;3),(3;1),(3;4),(4;3),(5;6),(6;5),(6;6)}.
164 / 232
Luc
Anne
Olivier
Marie
Pierre
165 / 232
Luc
Anne
Olivier
Marie
Pierre
166 / 232
167 / 232
De plus, si s = s, on dit que (s, s') (resp. {s, s'} ) est une
boucle
Deux sommets sont voisins si ce sont les extrmits
dune mme arte (arc).
Le degr d'un sommet s, not d(s), est le nombre de brins
d'artes ayant s comme extrmit.
Une boucle compte deux fois.
Attention ! Le degr de s nest pas le nombre de voisins de s.
168 / 232
graphe tiquet :
les sommets du graphe portent une information
appele "tiquette" du sommet
Accessibilit
Un graphe est accessible sil existe un chemin de s s dans G,
NON sinon
170 / 232
171 / 232
172 / 232
Stockage.
Traitement.
Cartes : chemin le plus court, le moins chre
Hypertexte : les liens des documents htmls, le web est un
immense graphe
Ordonnancement de tches
Transaction : trafic du tlphone portable
Rseau : informatique (envoi, rception de messages)
Structure des programmes : compilateurs
Objectif :
Gain de place.
Rapidit dexcution.
Format universel.
174 / 232
inconvnients
ncessite le parcours dune ligne/colonne pour
connatre tous les voisins dun sommet
faible ratio taille/informations pour des graphes peu
denses
ncessit dutiliser des structures de donnes
complmentaires si informations additionnelles
(couleur, etc).
175 / 232
inconvnients
dlicat manipuler
chaque structure est ddie une application donne
faible rutilisabilit des codes.
176 / 232
Proprit :
Une proprit intrinsque de la structure darbre est la
rcursivit
Les dfinitions des caractristiques des arbres (aussi bien que
les algorithmes qui manipules les arbres) scrivent trs
naturellement de manires rcursive
177 / 232
Les arborescences
frres (alternant) :
une branche :
nud interne
b
3
e
branche
b
niveau 2
nud externe
d enfants de a
g anctres de g
d frres de b
j descendants de g
181 / 232
183 / 232
184 / 232
b
e
inconvnients
D
5
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
186 / 232
a
b
c
e
h
Tableau de 14 lment implmentant larbre ci-dessus :
0
10
11
12
13
j
187 / 232
188 / 232
Mmoire
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
0 arbre
2 arbres
A1
A2
A1
c
d
e
A2
f
g
189 / 232
avantages
dfinition rcursive
simple programmer
la plus utilise
1
a
0
2
b
1
3
c
1
4
d
1
5
e
1
6
f
2
7
g
5
8
h
5
193 / 232
194 / 232
10 11 12 13 14 15 16
m n
MonArbre
a
c
b
h
c
d
h
g
i
j
196 / 232
c
f
*
c
d
*
d
g
*
g
197 / 232
un arbre est
Ide n 1 : un pointeur sur un nud
Ide n 2 : un pointeur sur une cellule
198 / 232
MonArbre
fils suivant
Une Cellule
a
tiquette listeFils
a
b
b
d
*
g
MonSous-Arbre
*
199 / 232
La structure de donnes
en langage algorithmique
STRUCTURE cell
* cell : arb
* suivant : cell
TYPE * LISTEDARBRES :
cell
STRUCTURE arb
etiquette : ELEMENT
listeDesFils :
LISTEDARBRES
TYPE *ARBRE : arb
200 / 232
MonArbre
Un noeud
fils suivant
Une Cellule
a
a
tiquette listeFils
b
b
d
*
g
MonSous-Arbre
*
201 / 232
La structure de donnes
en langage algorithmique
STRUCTURE cell
* fils : noeud
* suivant : cell
TYPE * ARBRES : cell
STRUCTURE noeud
etiquette : ELEMENT
listeDesFils :
ARBRES
TYPE NOEUD : noeud
202 / 232
203 / 232
204 / 232
c
d
a
h
g
b
l
i
j
c
d
h
g
i
j
Parcourir un arbre ?
Parcours :
examiner les nuds dun arbre pour effectuer un traitement
en largeur
(itratif par nature)
206 / 232
3.
208 / 232
on traite un nud
on fait entrer dans la file
dabord son fils gauche
puis son fils droit
209 / 232
210 / 232
211 / 232
arr
four de
y
t
'
i
u
d
c
t
s
avan nger un bi lant tout
s il
de ma e coco en al coco : apr
noix d la noix de jeter le
suite te plus qu'
ne res .
biscuit
verte
e
n
g
i
l
La
----Kin g
n
e
h
p
e
St
-----
212 / 232
Programmation
214 / 232
215 / 232
Syntaxe :
#include "chemin_acces_fichier_a_inclure"
(par exemple dans le rpertoire de travail)
#include <nom_de_fichier_public>
recherche du fichier inclure dans le(s) rpertoire(s)
standard
Exemple UNIX : /usr/include /usr/include/sys
216 / 232
Substitution d'identificateurs
peu utile en C++, viter!
Rle :
Syntaxe :
#define identificateur chaine_de_caractres
Exemples
#define boucle for( ; ;)
#define _MODULEH
Traduction conditionnelle
Rle:
Syntaxe :
#ifdef identificateur
phrases ou directives C/C++
#endif
Exemples :
macro assert (condition) ;
#ifdef DEBUG
cout << "Mise au point : x =" << x << endl;
#endif
218 / 232
219 / 232
struct complexe {
double reelle;
double imaginaire;
};
struct complexe z;
norme=sqrt(z.reelle*z.reelle+z.imaginaire*z.imaginaire);
220 / 232
typedef declaration_de_variable;
typedef nom_type_existant nouveau_nom;
Utilisation :
point mon_point;
mon_point.x = 5;
nombrePositif n=3;
221 / 232
Attention:
criture algorithmique
v
: ENTIER
x
: REEL
lx : REEL
b
: BOOLEEN
c
: CARACTERE
tab[10] : ENTIER
Instruction simple
Expression ; (; la fin de chaque instruction simple)
LExpression est gnralement une affectation (mise en
mmoire)
x = 3.0;
224 / 232
criture algorithmique
SIALORSSINONFINSI
TANTQUEFAIREFINTANTQUE
REPETERTANTQUE
for(Instruction1;
Condition;
Instruction2){
Action(s)
}
switch(Expression){
cas expr1:
Action(s)1;
break;
cas expr2:
Action(s)2;
break;
default:
Action(s) par dfaut;
}
criture algorithmique
POURFAIREFINPOUR
CASPARMIPARDEFAUT
FINCASPARMI
relles
Oprateurs relationnels
galits
comparaisons
inf. gal : <= strict. inf. : < sup. gal : >= strict. sup. : >
logiques
Fichiers
Fichierssources
sources
C/C++
C/C++
1. Prprocesseur
.h
.c
cc
cc(gcc,
(gcc,g++,
g++,)
)enchanent
enchanentles
les
oprations
en
fonction
:
oprations en fonction :
des
desoptions
optionsde
delalacommande:
commande:
-E
:
tape
1
-E : tape 1
-S
-S: :tapes
tapes1-2
1-2
-c
:
tapes
1-2-3
-c : tapes 1-2-3
dfaut
dfaut: :tapes
tapes1-2-3-4
1-2-3-4
-0
:
optimisation
-0 : optimisationdans
dansl'tape
l'tape22
etetdes
dessuffixes
suffixesdes
desfichiers
fichiers
traiter:
traiter:
.c
.c.cpp
.cpp.o
.o
.cpp
Code pr-process
2. Compilateur
3. Assembleur
Fichier(s)
Fichier(s)Objet
Objet
.o
Fichier(s)
Fichier(s)
librairies
librairies
.lib
4. Editeur de liens
.so
Fichier(s)
Fichier(s)
excutable(s)
excutable(s)
a.out
.exe
228 / 232
Notepad++
Dev-C++
229 / 232
231 / 232
Puis cliquer sur le marteau puis sur la flche blanche dans le rond vert
232 / 232