premier =nouvElt;
return premier;
}
Les listes chaînées
Suppression du premier maillon d’une liste
doublement chaînée
Écrire la procédure SuppTete qui permet de supprimer le premier
maillon d’une liste doublement chaînée donnée par l’adresse de
son premier élément (premier).
Après la suppression, la valeur du premier maillon doit changer,
donc le passage doit se faire par adresse.
Les listes chaînées
Principe
// Si la liste est non vide : on sauvegarde premier dans une variable P1
Si(premier ≠ Nil) alors
P1 ← premier
// La valeur de premier prend la valeur de son suivant.
premier ← premier^.suivant
// La valeur du précédent prend la valeur nil
premier^.précédent ← Nil
// On libère la zone mémoire d’adresse P1.
libérer(P1)
Finsi
Finsi
Les listes chaînées
Algorithme
PROCEDURE SuppTete (var p : ^listedc)
var
P1: ^listedc
Début
P1 ← p ;
si (p<>nil) alors
p ← p^.suivant
p^.prec ← nil
libérer(P1)
fin si
fin
Les listes chaînées
En C
listedc* SuppTete (listedc *premier ){
listedc * p1;
p1 ← premier ;
if (premier!=NULL){
premier = premier->suivant ;
premier->precedent = NULL ;
free(p1) ;
}
}
Les listes chaînées
Les listes circulaires
Une liste où le pointeur nil du dernier élément est remplacé par
l’adresse du premier élément est appelée liste circulaire.
Dans une liste circulaire tous les maillons sont accessibles à partir de
n’importe quel autre maillon.
Une liste circulaire n’a pas de premier et de dernier maillon. Par
convention, on peut prendre le pointeur externe de la liste vers le
dernier élément et le suivant serait le premier élément de la liste.
Les listes chaînées
Exercice : liste doublement chaînées
Nous définissons:
struct monome_elem{
int degre ;
double coef ;
};
typedef struct monome_elem ∗monome ;
La structure struct monome_elem sera utilisée pour représenter un terme
d'un polynôme. Un polynôme sera codé avec une liste doublement chaînée.
Le type polynome est le suivant :
struct elem {
struct elem ∗ suivant ;
struct elem ∗ precedent ;
monome pval ;
};
typedef struct elem ∗ polynome ;
Les listes chaînées
Exercice : liste doublement chaînées
Pour simplifier, on supposera que les opérandes numériques sont donnés sur un seul
chiffre de 0 à 9.
Les piles
Exercice : Utilisation d'une pile, pour le calcul des expressions écrites
en « postfixé »
Pour ce faire :
– créer une fonction qui teste si un caractère c donné en paramètre est
une opération arithmétique('+','-','*','/').
– créer une fonction qui calcule le résultat de l'opération a op b
(avec op = '+','-','*' ou '/'), les deux opérandes et l’opération sont donnés
en paramètre.
– créer une fonction qui évalue une expression en postfixé donnée en
paramètre sous forme de chaîne caractère.
– tester la fonction d’évaluation dans le programme principal.