Académique Documents
Professionnel Documents
Culture Documents
Chapitre 3
Plan I
Introduction
Introduction
Introduction
Generalites
Generalites
Tableaux
Tableaux
Attention
Il n’est cependant pas possible de modifier la taille d’un tableau, ce
qui est genant pour un certain nombre d’algorithme.
Tableau statique
Les tableaux représentent une structure statique.
Le nombre d’elements qu’elle contient ne peut pas varier.
Chapitre 3 Algorithmique Avancée et Compléxité
Introduction
Generalites
Tableaux
Structures de donnees elementaires
Pointeurs
Structures
Liste chainee
Tableaux
Pointeurs
Définition
Une variable est un espace memoire nomme, de taille fixee.
Il est donc possible de parler de l’adresse d’une variable.
L’adresse d’une variable etant une valeur, elle a donc un type :
c’est un pointeur.
Un pointeur particulier est le pointeur NIL (NULL en C). Il
represente une adresse inaccessible et c’est donc une valeur que l’on
utilise pour dire que le pointeur n’a pas de valeur determinee
Structures
Définition
Une structure est comme un tableau, constitué de la réunion d’un
ensemble de valeurs.
Mais à la différence des tableaux, ces valeurs ne sont pas
nécessairement de même type.
L’accès à une valeur de la structure ne se fait pas avec l’aide
d’indice, mais grâce à son nom.
Structures
Exemples
Le type structure permet de rassembler des informations sous un
type que vous aurez créé.
Par exemple vous créez le type Personne qui possède un nom, un
prénom et un âge.
Ou bien un type Point qui a une abscisse x et une ordonnée y.
Structures-Déclaration
Structures-Déclaration
Structures-Déclaration
Structures-Déclaration
Attention
Une structure peut comporter des champs de son type mais il faut
le déclarer au préalable de cette façon :
typedef struct personne pers ;
struct personne{
char nom[20];
char prenom[15];
int age ;
pers * pere ; };
Structures-Déclaration
Liste chainee
Une liste chainee est :
soit la liste vide
soit une cellule a deux champs, un champ tete contenant un
element, et un champ queue contenant l’adresse d’une autre
liste.
Autrement dit, une liste est "soit vide, soit un element suivi d’une
liste".
Cette definition est amusante car elle est recursive : elle utilise le
mot "liste". La definition d’une liste utilise la definition d’une liste !
Mais, de meme que les programmes recursifs, qui ne tournent pas
en boucle a l’infini, cette definition n’est pas un cercle vicieux, et
elle est tout a fait correcte (vous le verrez a l’usage).
Chapitre 3 Algorithmique Avancée et Compléxité
Introduction
Generalites
Tableaux
Structures de donnees elementaires
Pointeurs
Structures
Liste chainee
Liste chainee
Liste chainee
Une liste chainee est une structure de donnees dans laquelle les
elements sont ranges lineairement. Chaque element est lie a son
successeur.
Liste chainee
Liste chainee
Liste chainee
Liste chainee
Liste chainee
Liste chainee en C
Un élément de la liste
Pour nos exemples, nous allons créer une liste chaînée de nombres
entiers. Chaque élément de la liste aura la forme de la structure
suivante :
Liste chainee en C
Initialiser la liste
Liste ∗ initialisation()
{
Element *element = malloc(sizeof(*element));
if ( element == NULL)
exit(EXITF AILURE );
element->val = 0;
element->next = NULL;
return element;
}
Liste chainee en C
Insertion
Suppression
L’algorithme SUPPRESSION-LISTE elimine un element x d’une
liste chainee L. Cet algorithme a besoin d’un pointeur sur l’element
x a supprimer. Si on ne possede que la cle de cet element, il faut
prealablement utiliser l’algorithme RECHERCHE-LISTE pour
obtenir le pointeur necessaire.
Suppression
Recherche
L’algorithme RECHERCHE-LISTE(L, k) trouve le premier element
de cle k dans la liste L par une simple recherche lineaire, et
retourne un pointeur sur cet element. Si la liste ne contient aucun
objet de cle k, l’algorithme renvoie NIL.
Ajout - retrait
Liste : O(1)
Tableau : La taille d’un tableau etant fixee a l’avance, il n’est
pas possible de rajouter des elements (creer un tableau plus
grand et y copier les N elements du tableau initial : O(N))
Taille
Tableau : toujours connue O(1)
Liste : on parcourt la liste jusqu’a tomber sur la liste vide O(N)
Acces a un element
Tableau : toujours connue O(1).
Liste : on accede directement a la premiere cellule O(1) sinon,
il faut parcourir la liste au pire des cas jusqu’a la fin O(N)
Concatenation
Tableau :
Si le premier tableau est A, et le deuxieme B, et que l’on note L la
taille de A et L0 la taille de B, on cree un tableau de taille L+L0 , ou
l’on recopie tous les elements de A, puis tous les elements de B.
Cela demande L + L0 copies (et la creation de L + L0 cases) :
Concatenation
Liste :
Comme on peut facilement ajouter un element en tete de liste, on
peut aussi ajouter une suite d’elements. Il suffit donc d’ajouter tous
les elements de A en tete de la liste B. Cela revient a faire une
copie de A devant B. Cela revient a ajouter L (la taille de A)
elements en tete de B.
Filtrage
Etant donne une collection (liste ou tableau) contenant des
elements, et une fonction de choix sur ces elements, le filtrage
consiste a recuperer seulement les elements pour lesquels la
fonction de choix renvoie vrai(est verifiee).
Tableau : O(N)
Liste : O(N)
Liste chainee en C
Ajout en tete
Ajout en Fin
Ajout en Fin
Exercice
En utilisant les trois fonctions que nous avons vues jusqu’a present :
ajouterEnTete
ajouterEnFin
afficherListe
Ecrire le main permettant de remplir et afficher la liste chainee
ci-dessous. Vous ne devrez utiliser qu’une seule bouclefor.
... ...
Chapitre 3 Algorithmique Avancée et Compléxité
Introduction
Generalites
Tableaux
Structures de donnees elementaires
Pointeurs
Structures
Liste chainee