Una lista es un conjunto de elementos con un orden concreto:
- Puede tener una longitud arbitraria.
- Ofrece la posibilidad de insertar o eliminar un elemento en cualquier ubicación.
- Ofrece la posibilidad de recorrer la lista de forma ordenada, de elemento en elemento.
Una lista enlazada simple es una estructura de datos en la que cada elemento apunta al siguiente. De este modo, teniendo la referencia del principio de la lista podemos acceder a todos los elementos de la misma.
La lista enlazada se compone de nodos (objetos instanciados pertenecientes a la clase Node), cada uno de los cuales tiene dos únicas tareas: guardar la información de la posición i y ofrecer una referencia a la posición i+1.
- Cada elemento que que se va a poner en la lista está contenido en una instancia de un nuevo tipo de objeto, llamado enlace, que equivale a un vagón del tren.
- En una lista enlazada sencilla, el enlace no sólo contiene el elemento de la lista, sino que también apunta al siguiente elemento de la lista, al igual que un vagón de mercancías está acoplado al siguiente.
- El último enlace de la lista no apunta a nada.
A continuación el código de la lista enlazada
public class Nodo { //Datos que guardara el Nodo private Object valor; //Referencia al nodo siguiente private Nodo siguiente; //Constructor. Recibe el dato a guardar y el nodo siguiente public Nodo(Object val,Nodo sig){ this.valor = val; this.siguiente = sig; } //Getters y Setters para tomar y cambiar valores. public Object 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 ListaLigada { //Creamos dos Nodos, que seran el primero y el ultimo nodo de nuestra lista private Nodo primero,ultimo; //Variable que llevara el tamaño de la lista private int tamaño; //Constructor. Inicializacion de las variables public ListaLigada(){ ultimo = primero = null; tamaño = 0; } //Funcion que inserta un dato al principio de la lista, recibe como parametro el dato a insertar public void insertarPrimero(Object valor){ if(tamaño == 0){ primero = new Nodo(valor,null); ultimo = primero; tamaño++; } else{ Nodo temporal = primero; primero = new Nodo(valor,temporal); tamaño++; } } //Funcion que inserta un dato al final de la lista, recibe como parametro el dato a insertar public void insertarUltimo(Object valor){ if(tamaño == 0){ primero = new Nodo(valor,null); ultimo = primero; tamaño++; } else{ Nodo temporal = ultimo; ultimo = new Nodo(valor, null); temporal.setSiguiente(ultimo); tamaño++; } } //Funcion que elimina el primer nodo de la lista public void eliminarPrimero(){ if(tamaño == 0)return; Nodo temporal = primero; temporal = primero.getSiguiente(); primero = null; primero = temporal; tamaño--; } //Funcion que elimmina el ultimo nodo de la lista public void eliminarUltimo(){ if(tamaño == 0)return; if(tamaño == 1){ ultimo = primero = null; tamaño = 0; return; } Nodo temporal = primero; while(temporal.getSiguiente() != ultimo){ temporal = temporal.getSiguiente(); } temporal.setSiguiente(null); ultimo = temporal; tamaño--; } //Funcion que regresa el tamaño de la lista... es decir el numero de elementos que contiene public int getTamaño(){ return tamaño; } //Funcion que devuelve un array con los elementos de la lista public Object[] getElementos(){ if(tamaño == 0)return new Object[0]; Object[] elementos = new Object[tamaño]; int i = 0; Nodo temporal = primero; while(temporal != null){ System.out.print(temporal.getValor().toString()+" "); elementos[i++] = temporal.getValor(); temporal = temporal.getSiguiente(); } System.out.println(""); return elementos; } public static void main(String[] args) { ListaLigada lista = new ListaLigada(); lista.insertarPrimero(1); } }
No hay comentarios:
Publicar un comentario