listas enlazadas trabajo monografico

17
Facultad De Ingeniería En Informática Y Sistemas LISTAS ENLAZADAS CURSO : ESTRUCTURA DE DATOS Y ALGORITMOS DOCENTE : Ing. TRUJILLO NATIVIDAD, PEDRO ALUMNO : CHARRI HUERTA JAIMITO TINGO MARÍA - PERÚ 2013

Upload: jaime-james-charri-huerta

Post on 20-Jan-2016

58 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: LISTAS ENLAZADAS Trabajo Monografico

Facultad De Ingeniería En Informática Y Sistemas

LISTAS ENLAZADAS

CURSO : ESTRUCTURA DE DATOS Y ALGORITMOS

DOCENTE :

Ing. TRUJILLO NATIVIDAD, PEDRO

ALUMNO :

CHARRI HUERTA JAIMITO

TINGO MARÍA - PERÚ

2013

LISTAS ENLAZADAS

Page 2: LISTAS ENLAZADAS Trabajo Monografico

OBJETIVOS

Distinguir entre una estructura secuencial y una estructura enlazada Definir el tipo abstracto de datos Lista Conocer las operaciones básicas de las listas enlazadas Definir una lista doblemente enlazada Definir una lista circular Realizar una lista genérica es la comprensión de las listas doblemente enlazadas.

Las listas doblemente enlazadas pueden ser utilizadas cuando son necesarias varias operaciones de inserción o eliminación de elementos.

Page 3: LISTAS ENLAZADAS Trabajo Monografico

INTRODUCCION

En este capítulo se comienza el estudio de las estructuras de datos dinámicas. Al contrario que las estructuras de datos estáticas (arrays listas, vectores y tablas y estructuras) cuyo tamaño en memoria permanece inalterable durante la ejecución del programa, las estructuras de datos dinámicas crecen y se contraen a medida que se ejecuta el programa.

La estructura de datos que se estudiara en este capitulo es la lista enlazada (ligada o encadenada, linked list): una colección de elementos (denominados nodos) dispuestos uno a continuación de otro, cada uno de ellos conectado al siguiente por un “enlace” o “referencia”. En el capítulo se desarrollaran métodos para insertar, buscar y borrar elementos en listas enlazadas. De igual modo, se muestra el tipo abstracto de datos (TAD) que representa las listas enlazadas.

Las listas enlazadas son estructuras muy flexibles y con numerosas aplicaciones en el mundo de la programación.

Las listas enlazadas son una secuencia de nodos que se encuentran enlazados uno con el siguiente mediante un enlace. Cada elemento (nodo) de una lista enlazada debe tener dos campos: un campo (info) que contiene el valor de ese elemento y un campo (enlace) que indica la posición del siguiente elemento.

Aunque se pueden crear muchos tipos de listas enlazadas, las tres variantes más populares son la lista de enlace simple, la lista doblemente enlazada y la lista enlazada circular.

FUNDAMENTOS TEORICOS DE LISTAS ENLAZADAS

Definición 1

Page 4: LISTAS ENLAZADAS Trabajo Monografico

Las estructuras de datos lineales de elementos homogéneos (listas, tablas, vectores) utilizaban arrays para implementar tales estructuras, siendo los elementos de tipo primitivo (int, long, doublé…); también se ha utilizado la clase vector, aunque los elementos, en este caso, han de ser referencias. Esta técnica obliga a fijar por adelantado el espacio a ocupar en memoria, de modo que, cuando se desea añadir un nuevo elemento que rebase el tamaño prefijado del array, no es posible realizar la operación sin que se produzca un error en tiempo de ejecución. Esta característica se debe a que los arrays hacen un uso ineficiente de la memoria. Gracias a la asignación dinámica de variables, se pueden implementar listas de modo que la memoria física utilizada se corresponda con el número de elementos de la tabla; para ello; se recurre a las referencias (apuntadores) que hacen un uso más eficiente de la memoria, como ya s eha visto con anterioridad.

Una lista enlazada es una colección o secuencia de elementos dispuestos uno de tras de otro , en la que cada elemento se conecta al siguiente elemento por un “enlace” o “referencia”, la idea básica consiste en construir una lista cuyos elementos, llamados nodos, se componen de dos partes (campo): la primera parte contiene la información y es, por consiguiente, un valor de un tipo genérico (denominado Dato, TipoElemento, Info,etc), y la segunda parte es una referencia (denominado enlace o sgte) que apunta (enlaza) al siguiente elemento de la lista.

Referencia referencia

Lista enlazada (representación simple)

Definición 2 Lista Enlazadas

Es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por “enlace” o “referencia”. La idea básica consiste en construir una lista cuyos elementos, llamados nodos, se componen de dos partes o campos: la primera parte o campo contiene la información y es, por consiguiente, un valor de un tipo genérico (denominado Dato, TipoElemento, Infor, etc.), y la segunda parte o campo es una referencia (enlace o sgte) que apunta al siguiente elemento de la lista.

Estructura de un Nodo

Nodo Nodo Nodo

DATO ENLACE

Page 5: LISTAS ENLAZADAS Trabajo Monografico

LISTAS ENLAZADAS

Diferentes representaciones gráficas del último nodo de una lista

CLASIFICACIÓN DE LAS LISTAS ENLAZADAS

LISTAS SIMPLEMENTE ENLAZADAS, cada nodo contiene un único enlace que conecta ese nodo al nodo siguiente o nodo sucesor. La lista es eficiente en recorridos directos (adelante).

LISTAS DOBLEMENTE ENLAZADAS, cada nodo contiene dos enlace, uno a su nodo predecesor y el otro a su nodo sucesor. La lista es eficiente tanto en recorrido directo (adelante) como en recorrido inverso (atrás).

LISTA CIRCULAR SIMPLEMENTE ENLAZADA, es aquella en la que el último elemento (cola de la lista) se enlaza al primer elemento (cabeza de la lista), de tal modo que la lista puede ser recorrida de modo circular (en anillo).

ANTERIOR

INFORMACION SIGUIENTE

Page 6: LISTAS ENLAZADAS Trabajo Monografico

LISTA CIRCULAR DOBLEMENTE ENLAZADA, tiene las características de la lista doblemente enlazada y lista circulares. El último nodo se enlaza o apunta a la cabeza de la lista, todos los nodos enlazan al nodo anterior y al siguiente.

OPERACIONES EN LISTAS ENLAZADAS

Una lista enlazada requiere unos controles para la gestión de los elementos contenidos en ellas. Estos controles se manifiestan en forma de operaciones que tendrán las siguientes funciones:

Definición de la clase Nodo y referencia a Nodo. Inicialización o creación. Insertar elementos en una lista. Eliminar elementos de una lista. Buscar elementos de una lista (comprobar la existencia de elementos en una lista). Recorrer una lista enlazada (visitar cada nodo de la lista). Comprobar si la lista está vacía.

PASOS PARA LA CONSTRUCCIÓN DE UNA LISTA

La creación de una lista enlazada entraña la definición de clases, que pueden descomponerse en los siguientes pasos:

1. Definir la clase “Nodo” (opcionalmente, definir la clase Elemento).2. Definir la clase “Lista”, con la variable instancia referencia a Nodo cabeza o primero.3. Definir el método constructor de Lista que inicialice primero a null, lista vacía.4. Definir el método CrearLista(), de tal forma que cree iterativamente el primer elemento

(primero) y los elementos sucesivos de una lista enlazada simplemente.5. Repetir hasta que no haya más entrada para el elemento.

DEFINICION 3

• Secuencia ordenada de nodos donde cada nodo almacena:

o Un datoo Una referencia al siguiente nodo

• Los nodos no tienen por qué estar contiguos en memoria

Page 7: LISTAS ENLAZADAS Trabajo Monografico

LA CLASE NODE

Public class Node {private Object info;private Node next;public Node(Object info) {…}public Node getNext() {…}public void setNext(Node next) {…}public Object getInfo() {…}public void setInfo(Object info) {…} }

DEFINICION 4 LISTA DE ENLACE SIMPLE.

Una lista de enlace simple es una lista enlazada de nodos, donde cada nodo tiene un único campo de enlace. Una variable de referencia contiene una referencia al primer nodo, cada nodo (excepto el último) enlaza con el nodo siguiente, y el enlace del último nodo contiene null para indicar el final de la lista.

En java para realizar listas enlazadas se utilizan clases autoreferenciadas. Una clase autoreferenciada es una clase con al menos un campo cuyo tipo de referencia es el nombre de la clase.

Las operaciones básicas sobre una lista simple son:

o Insertar nodoo Eliminar nodoo Buscar nodoo Mostrar listao Eliminar lista

Page 8: LISTAS ENLAZADAS Trabajo Monografico

LISTAS DOBLEMENTE ENLAZADAS

Las listas doblemente enlazadas son estructuras de datos semejantes a las listas enlazadas simples.

La asignación de memoria es hecha al momento de la ejecución.

En cambio, en relación a la listas enlazada simple el enlace entre los elementos se hace gracias a dos punteros (uno que apunta hacia el elemento anterior y otro que apunta hacia el elemento siguiente).

El puntero anterior del primer elemento debe apuntar hacia NULL (el inicio de la lista).

El puntero siguiente del último elemento debe apuntar hacia NULL (el fin de la lista).

Para acceder a un elemento, la lista puede ser recorrida en ambos sentidos:

o comenzando por el inicio, el puntero siguiente permite el desplazamiento hacia el próximo elemento.

o comenzando por el final, el puntero anterior permite el desplazamiento hacia el elemento anterior.

Las operaciones básicas de una lista doblemente enlazada son:

o Insertar: inserta un nodo con dato x en la lista, pudiendo realizarse esta inserción al principio o final de la lista o bien en orden.

o Eliminar: elimina un nodo de la lista, puede ser según la posición o por el dato. o Buscar: busca un elemento en la lista. o Localizar: obtiene la posición del nodo en la lista.o Imprimir: imprime los elementos de la lista

Código

Nodo principal

public class NodoDoble { private Integer dato; private NodoDoble siguiente; private NodoDoble anterior;}

Método Insertar inicio

public void insertarInicio(Integer d){

Page 9: LISTAS ENLAZADAS Trabajo Monografico

NodoDoble nuevo = new NodoDoble(d); if(inicio==null){ inicio=nuevo; }else{ nuevo.setSiguiente(inicio); inicio.setAnterior(nuevo); inicio=nuevo; } }

Método Insertar final

public void insertarFinal(Integer d){ NodoDoble nuevo = new NodoDoble(d); if(inicio == null){ inicio = nuevo; }else{ NodoDoble aux = inicio; while(aux.getSiguiente() != null){ aux = aux.getSiguiente(); } aux.setSiguiente(nuevo); nuevo.setAnterior(aux);

} }

Metodo Eliminar

public void eliminaValor(Integer valor){ if (inicio != null){ NodoDoble aux = inicio; NodoDoble ant = null; while (aux != null){ if (aux.getDato() == valor ){ if (ant == null){ inicio = inicio.getSiguiente(); aux.setSiguiente(null); aux= inicio; }else { ant.setSiguiente(aux.getSiguiente()); aux.setSiguiente(null); aux = ant.getSiguiente();

Page 10: LISTAS ENLAZADAS Trabajo Monografico

} }else{ ant = aux; aux = aux.getSiguiente(); } } } } Método buscar

public void buscar(Integer valor){ if (inicio != null){ NodoDoble aux = inicio; int cont = 0; while (aux != null){ if (aux.getDato() == valor ){ cont++; aux = aux.getSiguiente(); } } } }

LISTAS ENLAZADAS CIRCULARES

Una lista circular es una lista lineal en la que el último nodo apunta al primero (no existe null)

Al igual que en las listas enlazadas, para trabajar con listas circulares utilizaremos la clase Nodo, la clase ListaC y la clase Prueba.

Page 11: LISTAS ENLAZADAS Trabajo Monografico

CLASE Nodo. public class Nodo { int info; Nodo enlace; public Nodo(int a) { info=a; } }

CLASE ListaC, public class ListaC { Nodo cab; void insertar(int a){ if(cab==null){ cab=new Nodo(a); cab.enlace=cab; } else{ Nodo temp=new Nodo(a); Nodo aux=cab; while(aux.enlace!=cab) aux=aux.enlace; aux.enlace=temp; temp.enlace=cab; } } void mostrar(){ if(cab!=null){ Nodo aux=cab; do { System.out.print(aux.info+" "); aux=aux.enlace; } while(aux!=cab); } } }

CLASE Pruebapublic class Prueba { public static void main(String[] args) { ListaC l=new ListaC(); l.insertar(1); l.insertar(2); l.insertar(3); l.insertar(4);

Page 12: LISTAS ENLAZADAS Trabajo Monografico

l.insertar(5); l.mostrar(); } }

RESUMEN

Una lista enlazada es una estructura de datos dinámica en la cual sus componentes están ordenados lógicamente por sus campos de enlace, en vez de ordenados físicamente como en un array. El final de la lista se señala mediante una constante o referencia especial llamada null. La gran ventaja de una lista enlazada sobre un array es que se puede crecer y decrecer en tamaño, ajustándose al número de elementos.Una lista simplemente enlazada contiene solo un enlace a un sucesor único, a menos que sea el último, en cuyo caso no se enlaza con ningún otro nodo.Cuando se inserta un elemento en una lista enlazada, se deben considerar cuatro casos:

Añadir a una lista vacía, Añadir al principio de la lista, Añadir en el interior de la lista y Añadir al final de la lista.

Para borrar un elemento primero hay que buscar el nodo que lo contiene y considerar dos casos: Borrar el primer nodo y Borrar cualquier otro nodo de la lista.

El recorrido de una lista enlazada significa pasar por cada nodo (visitar) y procesarlo. El proceso de cada nodo puede consistir en escribir su contenido, modificar el campo dato.

Page 13: LISTAS ENLAZADAS Trabajo Monografico

CONCLUSIONES

Para concluir tenemos que las listas enlazadas, todos sus métodos y las diferentes expresiones son una de las herramientas utilizadas para programar y procesar de una manera automatizada todos los sistemas que usamos DIA tras DIA en relación a técnicas o métodos para agilizar operaciones se refiere, es su principio fundamental dar soluciones a procesos que ameritan de largos pasos que dan como resultado el control de un asusto. Estas herramientas son uno de los instrumentos más usados en la programación para estructurar y organizar información.

Page 14: LISTAS ENLAZADAS Trabajo Monografico

BIBLIOGRAFIA

Listas enlazadas Programación de SistemasIngeniería de Sistemas – Estructura de Datos (listas simples)Estructura de Datos listas tema 3 Estructura de Datos en Java Luis Joyanes Aguilar, Ignacio Zahonero MartinezMetodología de la Programación, PROGRAMACION ESTRUCTURADA,Luis Joyanes Aguilar, Editorial McGraw-Hill.Estructura de Datos , Algoritmos, Abstracción y objetos, Luis Joyanes y Ignacio Salonero Martinez, Editorial McGraw-HillGuía de Teoría Computación de la UneT

http://valenciafg.files.wordpress.com/2012/01/unidad_5_listas_enlazadas.pdf

http://www.it.uc3m.es/java/2012-13/units/pilas-colas/slides/1-listas_es.pdf