x.contenu<x.suivant.contenu pour tout
élément x de la liste.
Définir des méthodes
static Liste insere(int a,Liste li)
static Liste trieListe(Liste li)
insere(a,li) retourne une
liste triée obtenue à partir d'une liste triée
li par insersion d'un nouvel élément de contenu
a.
La méthode trieListe(li) utilise insere pour
fabriquer une liste triée qui contient les mêmes valeurs que la
liste non triée li.
(On ne fait par de tri "en place" ici.)
Le tri s'effectue par insersion avec pour complexité
O(n2) où n est la longueur de la liste.
DBListe suivante.
class DBListe {
int contenu;
DBListe suivant,precedent;
boolean garde;
public DBListe() {
garde=true;
suivant=this;
precedent=this;
}
public DBListe(int val,DBListe li1,DBListe li2) {
garde=false;
contenu=val;
suivant=li1;
precedent=li2;
li1.precedent=this;
li2.suivant=this;
}
}
Avec une telle structure, jamais la valeur null ne
doit être rencontrée.
Une liste gardée est composée d'une garde et de cellules.
Les gardes et les cellules sont des objets qui implémentent la classe
DBListe.
On les distingue par la valeur booléenne li.garde
(si li est le pointeur vers l'objet correspondant).
On dit qu'une structure est consistente si pour toute cellule, ainsi que pour
la garde, on a la propriété
( li.precedent.suivant==li ) && ( li.suivant.precedent==li ).
new DBListe() pour créer une
nouvelle liste gardée (vide), et
new DBListe(val,prec,suiv) pour créer une nouvelle cellule
en indiquant la précédente et la suivante.
(Ce constructeur met à jour les pointeurs des cellules voisines pour
maintenir consistente la structure.)
On utilise les méthodes suivantes
static boolean estVide(DBListe li)
static boolean estConsistente(DBListe li)
static void afficheDBListe(DBListe li)
static DBListe stringTabVersDBListe(String[] str)
String en une liste.
tp05_ex2tmplt.java.
(Pour télécharger le fichier,
cliquer ici.)
On cherche à ordonner une liste d'entiers "en place",
c'est-à-dire sans modifier une quelconque valeur
li.contenu.
Définir des méthodes suivantes.
static void supprimeInsereIci(DBListe x,DBListe li)
x et li sont des cellules de deux
listes différentes, cette méthode supprime x de
sa propre liste et l'insère dans l'autre juste avant l'emplacement
de li.
static DBListe milieu(DBListe li)
li.
static DBListe coupeIci(DBListe ici,DBListe li)
ici est une cellule de la liste li, cette
méthode supprime tout ce qui se trouve à partir de cette
cellule et en fait une nouvelle liste gardée séparée.
static void colle(DBListe li1,DBListe li2)
li2
à la fin de la liste li1.
static void fusionne(DBListe li1,DBListe li2)
li1 et li2 sont deux listes ordonnées,
cette méthode les fusionne (dans li1) en respectant
l'ordre.
static void triFusion(DBListe li)
li
par l'algorithme de tri par fusion en O(n.log n).
Liste de
l'exercice 1 du TP4
(voir son corrigé).
Pour cela, un ensemble est représenté par une liste
ordonnée (voir l'exercice 1).
Définir les méthodes suivantes.
static Liste intersection(Liste a,Liste b)
static Liste reunion(Liste a,Liste b)
static Liste complementaire(Liste a,Liste e)
static boolean estEgal(Liste a,Liste b)
Afin de saisir les données pour tester le programme, on pourra
décider que l'entier 0 sert de délimiteur entre
deux listes saisies et définir une méthode
static Liste[] separe(Liste a)qui retourne un tableau de deux listes obtenues par découpage de la liste a.
Pile suivante.
class Pile {
int contenu;
Pile suivant;
public Pile(int val,Pile st) {
contenu=val;
suivant=st;
}
}
Dans cet exercice, on cherche à simuler l'emploi d'une calculatrice
à notation polonaise inversée.
Pour cela, on commence à empiler les arguments numériques, et
l'on invoque les opérations ensuite.
On cherche donc à définir une application qui traite une
série d'arguments itérativement.
La commande
java tp05_ex4 arg1 arg2 ... argnPile.
Dans le cas contraire, l'argument doit être l'une des chaîne
suivante.
"ADD"
Dans ce cas, on dépile deux nombres et l'on empile leur somme.
"SUB"
Idem en faisant la soustraction.
"MUL"
Idem en faisant la multiplication.
"DIV"
Idem en faisant la division.
"DSP"
Dans ce cas, on affiche le contenu de la pile.
tp05_ex4tmplt.java.
(Pour télécharger le fichier,
cliquer ici.)
Pile.
Cette classe admet trois variables d'instance:
type qui indique si l'on a un entier ou un identificateur
de fonction dans cette cellule de la pile.
contenu qui est, soit l'entier, soit l'identificateur de
fonction.
suivant qui indique la cellule suivante.
ADD, SUB, MUL et DIV.
Définir une application qui empile une série d'arguments (des entiers ou des fonctions) qui représentent une expression en notation préfixe, et qui affiche l'expression algébrique correspondante, puis l'évalue. Par exemple
java tp05_ex5 ADD 5 MUL SUB 4 1 3(5 + ((4 - 1) * 3)) = 14.