Contraintes
Nous allons définr une classe (récursive) Liste
de la façon suivante:
class Liste {
public int tete;
public Liste queue;
static final Liste VIDE = null;
public Liste(int tete, Liste queue) {
this.tete = tete;
this.queue = queue;
}
public Liste cons(int tete, Liste queue) {
return new Liste(tete, queue);
}
public String toString() {// suppose la liste non vide !
if (queue == null) {
return tete + "::[]";
} else {
return tete + "::" + queue.toString();
}
}
}
Les seules choses que nous aurons le droit de faire sont :
// Créer une liste vide
= Liste.VIDE;
Liste l
// Construire une liste à partir
// d'une tête (un élément)
// et d'une queue (une liste)
int tete = 17;
= Liste.VIDE;
Liste queue = cons(tete, queue);
Liste nouvelle = cons(16, nouvelle);
Liste l
// Accéder au premier élément (tête)
System.out.println(l.tete)
// Accéder à la queue de la liste (liste privée de son premier élément)
System.out.println(l.queue)
// Tester si la liste est vide
if (l == null) {
System.out.println("Liste vide")
} else {
System.out.println("Liste pas vide")
}
Exercices
Dans une autre classe (Main
), écrire et tester les fonctions suivantes :
taille ou longueur d’une liste
static int longueur(Liste l): if (l == null) { return 0; } else { return 1 + longueur(l.queue); }
estDans
teste si un élément donné appartient à la liste.concatene
met deux listes bout à bout.renverse
renvoie la liste à l’envers.Calculer la complexité des fonctions
concatene
etrenverse
.maximum
renvoie le plus grand élément d’une liste d’entiers.minimum
renvoie le plus grand élément d’une liste d’entiers.repeat(n, m)
renvoie la liste composée den
fois l’élémentm
.>>> repeat(5, "ah") ["ah", "ah", "ah", "ah", "ah"]
cycle(n, l)
renvoie la liste composée den
fois la listel
.>>> cycle(4, ["a","b"]) ["a", "b", "a", "b", "a", "b", "a", "b"]
pairs(n)
renvoie la liste des n premiers nombres pairs.>>> lp = pairs(10) >>> lp [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
take(n, l)
renvoie la liste desn
premiers éléments del
.>>> take(4, lp) [2, 4, 6, 8]
drop(n, l)
renvoie la liste des éléments del
privée desn
premiers.>>> drop(5, lp) [12, 14, 16, 18, 20]
last
renvoie le dernier élément d’une liste.>>> last(lp) 20
init
renvoie la liste privée de son dernier élément.>>> init(lp) [2, 4, 6, 8, 10, 12, 14, 16, 18]