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 ... argn
Pile
.
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
.