Académique Documents
Professionnel Documents
Culture Documents
3.1 Introduction
Tableau:
C’est la première structure qui peut satisfaire ce problème. Il suffit dans ce cas de déclarer
un tableau avec une taille fixe (obligés..).
Exemple:
int t[1000];
•Avantage: simple à utiliser
•Limite : -Allocation statique donc soit gaspillage de l’E.M ou sous-dimensionnement
- Le tableau ne peut pas dépasser la taille d’un segment memo
Noter que nous avons besoin de l’adresse du premier élement pour que l’on puisse faire le
parcours des différentes éléments.
first _e
&first _l
d first
p->d p->next
nouveau first
first
p
p
p
for(p=first;p;)
{
t=p->next;
free(p);
p=t;
}
3.3.2 Chercher un élément dans une liste:
Il s’agit d’écrire une fonction qui retourne l’adresse de l’élément d’une liste qui vérifi
un critère.
On va supposer que dans la partie DATA il y a un champs qui s’appelle key, et on va
chercher dans la liste cet élément .
struct data
LISTE * seek_element(LISTE *first, int key) {
{ int key;
LISTE *p; …};typedef strcut data DATA;
for(p=first; p ; p=p->next) //for(p=first; p!=NULL ; p=p->next)
{
if(p->d.key==key)
return(p);
}
d next NULL
return(NULL);
} 5
3.3.3 pointer sur le précédent d’un élément p
preced
for(p=first;p;p=p->next)
print_data(p->d);
}
First->next
first (nouveau)
P
preced P->next
void delete(LISTE **first,int key)
{
LISTE *p;
if( (p=seek_element(*first,key))
{
if(p==*first)
*first=*first->next;
else
{
preced=seek_preced(*first,p);
preced->next=p->next;
}
free(p);
}
}
3.3.7 Récupérer le dernier élement d’une liste
p p
last=seek_last(*first);
if(last)
{
preced=get_prec(*first,last);
if(last==*first)
*first=NULL;
else
preced->next=NULL;
free(last);
}
}
3.3.9 Insertion en fin de liste
p=(LISTE*)malloc(sizeof(LISTE));
p->d=d;
p->next=NULL;
last=get_last(*first);
if(!*first)
*first=p;
else
last->next=p;
}
3.3.10 Afficher une liste à l’envers
for(p=get_last(first); p ; p=seek_preced(first,p) )
print_data(p->d);
}
3.4 Les fonctions récursives
3.4.1 Définition
Une fonction récursive est une fonction qui fait appel à elle-même.
Forme d’une fonction récursive:
void f(int p)
{
….
f(p-1);
}
La récursion doit être conditionnée par une condition dite condittion de récursivité
void f(int p)
{
….
if(p)
f(p-1);
}
3.4.2 Exemple
Exemple n=3
fact( int n) //n=3
{
return(fact(n-1)*n); fact( int n) //n=2
{ fact( int n) //n=1
} return(fact(n-1)*n); {
Pile return(fact(n-1)*
3 2 } n)*n);
fact( int n) n=0
Sauvegarde du contexte } {
return(1);
}
3.5 Fonction récursives et listes chainées.
3.5.1 Afficher le contenu d’une liste
first first->next
[ ]
Afficher la liste first c’est : afficher l’élément first et afficher ensuite la liste first-> next