Adloun

algorithmique (école d'ingénieur) · Chapitre 7 · Application directe du cours

Fonctions de base sur les listes

Graphes sans circuit et ordonnancement de projets · niveau 1 (application)

Énoncé

Avec la classe Liste du cours et ses trois primitives vide, premier, reste, écrire :

  • int somme(Liste l), en récursif puis en itératif ;
  • boolean dans(int x, Liste l), en récursif puis en itératif ;
  • Liste copie(Liste l) ;
  • Liste inverse(Liste l), en temps pour une liste de éléments.

Tester sur la liste .

Corrigé

Chaque fonction récursive suit la définition d'une liste : une liste vide (base), ou un premier élément suivi d'un reste (hérédité).


static int somme(Liste l) {
    if (vide(l)) return 0;                       // somme(()) = 0
    return premier(l) + somme(reste(l));
}
static int sommeIt(Liste l) {
    int s = 0;
    for (Liste c = l; !vide(c); c = reste(c)) s = s + premier(c); // s = somme des éléments vus
    return s;
}
static boolean dans(int x, Liste l) {
    if (vide(l)) return false;                   // () ne contient rien
    return x == premier(l) || dans(x, reste(l));
}
static boolean dansIt(int x, Liste l) {
    for (Liste c = l; !vide(c); c = reste(c)) if (premier(c) == x) return true;
    return false;
}
static Liste copie(Liste l) {
    if (vide(l)) return null;
    return new Liste(premier(l), copie(reste(l)));
}
static Liste inverse(Liste l) {
    Liste r = null;                              // r = miroir de la partie déjà parcourue
    for (Liste c = l; !vide(c); c = reste(c)) r = new Liste(premier(c), r);
    return r;
}

Pour inverse, l'astuce est l'accumulateur : ajouter un élément en tête coûte un temps constant, donc la boucle est en . La version naïve « inverser le reste puis ajouter le premier en fin de liste » parcourt à chaque étape la liste déjà construite : elle est en .


l = (0 2 1 2)
somme = 5 / 5
dans(1) = true, dans(5) = false
inverse = (2 1 2 0), copie = (0 2 1 2)

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →