Vous êtes sur la page 1sur 5

// Fig. 19.4: ExcepcionListaVacia.java // Definicin de la clase ExcepcionListaVacia //package com.

saforas; public class ExcepcionListaVacia extends RuntimeException { // inicializa an ExcepcionListaVacia public ExcepcionListaVacia( String nombre ) { super( "La lista " + nombre + " esta vaca" ); } } // fin de la clase ExcepcionListaVacia

//package com.saforas; // Clase para representar un nodo en una lista class NodoLista { // miembros de acceso de paquete; // Lista puede accesar a este directamente Object dato; NodoLista proximoNodo; // Constructor para crear a NodoLista // que se refiere al objeto NodoLista( Object objeto ) { this( objeto, null ); } // Constructor para crear a NodoLista // que se refiere al objeto // y al proximo NodoLista en Lista NodoLista( Object objeto, NodoLista nodo ) { dato = objeto; proximoNodo = nodo; } // devuelve el Objeto en este nodo Object obtenerObjeto() { return dato; } // devuelve el proximo nodo

NodoLista obtenerProximo() { return proximoNodo; } } // fin de clase NodoLista

//clase Lista //package com.saforas; public class ListaCircularSE { private NodoLista primerNodo; private String nombre; // nombre es una cadena tal como "lista" usada en impresion // construye una Lista vaca con un nombre public ListaCircularSE( String cadena ) { nombre = cadena; primerNodo = null; } // construye una Lista vaca con el nombre "lista" public ListaCircularSE() { this( "lista circular simplemente enlazada" ); } // Inserta un Object delante de la Lista. Si la Lista esta vaca, // primerNodo y ultimoNodo se refieren al mismo objeto. // De otra manera, primerNodo se refiere al nuevo nodo. public synchronized void insertar( Object elementoAInsertar ) { if ( estaVacio() ) { primerNodo = new NodoLista( elementoAInsertar); primerNodo.proximoNodo=primerNodo; } else { NodoLista ultimoNodo; NodoLista actual = primerNodo; while(actual.proximoNodo != primerNodo) { actual = actual.proximoNodo; } ultimoNodo = actual; NodoLista desplazado = primerNodo; primerNodo = new NodoLista( elementoAInsertar, desplazado );

ultimoNodo.proximoNodo = primerNodo; } } // remueve el primer nodo de la Lista public synchronized Object remover() throws ExcepcionListaVacia { Object elementoARemover = null; // lanza una excepcin si la Lista esta vaca if ( estaVacio() ) throw new ExcepcionListaVacia( nombre ); // recupera el dato a ser removido elementoARemover = primerNodo.dato; // reinicializa las referencias al primerNodo and ultimoNodo if ( primerNodo == primerNodo.proximoNodo ) primerNodo = null; else { NodoLista ultimoNodo; NodoLista actual = primerNodo; while(actual.proximoNodo != primerNodo) { actual = actual.proximoNodo; } ultimoNodo = actual; primerNodo = primerNodo.proximoNodo; ultimoNodo.proximoNodo=primerNodo; } // devuelve el dato del nodo removido return elementoARemover; } // retorna true si la Lista esta vaca public synchronized boolean estaVacio() { return primerNodo == null; } // salida de los contenidos de Lista public synchronized void imprimir() { if ( estaVacio() ) { System.out.println( "Vacio " + nombre ); return; } System.out.print( "La lista " + nombre + " es: " ); NodoLista actual = primerNodo; // mientras no es el final de la lista, se muestra // el dato del nodo actual

do { System.out.print( actual.dato.toString() + " " ); actual = actual.proximoNodo; } while ( actual != primerNodo ); System.out.println( "\n" ); } } // fin de la clase Lista

//import com.saforas.ListaCircularSE; //import com.saforas.ExcepcionListaVacia; public class PruebaListaCircularSE { public static void main( String args[] ) { ListaCircularSE lista = new ListaCircularSE(); Boolean booleano = Boolean.TRUE; Character caracter = new Character( '$' ); Integer entero = new Integer( 34567 ); String cadena = "hola"; lista.insertar( booleano ); lista.imprimir(); lista.insertar( caracter ); lista.imprimir(); lista.insertar( entero ); lista.imprimir(); lista.insertar( cadena ); lista.imprimir(); Object objetoRemovido; try { objetoRemovido = lista.remover(); System.out.println( objetoRemovido.toString() + " removido" ); lista.imprimir(); objetoRemovido = lista.remover(); System.out.println( objetoRemovido.toString() + " removido" ); lista.imprimir(); objetoRemovido = lista.remover(); System.out.println( objetoRemovido.toString() + " removido" ); lista.imprimir(); objetoRemovido = lista.remover(); System.out.println( objetoRemovido.toString() + " removido" ); lista.imprimir(); } catch ( ExcepcionListaVacia excepcionListaVacia ) { excepcionListaVacia.printStackTrace(); }

} }

Vous aimerez peut-être aussi