Académique Documents
Professionnel Documents
Culture Documents
Structures Donnees PDF
Structures Donnees PDF
Jacques Le Maitre
Universit du Sud Toulon-Var
u v w
liste vide
crer-liste()
fin-liste(m) vrai
m
fin-liste(m) faux
m
liste-vide(l) vrai
l
liste-vide(l) faux
l
insrer-aprs(m, v)
v
m
nouveau
maillon
supprimer-suivant(m)
suivant(m1) m2
m1 m2
suivant(m) nul
m
v valeur(m) v
m
l v1 v2 v3
mmoire
(_, a1) (v2, a3)
l a2 (v3, a4)
a3
(v1, a2)
a1
(_, 0)
a4
Jacques Le Maitre I41 : Types de donnes 25
Reprsentation d'une liste linaire en C
typedef struct maillon Maillon;
struct maillon typedef Maillon *Liste;
{ struct maillon
valeur NULL {
suivant NULL void *valeur;
} Maillon *suivant;
}
[]
v1 v2 v3
#include <stdlib.h>
#include <stddef.h>
#include "erreur.h"
struct maillon
{
void *valeur;
Maillon *suivant;
};
#endif
v3
v2 v3 v2 v1
v1 sommet
crer_pile()
pile-vide(p) vrai
p
pile-vide(p) faux
p sommet
p sommet
empiler(p, v)
v
p sommet
dpiler(p)
v /
p sommet
sommet(p)
[]
v3 v2 v1
#include "TD-liste-lineaire.h"
#include "erreur.h"
Pile creer_pile(void);
int pile_vide(Pile p);
void empiler(Pile p, void *v); Primitives
void *depiler(Pile p);
void *sommet(Pile p);
#endif
v2 v1 v3 v2 v1 v3 v2
entrer v3 v1 = sortir
Jacques Le Maitre I41 : Types de donnes 69
Oprations primitives sur les files (1)
On note :
File(T) : le type des files de valeurs de type T
Cration dune file vide
crer-file : Vide File(T)
crer-file : () []
Test de file vide
file-vide : File(T) Boolen
file-vide : [] vrai
file-vide : [v...] faux
file
vide
v3 v2 v1 v1 v2 v3
tte queue
crer_file()
file_vide(f) vrai
f
file_vide(f) faux
f
v1 v2
f queue
entrer(f, v3)
v1 v2 v3
f queue
sortir(f)
v1 / v2 v3
f tte
tte(f)
queue(f)
[]
v1 v2
[v1, v2 ]
#include <stdlib.h>
#include <stddef.h>
#include "TD-liste-lineaire.h"
#include "erreur.h"
struct file
{
Liste liste;
Maillon *queue;
};
#endif
nud
v1
valeur
v2
feuille
v3 v4 arbre vide
cons_arbre_vide()
nul
a1 a2
a arbre_vide(a) vrai
a v
arbre_vide(a) faux
a v
racine(a) v
g
gauche(a) g
d
droit(a) d
feuille(a1) faux
a1
feuille(a2) vrai
a2
2 3
parcours-prfixe(a) =
si arbre-vide(a) alors
4 5 traiter racine(a)
parcours-prfixe(gauche(a))
parcours-prfixe(droit(a))
Parcours prfixe
racine
sous-arbre gauche
sous-arbre droit
1 4
parcours-infixe(a) =
si arbre-vide(a) alors
3 5 parcours-infixe(gauche(a))
traiter racine(a)
parcours-infixe(droit(a))
Parcours infixe
sous-arbre gauche
racine
sous-arbre droit
1 4
parcours-postfixe(a) =
si arbre-vide(a) alors
2 3 parcours-postfixe(gauche(a))
parcours-postfixe(droit(a))
traiter racine(a)
Parcours postfixe
sous-arbre gauche
sous-arbre droit
racine
1 parcours-en-largeur(a) =
si arbre-vide(a) alors
f = file-vide
entrer(f, a)
2 3 faire
a = sortir(f)
traiter racine(a)
g = gauche(a)
4 5 6 7
d = droit(a)
si arbre-vide(g) alors
entrer(f, g)
si arbre-vide(d) alors
entrer(f, d)
Parcours en largeur
jusqu file-vide(f)
niveau par niveau
a v1 nouvel arbre v1
v2 a v3 partage de sous-arbre v3
v4 v5
partage de sous-arbre
22
cons-arbre-recherche
a
(a, 22, compvv)
22
a 22
cons-arbre-recherche
(a, 56, compvv) 56
a 22
56
cons-arbre-recherche
56 (a, 29, compvv)
29
56 56
cons-arbre-recherche
(a, 75, compvv)
29 29 75
e p t s y
Jacques Le Maitre I41 : Types de donnes 119
chercher (1)
chercher : Arbre(T) K (K T {1, 0, 1}) Arbre(T)
chercher(a, k, compkv) =
si arbre_vide(a ) alors
a
sinon
soit a = (r, g, d) dans
si compkv (k, r) < 0 alors
chercher(g, k, compkv)
sinon
si compkv(k, r) = 0 alors
a
sinon
chercher(d, k, compkv)
a 56
chercher(a, 29) chercher(a, 29)
29 75
a 56
chercher(a, 29) chercher(a, 29)
a 29 75
56
chercher(a, 29) a
chercher(a, 29)
a 29 75
a
56
chercher(a, 12) chercher(a, 12)
29 75
a
56
chercher(a, 12) a (chec)
29 75
#include <stdlib.h>
#include <stddef.h>
#include "erreur.h"
struct noeud
{
void *valeur;
Arbre gauche;
Arbre droit;
};
#endif