Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.EmptyStackException;
- public class ListeBilatere<T> implements Liste<T>
- {
- private static class Maillon<T>
- {
- private T val; // valeur du maillon
- private Maillon<T> suivant; // reference au maillon suivant
- private Maillon<T> precedent; // reference au maillon précédent
- public Maillon() // utilise pour créer la sentinelle
- {
- val = null;
- suivant = this;
- precedent = this;
- }
- public Maillon(T x, Maillon<T> pred, Maillon<T> succ)
- {
- this.val = x;
- this.suivant = succ;
- this.precedent = pred;
- pred.suivant = this;
- suivant.precedent = this;
- }
- public String toString()
- {
- return this.val.toString() ;
- }
- } // classe Maillon
- private class Curseur
- {
- private int pos; // position courante dans la liste
- private Maillon<T> maillon; // maillon courant pointe
- private Curseur()
- {
- this.initCurseur() ;
- }
- private int position()
- {
- return 0;
- }
- private void initCurseur()
- {
- this.pos = -1;
- this.maillon = ListeBilatere.this.sentinelle;
- }
- private boolean estAvantPremier()
- {
- return (this.pos<0);
- }
- private boolean estApresDernier()
- {
- return (this.pos>nbVal);
- }
- private void avancer()
- {
- if(this.estApresDernier())
- {
- throw new IndexOutOfBoundsException();
- }
- else
- {
- this.pos++;
- this.maillon = maillon.suivant;
- }
- }
- private void positionner(int pos)
- {
- int p = this.pos;
- if(p > pos)
- {
- while(p>pos)
- {
- this.reculer();
- }
- }
- else
- {
- while(p<pos)
- {
- this.avancer();
- }
- }
- }
- private void reculer()
- {
- if(this.estAvantPremier())
- {
- throw new IndexOutOfBoundsException();
- }
- else
- {
- this.pos--;
- this.maillon = maillon.precedent;
- }
- }
- } // class Curseur
- private int nbVal; // nombre actuel d'éléments dans la liste
- private Maillon<T> sentinelle; // maillon
- private Curseur curs; // curseur specifique à ListeBilatere
- public ListeBilatere()
- {
- sentinelle = new Maillon();
- nbVal = 0;
- curs = new Curseur();
- }
- public void inserer(int pos, T val)
- {
- if(pos<0 || pos>nbVal)
- {
- throw new IndexOutOfBoundsException();
- }
- else
- {
- curs.positionner(pos);
- Maillon<T> m = new Maillon<T>(val, curs.maillon.precedent, curs.maillon);
- nbVal ++;
- }
- }
- public void enlever(int pos)
- {
- if(pos<0 || pos >nbVal)
- {
- throw new IndexOutOfBoundsException();
- }
- else
- {
- curs.positionner(pos);
- curs.maillon.precedent.suivant = curs.maillon.suivant;
- curs.maillon.suivant.precedent = curs.maillon.precedent;
- nbVal --;
- }
- }
- /*private void insererAvantCurseur(T x) //ajoute avant le curseur
- {
- }
- private void enlever() // enleverSuivant
- {
- }*/
- public boolean estVide()
- {
- return longueur() == 0;
- }
- public boolean estPleine()
- {
- return false;
- // sinon il faudrait gerer le fait que la memoire
- // puisse etre saturee
- }
- public int longueur()
- {
- return this.nbVal;
- }
- public T elem(int pos)
- {
- curs.positionner(pos);
- return curs.maillon.val;
- }
- public void remplacer(int pos, T x)
- {
- curs.positionner(pos);
- curs.maillon.val =x;
- }
- public String toString()
- {
- String res ="< ";
- int i=0;
- while(curs.position()<nbVal -1)
- {
- curs.positionner(i);
- res= res + curs.maillon.toString() +", ";
- }
- curs.positionner(i);
- res= res + curs.maillon.toString() +" >";
- return res;
- }
- }//fin classe ListeBilatere
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement