cantonada cantonada

 

Listas circulares doblemente enlazadas

Enunciado

 

Implementar en Java una clase de listas circulares de enteros doblemente encadenadas. En concreto, la práctica contendrá la siguiente clase de nodos:
class nodo
{ int valor;
nodo ant;
nodo sig;
}
y también ha de contener la clase de listas con las operaciones siguientes:
public class L_circular
{ nodo acceso=null;
public void insertar(int N)
{
//código de insertar
}
public void suprimir()
{
//código de suprimir
}
public boolean buscar(int N)
{
//código de buscar
}
}
Más concretamente, la estructura de datos a implementar ha de tener una forma como la siguiente:
acceso


La referencia acceso ha de apuntar a un nodo cualquiera de la lista. La operación insertar, dado un número N, ha de insertar un nodo con el valor N en la posición siguiente a la apuntada por acceso. La operación suprimir ha de eliminar el nodo apuntado por acceso. Finalmente, la
operación buscar nos debe contestar si un elemento N está o no en la lista y, en caso en que esté, nos ha de dejar a acceso apuntando al nodo que contiene a N..

Sol·lució:

Nota: la sol·lució té diversos errors.

class nodo
{
int valor;
nodo ant;
nodo sig;
}

public class L_circular
{
nodo acceso=null;

public void insertar(int N)
/*dado un nmero N, ha de insertar un nodo con el valor
*N en la posicion� siguiente a la apuntada por acceso.*/
{
nodo nuevo = new nodo();
nuevo.valor = N;
if (acceso == null){
nuevo.sig = nuevo;
nuevo.ant = nuevo;
acceso = nuevo;
} else {
nuevo.sig = acceso.sig;
nuevo.ant = acceso;
acceso.sig.ant = nuevo;
acceso.sig = nuevo;
}
}

public void suprimir()
/*eliminar el nodo apuntado por acceso. Acceso apunta al
*siguiente nodo*/
{
if (acceso != null){ //hay como minimo un nodo nodo
if (acceso.sig == acceso){ //solo hay un nodo
acceso = null;
} else {//hay mas de un nodo
acceso.sig.ant= acceso.ant;
acceso.ant.sig = acceso.sig;
acceso = acceso.sig;
}
}
}

public boolean buscar(int N)
/*nos debe contestar si un elemento N est�o no en la lista
*y, en caso en que est� nos ha de dejar a acceso apuntando
*al nodo que contiene a N.*/
{
nodo original = new nodo();
boolean b = false;
if (acceso != null){//si al menos hay un nodo
original = acceso;
if (acceso.valor == N){
b=true;
}else{
acceso=acceso.sig;
}
while (!b && acceso != original){
if (acceso.valor != N){ //encontrado
acceso=acceso.sig;
}else{
b=true;
}
}
}
return b;
}
}

 

Ir a la Pàgina Principal

Imprimir la web / Enviar a:
Google