domingo, 5 de febrero de 2017

LISTAS CIRCULARES


Las listas circulares son estructuras de datos en la que el último nodo apunta al primero lo cual la convierte en una lista sin fin, cada nodo siempre tiene uno anterior y uno siguiente, su estructura es muy similar a las listas simples por lo cual comparten características tanto en su implementación como en su manejo aunque requiere un mayor entendimiento del manejo de los punteros.



  • No existe ningún nodo que apunte a null. 
  • La lista no tiene fin ya que al llegar al último nodo empieza de nuevo la lista.
  •  Se accede a la lista mediante el primer nodo o también llamado inicio de la lista. 
  • Si no se tiene cuidado al manejar la lista circular se pueden crear bucles infinitos.
  •  No tiene acceso aleatorio es decir para acceder a un valor se debe recorrer toda la lista. 

Características Operaciones básicas:

  •  agregar (valor): agrega el valor al final de la lista. 
  • insertar (referencia, valor): inserta el valor después del valor de referencia en la lista.
  • remover(referencia): elimina el nodo con el valor que coincida con la referencia.
  • editarreferencia): actualiza el valor de nodo con el valor que coincida con la referencia. 
  • esVacia (): retorna true si la lista está vacía, false en caso contrario.
  •  buscar (valor): retorna la true si el elemento existe en la lista, false caso contrario.
  • eliminar(): elimina la lista.
  •  listar (): imprime en pantalla los elementos de la lista. A continuación el código de lista circular

public class Nodo {
  
    private int valor;
   
    private Nodo siguiente;
   
    
  
    public void Nodo(){
        this.valor = 0;
        this.siguiente = null;
    }
    

    
    public int getValor() {
        return valor;
    }

    public void setValor(int valor) {
        this.valor = valor;
    }

    public Nodo getSiguiente() {
        return siguiente;
    }

    public void setSiguiente(Nodo siguiente) {
        this.siguiente = siguiente;
    }   
}


public class ListaCircular {

    private Nodo inicio;
    private Nodo ultimo;
    private int tamanio;

    public void Lista() {
        inicio = null;
        ultimo = null;
        tamanio = 0;
    }

    public boolean esVacia() {
        return inicio == null;
    }

    public int getTamanio() {
        return tamanio;
    }

    public void agregarAlFinal(int valor) {

        Nodo nuevo = new Nodo();

        nuevo.setValor(valor);

        if (esVacia()) {

            inicio = nuevo;

            ultimo = nuevo;

            ultimo.setSiguiente(inicio);

        } else {
            ultimo.setSiguiente(nuevo);

            nuevo.setSiguiente(inicio);

            ultimo = nuevo;
        }

        tamanio++;
    }

    public void agregarAlInicio(int valor) {

        Nodo nuevo = new Nodo();

        nuevo.setValor(valor);

        if (esVacia()) {

            inicio = nuevo;

            ultimo = nuevo;

            ultimo.setSiguiente(inicio);

        } else {

            nuevo.setSiguiente(inicio);

            inicio = nuevo;

            ultimo.setSiguiente(inicio);
        }

        tamanio++;
    
}

No hay comentarios:

Publicar un comentario