LISTAS SIMPLES
Las listas son estructuras de datos que permiten tener cierta flexibilidad en su manejo, pueden crecer o acortarse según se lo requiera, existen varias formas de implementar una lista en Java en este caso se presenta un ejemplo en código utilizando punteros mediante la referencia a objetos.
Las listas básicamente se forman del enlace de nodos los cuales funcionan como contenedores para almacenar el valor y enlace al siguiente nodo.
ESTRUCTURA DE UN NODO
Valor: valor del dato a guardar.
Enlace: apunta a la dirección en memoria del siguiente nodo.
Enlace: apunta a la dirección en memoria del siguiente nodo.
LISTA SIMPLEMENTE ENLAZADA:
Características:
1) El último nodo de la lista no apunta a ningún a ninguno (null).
2) Se accede a la lista mediante el primer nodo o también llamado inicio de la lista.
3) No tiene acceso aleatorio es decir para acceder a un valor se debe recorrer toda la lista.
Ejemplo :
CLASE NODO
package Trabajo;
/**
*
* @author Jhon
*/
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;
}
}
CLASE LISTA
package Trabajo;
/**
*
* @author Jhon
*/
public class Lista {
private nodo inicio;
private int tamanio;
public void Lista(){
inicio = 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;
} else{
nodo aux = inicio;
while(aux.getSiguiente() != null){
aux = aux.getSiguiente();
}
aux.setSiguiente(nuevo);
}
tamanio++;
}
public void agregarAlInicio(int valor){
nodo nuevo = new nodo();
nuevo.setValor(valor);
if (esVacia()) {
inicio = nuevo;
} else{
nuevo.setSiguiente(inicio);
inicio = nuevo;
}
tamanio++;
}
public void insertarPorReferencia(int referencia, int valor){
nodo nuevo = new nodo();
nuevo.setValor(valor);
if (!esVacia()) {
if (buscar(referencia)) {
nodo aux = inicio;
while (aux.getValor() != referencia) {
aux = aux.getSiguiente();
}
nodo siguiente = aux.getSiguiente();
aux.setSiguiente(nuevo);
nuevo.setSiguiente(siguiente);
tamanio++;
}
}
}
public void insrtarPorPosicion(int posicion, int valor){
if(posicion>=0 && posicion<=tamanio){
nodo nuevo = new nodo();
nuevo.setValor(valor);
if(posicion == 0){
nuevo.setSiguiente(inicio);
inicio = nuevo;
}
else{
if(posicion == tamanio){
nodo aux = inicio;
while(aux.getSiguiente() != null){
aux = aux.getSiguiente();
}
aux.setSiguiente(nuevo);
}
else{
nodo aux = inicio;
for (int i = 0; i < (posicion-1); i++) {
aux = aux.getSiguiente();
}
nodo siguiente = aux.getSiguiente();
aux.setSiguiente(nuevo);
nuevo.setSiguiente(siguiente);
} }
tamanio++;
}
}
public int getValor(int posicion) throws Exception{
if(posicion>=0 && posicion<tamanio){
if (posicion == 0) {
return inicio.getValor();
}else{
nodo aux = inicio;
for (int i = 0; i < posicion; i++) {
aux = aux.getSiguiente();
}
return aux.getValor();
}
} else {
throw new Exception("Posicion inexistente en la lista.");
}
}
public boolean buscar(int referencia){
nodo aux = inicio;
boolean encontrado = false;
while(aux != null && encontrado != true){
if (referencia == aux.getValor()){
encontrado = true;
}
else{
aux = aux.getSiguiente();
}
}
return encontrado;
}
public int getPosicion(int referencia) throws Exception{
if (buscar(referencia)) {
nodo aux = inicio;
int cont = 0;
while(referencia != aux.getValor()){
cont ++;
aux = aux.getSiguiente();
}
return cont;
} else {
throw new Exception("Valor inexistente en la lista.");
}
}
public void editarPorReferencia(int referencia, int valor){
if (buscar(referencia)) {
nodo aux = inicio;
while(aux.getValor() != referencia){
aux = aux.getSiguiente();
}
aux.setValor(valor);
}
}
public void editarPorPosicion(int posicion , int valor){
if(posicion>=0 && posicion<tamanio){
if(posicion == 0){
inicio.setValor(valor);
}
else{
nodo aux = inicio;
for (int i = 0; i < posicion; i++) {
aux = aux.getSiguiente();
}
aux.setValor(valor);
}
}
}
public void removerPorReferencia(int referencia){
if (buscar(referencia)) {
if (inicio.getValor() == referencia) {
inicio = inicio.getSiguiente();
} else{
nodo aux = inicio;
while(aux.getSiguiente().getValor() != referencia){
aux = aux.getSiguiente();
}
nodo siguiente = aux.getSiguiente().getSiguiente();
aux.setSiguiente(siguiente);
}
tamanio--;
}
}
public void removerPorPosicion(int posicion){
if(posicion>=0 && posicion<tamanio){
if(posicion == 0){
inicio = inicio.getSiguiente();
}
else{
nodo aux = inicio;
for (int i = 0; i < posicion-1; i++) {
aux = aux.getSiguiente();
}
nodo siguiente = aux.getSiguiente();
aux.setSiguiente(siguiente.getSiguiente());
}
tamanio--;
}
}
public void listar(){
if (!esVacia()) {
nodo aux = inicio;
int i = 0;
while(aux != null){
System.out.print(i + ".[ " + aux.getValor() + " ]" + " -> ");
aux = aux.getSiguiente();
i++;
}
}
}
}
CLASE MAIN
package Trabajo;
/**
*
* @author Jhon
*/
public class Main {
public static void main(String[] args) throws Exception {
Lista lista = new Lista();
System.out.println("<<-- Ejemplo de lista simple -->>\n");
// Agregar al final de la lista
lista.agregarAlFinal(12);
lista.agregarAlFinal(15);
lista.agregarAlFinal(9);
// Agregar in inicio de la lista
lista.agregarAlInicio(41);
lista.agregarAlInicio(6);
System.out.println("<<-- Lista -->>");
lista.listar();
System.out.println("\n\n<<-- Tamaño -->");
System.out.println(lista.getTamanio());
System.out.println("\n<<-- Obtener el valor del nodo en la posicion 3 -->>");
System.out.println(lista.getValor(3));
System.out.println("\nInsrta un nodo con valor 16 despues del 15");
lista.insertarPorReferencia(15, 16);
lista.listar();
System.out.print(" | Tamaño: ");
System.out.println(lista.getTamanio());
System.out.println("\n\nInsrta un nodo con valor 44 en la posición 3");
lista.insrtarPorPosicion(3, 44);
lista.listar();
System.out.print(" | Tamaño: ");
System.out.println(lista.getTamanio());
System.out.println("\nActualiza el valor 12 del tercer nodo por 13");
lista.editarPorReferencia(12, 13);
lista.listar();
System.out.print(" | Tamaño: ");
System.out.println(lista.getTamanio());
System.out.println("\nActualiza el valor nodo en la posición 0 por 17");
lista.editarPorPosicion(0, 17);
lista.listar();
System.out.print(" | Tamaño: ");
System.out.println(lista.getTamanio());
System.out.println("\nElimina el nodo con el valor 41");
lista.removerPorReferencia(41);
lista.listar();
System.out.print(" | Tamaño: ");
System.out.println(lista.getTamanio());
System.out.println("\nElimina el nodo en la posición 4");
lista.removerPorPosicion(4);
lista.listar();
System.out.print(" | Tamaño: ");
System.out.println(lista.getTamanio());
System.out.println("\nConsulta si existe el valor 30");
System.out.println(lista.buscar(30));
System.out.println("\nConsulta la posicion del valor 9");
System.out.println(lista.getPosicion(9));
// System.out.println("\nElimina la lista");
// lista.eliminar();
System.out.println("\nConsulta si la lista está vacia");
System.out.println(lista.esVacia());
System.out.println("\n\n<<-- Fin de ejemplo lista simple -->>");
}
}
Referencia Concepto : Bryan Acosta estudiante de Ingeniería en Informática de la Universidad Central del Ecuador.

No hay comentarios:
Publicar un comentario