Académique Documents
Professionnel Documents
Culture Documents
Prof. A. BOUZIDI
File d’attente / patients Files d’attente / pages
1 12 37 53 9
Queue Tête
Défiler F 1 12 37 53 9
• Initialisation:
• tête ← -1
• queue ← -1
• Inconvénient :
• on ne peut plus ajouter un élément dans la file alors qu’elle n’est pas pleine
typedef int Element ;
File file_vide();
File file_enfiler(File f,Element e);
File file_defiler(File f);
Element file_tete(File f);
Booleen est_videF(File f);
File file_vide(){
f.tete=f.queu=NULL;
return f;
}
Prof. A. BOUZIDI
• Généralisation des piles et des files :
• Structure linéaire dans laquelle les éléments peuvent être traités les uns à la suite
des autres
• Ajout ou retrait d’élément n’importe ou dans la liste
• Accès à n’importe quel élément
• Une liste est une suite finie, d’éléments de même type repérés par leur
rang dans la liste.
• Chaque élément de la liste est rangé à une certaine place
• Les éléments de la liste sont ordonnés en fonction de leur place
• La longueur d’une liste est le nombre totale de ses éléments
Type Liste
▪ Utilise Elément, Booléen, Place
Opérations
▪ liste_vide : → Liste
▪ longueur : Liste → Entier
▪ inserer : Liste x Elément → Liste
▪ supprimer : Liste → Liste
▪ kème : Liste x Entier → Elément
▪ accès : Liste x Entier → Place
▪ contenu : Liste x Place → Elément – contenu : Liste x Place → Elément
▪ succ : Liste x Place → Place
Pré conditions
▪ inserer(l,k,e) est_défini_ssi 1 ≤k ≤ longueur(l)+1
▪ supprimer(l,k) est_défini_ssi 1 ≤k ≤ longueur(l)
▪ kème(l,k) est_défini_ssi 1 ≤k ≤ longueur(l)
▪ accès(l,k) est_défini_ssi 1 ≤k ≤ longueur(l)
▪ succ(l,p) est_défini_ssi p≠ accès(l,longueur(l))
• liste_vide : → Liste
• Opération d’initialisation : la liste créée est vide,
• longueur : Liste →Entier
• Retourne le nombre d’éléments dans une liste,
• inserer : Liste x Elément → Liste
• Ajoute un élément à la liste dans une position donnée,
• supprimer : Liste → Liste
• Supprimer un élément dans la liste,
• kème : Liste x Entier → Elément
• Fournit l’élément de rang donné dans une liste, Fournit l’élément de rang donné dans une liste,
• accès : Liste x Entier → Place
• Connaître la place de rang donné,
• contenu : Liste x Place → Elément
• Connaitre l’élément d’une place donnée,
• succ : Liste x Place → Place
• Passer d’une place à la place suivante.
• Concatener: Liste × Liste → Liste
• Accroce une deuxième liste en entré à la fin de la première.
typedef struct {
Element tab[MAX_FILE];
int taille;
} Liste ;
/* fichier "Tliste.h " */
// définition du type liste complémentaire par tableau
#define MAX_LISTE 100 /* taille maximale de la liste */
typedef int Element /* les éléments sont des entiers */
typedef int Place /* place = rang (est un entier) */
typedef struct {
Element tab[MAX_LISTE] ;/*éléments de la liste */
int taille ;
} Liste;
// Déclaration des fonctions gérant la liste
Liste liste_vide()
int longueur(Liste l);
Liste inserer(Liste l,int i, Element e);
Liste supprimer(Liste l, int i);
Element keme (Liste l, int k);
Place acces(Liste l, int i);
Element contenu(Liste l, Place i);
Place succ (Liste l, Place i);
• Représentation contigüe (par tableau)
• Les éléments sont rangés les uns côté des autres dans un tableau
• La kème case du tableau contient le kème élément de la liste.
• Le rang est égale à la place : ce sont des entiers
• Représentation chaînée (par pointeurs)
• Les éléments ne sont pas rangés les uns à côté des autres.
• La place d’un élément est l’adresse d’une structure qui contient l’élément, ainsi que la place de
l’élément suivant.
• Utilisation de pointeurs pour chaîner entre eux les éléments successifs
• En langage C la liste est représentée par un pointeur sur une structure
• La structure contient une élément de la liste et un pointeur sur l’élément suivant.
• La liste vide est représentée par une constante prédéfinie vide (NULL en C/C++)
//type des éléments
typedef int Element;
//type place
typedef struct cellule* Place;
//type cellule
typedef struct {
Element valeur;
Struct cellule *suivant;
} Cellule ;
//type Liste
typedef struct Liste{
Cellule *premier;
};
typedef int Element;
typedef struct Cellule{
Element valeur;
Struct cellule *suivant;
} Cellule ;
typedef struct cellule* Place;
//type Liste
typedef Cellule* Liste;
Liste liste_vide()
int longueur(Liste l);
Liste inserer(Liste l, Element e);
Liste inserer(Liste l,int i, Element e);
Liste supprimer(Liste l, int i);
Element keme (Liste l, int k);
Place acces(Liste l, int i);
Element contenu(Liste l, Place i);
Place succ (Liste l, Place i);
Liste liste_vide() {
return NULL;
}
int longueur(Liste l) {
int taille=0; Liste p=l;
while(p) {
taille++; p = p->suivant;}
return taille;
}
moyenne \n");
10 15,5 8,75
∅
14,5
Null
liste2c liste2c_vide();
int liste2c_est_vide(liste2c l);
liste2c ajouter(liste2c l,Element e);
liste2c vider (liste2c l);
liste2c liste2c_vide() {
return NULL;
}
int liste2c_est_vide(liste2c l) {
if(l==NULL)
return 1;
return 0;
}
liste2c ajouter(liste2c l,Element e) {
liste2c p=(liste2c)malloc(sizeof(cellule2c));
p->valeur=e; p->suivant=NULL;
p->precedant=NULL;
if(l==NULL){
p->precedant=l;
l=p; return l;
}
l->precedant=p;
p->suivant=l;
l=p;
p->precedant=l;
return l;
}
liste2c vider(liste2c l) {
if(l==NULL)
printf("erreur liste vide \n");
liste2c p;
while(l!=NULL) {
p=l;
l=l->suivant;
free(p);
}
return l; }
void afficher(liste2c l) {
if(l==NULL){
printf("erreur liste vide \n");
}
else {
liste2c p=l;
while(p!= NULL) {
printf("%d \n",p->valeur);
p=p->suivant;
}
}
}
void menu(liste2c l) {
int choix, e;
l=NULL;
do{
printf("Choisissez....\n");
printf("1.Ajouter un élément en tête de liste\n");
printf("2.Vider la liste\n");
printf("3.Afficher les éléments de la liste\n");
printf("4.Quitter \n");
printf("Votre choix: ");
scanf("%d", &choix);
switch(choix) {
case 1: printf("Donnez un entier\n");
scanf("%d", &e);
l=ajouter(l,e);
break;
case 2: l=vider(l); break;
case 3: afficher(l); break;
}
}while(choix!=4); };