programación 3: listas enlazadas

Download Programación 3: listas enlazadas

If you can't read please download the document

Post on 14-Apr-2017

119 views

Category:

Engineering

8 download

Embed Size (px)

TRANSCRIPT

PROGRAMACIN 3

PROGRAMACIN 3TEMA: LISTAS ENLAZADAS

Estudiante : Tania LandivarUNIVERSIDAD DE CUENCAFACULTAD DE INGENIERA

INTRODUCCINLas estructuras de datos lineales (vectores ) obliga afijar por adelantado el espacio a ocupar en memoria, de modo que, cuando se desea aadir un nuevo elemento que rebase el tamao prefijado del array, no es posible realizar la operacin sin que se produzca un error en tiempo de ejecucin, para evitar esto se hace uso de las listas enlazadas.Una lista enlazada es una coleccin o secuencia de elementos llamados nodos, dispuestos uno detrs de otro, en la que cada elemento se conecta al siguiente elemento por un enlace o referencia.

NODOSSe componen de los partes:

Contiene Informacin (Dato, Tipo Elemento).Referencia denominada enlace, que apunta al siguiente elemento de la lista.

CLASIFICACIN DE LAS LISTAS ENLAZADASListas simplemente enlazadas: Cada nodo(elemento) contiene un nico enlace que lo conectan al nodo siguiente. La lista es ms eficiente en recorridos directos (adelante).

Listas doblemente enlazadas: Cada nodo contiene dos enlaces a su nodo predecesor y sucesor. La listas es eficiente tanto en recorrido directo hacia (adelante) o (atrs).

Lista circular simplemente enlazada: Es la que el ltimo elemento se enlaza con el primer elemento.

Lista circular doblemente enlazada: Es la que el ltimo elemento enlaza al primer elemento y viceversa.

Tipo de dato abstracto (tda)Una lista enlazada se utiliza para almacenar informacin, tiene un conjunto de valores (nodos ) y un conjunto de operaciones (inserciones, eliminaciones de nodos, entre otros).Estas son un tipo de dato abstracto, debido a que su espacio de almacenamiento es variable.

Operaciones en las listas enlazadasInicializacin o Creacin.Insertar elementos a la lista.Eliminar elementos de la lista.Buscar elementos de la lista.Recorrer la lista enlazada.Comprobar si la lista est vaca.

Declaracin de un nodo en java

Declaramos una clase con el nombre Nodo Dato EnlaceEl constructor inicializa al objeto Nodo.La visibilidad de los dos campos del nodo, tienen la visibilidad por defecto para que los mtodos que implementan las operaciones de las listas, puedan acceder a ellos.

ACCESO A LA LISTA: CABECERA Y COLANormalmente se accede al primer Nodo de la lista, aunque en ocasiones se mantiene una referencia al ltimo Nodo de la lista enlazada. Cuando se inicia la construccin de una lista, la referencia cabeza, normalmente se inicializa a null, para indicar que la lista est vaca.

CONSTRUCCIN DE UNA LISTAPara construir una lista se necesitan dos clases (Nodo y Lista) que deben estar contenidas en el mismo paquete.

En la clase Lista se implementan las operaciones de las listas enlazadas.

INSERCIN DE UN ELEMENTO A LA LISTAA la cabeza de la lista(elemento primero)

Insercin al final de la lista.

Est insercin es menos eficiente, debido a que hay que ir recorriendo toda la lista, hasta llegar al nodo final.Insercin entre dos nodos de la lista.Se crea un nuevo nodo con el dato 75.

Bsqueda en listas enlazadas

Para la operacin bsqueda de un elemento, se recorre la lista hasta encontrar el nodo con el elemento, dicha operacin devuelve una referencia a ese nodo, si no lo encuentra devuelve null.Hay que tener en cuenta que (==) se utiliza para datos simples, en cambio si los datos de los nodos son objetos entonces utilizamos el mtodo equals(), que compara dos objetos.

ELIMINACIN DE UN NODO DE LA LISTAEst operacin consiste en enlazar el nodo anterior con el nodo siguiente al que se desea eliminar y liberar la memoria que ocupa. Obtener la direccin del nodo a eliminar y la del nodo anterior.El enlace del nodo anterior que apunte al siguiente nodo del cual se elimina.Si el nodo a eliminar es la cabeza, se modifica la cabeza para que tenga la direccin del siguiente nodo.Finalmente, la memoria ocupada se libera. Es el propio sistema que libera el nodo, al dejar de estar referenciado.

Cdigo en Java

LISTA ORDENADAUna lista normalmente est ordenada de forma lineal segn las posiciones que ocupen en la misma. Pero tambin es posible tener una lista ordena segn el dato asociado a cado nodo. Con frecuencia para obtener una lista enlazada ordenada se inicia con una lista vaca.

Los datos de una lista ordenada han de ser de tipo ordinal (tipo al que pueda aplicar los operadores ==, ); o bien objetos de clases que tengan definidos mtodos de comparacin (equals(), compareTo(),).

CLASE ListaOrdenadaEs recomendable declarar una clase ListaOrdenada, como extensin de la clase Lista, por consiguiente hereda las propiedades de est clase, los mtodos eliminar() y buscarLista() se redefine para que la bsqueda del elemento aproveche el hecho de que estos estn ordenados.

Lista doblemente enlazadaEn una lista doblemente enlazada , cada elemento contiene dos referencias, adems del valor almacenado.Una referencia apunta al siguiente elemento de la lista y la otra referencia apunta al elemento anterior.

Operaciones: Insertar, Eliminar, Recorrer, Buscar.Al momento de insertar entre dos nodos, llega a ser ms complicado debido ha que se asignan cuatro enlaces.

En cambio en la operacin eliminar, el nodo de la lista doble necesita enlazar, mutuamente el nodo anterior y el nodo siguiente del que se borra.

Nodo de una lista doblemente enlazada

Insertar un elemento en una lista doblemente enlazadaLa clase listaDoble que encapsula las operaciones bsicas de las listas doblemente enlazadas.La clase dispone de la variable cabeza que referencia al primer nodo de la lista, permite acceder a cualquier otro nodo.El constructor de la clase inicializa la lista vaca (null).La posicin de insercin del nuevo nodo puede ser:En la cabeza de la listaAl final de la listaAntes de un elemento especificadoDespus de un elemento especificado.

INSERTAR EN LA CABEZA DE LA LISTACrea un nodo con un nuevo elemento y asignar su referencia a la variable nuevo.Hacer que el campo enlace adelante del nuevo nodo apunte a la cabeza, y el campo enlace atras nodo cabeza apunte al nuevo nodo.Hacer que la cabeza apunte al nuevo nodo que se ha creado.

Insertar despus de un nodoCrear un nuevo nodo con el nuevo elemento, y asignar su referencia a la variable nuevo.Hacer que el enlace adelante del nuevo nodo apunte al nodo siguiente de n(o bien a null si n es el ltimo nodo). El enlace atras del nodo siguiente a n (si n no es el ltimo nodo) tiene que apuntar a nuevo.Hacer que el enlace adelante del nodo n apunte al nuevo nodo. A su vez el enlace atras del nuevo nodo debe apuntar a n.

ELIMINAR UN ELEMENTO DE UNA LISTA DOBLEMENTE ENLAZADABsqueda del nodo que contiene el dato.La referencia adelante del nodo anterior tiene que apuntar a la referencia adelante del nodo a eliminar (si no es el nodo cabecera).La referencia atras del nodo siguiente a borrar tiene que apuntar a la referencia atras del nodo a eliminar(si no es el ltimo nodo).Si el nodo que se elimina es el primero, cabeza, se modifica cabeza para que tenga la direccin del nodo siguiente.La memoria ocupada por el nodo es liberada automticamente.

Listas circulares

Una lista circular por su propia naturaleza no tiene principio, ni fin.Sin embargo resulta til establecer un nodo a partir del cul se acceda a la lista y as poder acceder a sus nodos.Operaciones de las listas circulares:

Inicializacin o creacin.Insercin de elementos.Eliminacin de elementos.Bsqueda de elementos.Recorrido de cada uno de los nodos.Verificacin de la lista vaca.

Nodo de una lista circular

Hay que tener en cuenta que en el constructor, el campo referencia enlace, en vez de quedar en null, se inicializa que apunte al mismo nodo, de tal forma que queda como una lista circular de un solo nodo.

Insertar un elemento en una lista circularLa posicin de insercin puede variar. Consideramos que se hace como nodo anterior al del nodo de acceso a la lista lc, y que lc tiene la direccin del ltimo nodo insertado.

Eliminar un elemento de una lista circularEl algoritmo para eliminar un nodo es:Bsqueda del nodo que contiene al dato.Se enlaza el nodo anterior con el siguiente.En el caso de que el nodo a eliminar sea por el que se accede a la lista, lc, se modifica lc, para que tenga la direccin del nodo anterior.Por ltimo el sistema libera la memora ocupada por el nodo al anular la referencia.

Recorrer una lista circularEste mtodo se va a escribir de la siguiente manera: Inicia su recorrido en el nodo siguiente al del acceso a la lista, lc, termina cuando alcance el nodo lc.

Listas enlazadas genricasUna lista esta ligada al tipo de datos de sus elementos como int, double, String.Declarando el campo dato de tipo Object se consigue una lista genrica, vlida para cualquier tipo de dato, aunque exigir muchas conversiones de datos cuando se concrete para un tipo de dato particular.La clase Object es un clase base de cualquier clase no derivada, cualquier referencia a un objeto se puede asignar a una variable de tipo Object.Entonces, si se define el campo dato de tipo Object, la conversin automtica permite crear listas enlazadas de cualquier tipo de objetos.

Ejemplo: Se definen las referencias a objetos String, Integer y se asigna a una referencia Object.Integer t: new Integer(5);Object q;q = t; //asignacin correctat = q; //error no se puede asignar a una subclase una clase base.

Declaracin de una lista genrica

Iterador de la listaUn iterador de una lista enlazada accede a cada uno de los nodos, hasta alcanzar el ltimo elemento.El constructor del objeto iterador inicializa el puntero actual al primer elemento de la estructura; el mtodo siguiente() devuelve el elemento actual y hace que quede referenciado al siguiente elemento, si no existe devuelve

Recommended

View more >