cap v, listas.pdf

49
 FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA EN SISTEMAS Y COMPUTACIÓN ESTRUCTURA DE DATOS Pamela Vásquez Costales 

Upload: pamela-vasquez-costales

Post on 31-Oct-2015

851 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 1/49

 

FACULTAD DE INGENIERÍA

ESCUELA DE INGENIERÍA ENSISTEMAS Y COMPUTACIÓN

ESTRUCTURA DE DATOS 

Pamela Vásquez Costales 

Page 2: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 2/49

 

UNIDAD II

CAPÍTULO V

LISTAS

Page 3: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 3/49

LISTAS

Objetivos

O Entender qué es una lista encadenada.O Describir el TDA lista encadenada.

O Comprender cómo se puede

representar una lista encadenada,tanto en memoria estática como enmemoria dinámica.

Page 4: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 4/49

Objetivos

O Describir la forma en que se puedenimplementar las operaciones de

inserción de un elemento, eliminaciónde un elemento y desplegado de loselementos de una lista encadenada.

O

Identificar las características, ventajasy desventajas de una lista encadenadacircular.

Page 5: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 5/49

Objetivos

O Identificar las características, ventajasy desventajas de una lista doblemente

encadenada y una lista doblementeencadenada circular. 

Page 6: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 6/49

¿Qué es una lista encadenada?

Es una estructura de datos que tieneuna organización lineal y se caracteriza

porque cada uno de sus elementos tieneque indicar dónde se encuentra el

siguiente elemento de la lista comoindica la siguiente figura; por lo tanto,es una abstracción de la representaciónpor ligas para una estructura de datos

lineal.

Page 7: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 7/49

Una lista encadenada es un TDA que seconvierte en una opción pararepresentar otras estructuras de datos o

TDA.

Page 8: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 8/49

Cada elemento de la lista se guarda enun nodo que contiene la información y

el valor que indica en dónde seencuentra el siguiente dato en la lista.

Page 9: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 9/49

¿Cuál es la especificación lógica delTDA lista encadenada?

Page 10: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 10/49

Page 11: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 11/49

Page 12: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 12/49

¿Cómo se utilizan la memoria

estática y la dinámica pararepresentar el TDA listaencadenada?

Una lista encadenada está formada porun conjunto de nodos ligados entre sí.Se denomina nodo de lista encadenada

al espacio de memoria que almacena unelemento de la lista y la dirección dondese encuentra el siguiente elemento de la

estructura como indica la figura:

Page 13: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 13/49

Esquema de nodo para una lista

encadenada: 

Page 14: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 14/49

La lista encadenada puede representarseen memoria estática utilizando un

arreglo de nodos o, más común, conmemoria dinámica utilizando nodos

encadenados a través de apuntadores.

Page 15: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 15/49

Cualquiera que sea la representaciónseleccionada debe existir un apuntadorprincipal, externo a la estructura, que

almacene la dirección del primer

elemento de la lista, ya que, a partir deél, se encadena el resto de loselementos (cada uno guarda la

dirección de su sucesor).

Page 16: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 16/49

La siguiente figura muestra el esquemade una lista encadenada en memoria

estática:

Page 17: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 17/49

La figura muestra el esquema de unalista encadenada equivalente en

memoria dinámica.

Page 18: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 18/49

Cualquier operación que se efectúesobre una lista encadenada debe cuidar

el correcto encadenamiento de loselementos, ya que un apuntador mal

colocado provocará pérdidas en la listay afectará la integridad de la estructura.

Page 19: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 19/49

¿Cómo se puede implementar unalista encadenada en lenguaje

C++??

La implementación de una listaencadenada requiere primero de un

tipo de dato que represente a un nodoque, a su vez, permita agrupar el

valor almacenado y la dirección delsiguiente elemento.

Page 20: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 20/49

Las opciones para esta representación,que ofrece el lenguaje C++, son através de un objeto o un registro

(struct).

Dado que un nodo sirve para formaruna lista, es recomendable que en

cualquier representación seleccionadapara el nodo, se pueda tener acceso a

los elementos que lo conforman; esdecir, los atributos deben ser públicos.

Page 21: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 21/49

A continuación se muestran las dosopciones de representación:

Page 22: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 22/49

Una vez definido el tipo de dato de losnodos, la representación de la listaencadenada se especifica con un

apuntador al inicio de la lista, como se

muestra a continuación:

Page 23: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 23/49

Page 24: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 24/49

¿Cuáles son las situaciones típicasde implementación en una lista

encadenada?

Para visualizar las situaciones máscomunes de implementación de una lista

encadenada, se analizarán diversosejemplos.

Page 25: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 25/49

Ejemplo:

Page 26: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 26/49

Page 27: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 27/49

Page 28: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 28/49

Page 29: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 29/49

Page 30: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 30/49

Page 31: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 31/49

¿Cuáles son las variantes de una

lista encadenada?Si se consideran las características deuna lista encadenada es posible generar

diversas variantes de gran utilidad.

Entre las más comunes se encuentran:O Listas encadenadas circulares

O Listas doblemente encadenadas

O Listas doblemente encadenadascirculares

O Listas con múltiples encadenamientos

Page 32: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 32/49

¿Cómo es una lista encadenadacircular?

Es una ligera variante de la listaencadenada lineal; se obtiene al

considerar el "primer" nodo de la listacomo el sucesor del último nodo,

almacenando la dirección del primerelemento en el campo de dirección del

último, en lugar de almacenar ladirección nula.

Page 33: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 33/49

Al realizar esta modificación se generaautomáticamente un círculo, donde

realmente ya no existe ni el primero niun último elemento.

Page 34: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 34/49

Características generales de unalista circular 

O Es necesario mantener un apuntadorgeneral a la estructura (Lista), aunque

ya no apunte obligatoriamente alprimer elemento.

O La dirección nula no existe en la lista,excepto cuando la lista está vacía.

O Si la lista contiene un solo elemento, elcampo de dirección apuntará a esemismo nodo.

Page 35: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 35/49

O Como la lista es un círculo, es posiblellegar a cualquier nodo de la lista apartir de cualquiera de sus nodos, loque es imposible en una lista lineal

como indica la figura: Esquema de unalista encadenada circular.

Page 36: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 36/49

Código en lenguaje C++ de lasinstrucciones que sirven para desplegar la

información de una lista circular:

Observe la importancia de validar el casoextremo de la lista vacía, y de controlar

con un ciclo do...while el desplegado de lainformación.

Page 37: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 37/49

¿Cómo es una lista doblementeencadenada?

Este tipo de listas se utilizan cuando la

aplicación sobre una lista encadenadadebe recorrer la lista en ambos sentidos,

algo imposible de realizar en una listaencadenada lineal y, aunque es posible

hacerlo en una lista circular, resulta muyineficiente.

Page 38: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 38/49

Características generales de unalista doblemente encadenada

O Se requiere mantener un apuntador

general a la estructura (Lista), a pesarde que los nodos conocen a supredecesor y a su sucesor. No esnecesario que lista apunte al primer

elemento de la lista, ya que siempre sepodrá llegar a él como indica la figura:

Page 39: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 39/49

Esquema de una lista doblementeencadenada

Page 40: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 40/49

O Cada nodo requiere almacenar, ademásdel elemento, dos direcciones: la delpredecesor y la del sucesor.

O El movimiento de apuntadores puede

hacerse en ambas direcciones.

Page 41: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 41/49

Los nodos de una lista doblementeencadenada se definirían de la siguiente

manera en el lenguaje C++:

Page 42: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 42/49

La eliminación del nodo señalado por elapuntador P en una lista doblemente

encadenada, requerirá de las siguientesinstrucciones en lenguaje C++:

Page 43: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 43/49

La inserción de un nodo después delnodo señalado por el apuntador P enuna lista doblemente encadenada,

requerirá de las siguientes instrucciones

en lenguaje C++:

Page 44: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 44/49

¿Cómo es una lista doblementeencadenada circular?

En este tipo de listas, cada nodo

almacena la dirección de su sucesor y desu predecesor. No existe un inicio ni un

final.

Page 45: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 45/49

Características generales de una

lista circular doblemente enca-denada circular 

O Se requiere mantener un apuntadorgeneral a la estructura (Lista), a pesarde que los nodos conocen a supredecesor y a su sucesor. Este

apuntador puede guardar la direcciónde cualquier nodo de la lista comoindica la figura:

Page 46: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 46/49

Esquema de una lista doblemente

encadenada circular

Page 47: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 47/49

O Cada nodo requiere almacenar, además

del elemento, dos direcciones (la delpredecesor y la del sucesor).

O La dirección nula no existe en la lista,

excepto cuando está vacía.O Si la lista contiene un elemento, el

campo de dirección apuntará a esemismo nodo.

O El movimiento de apuntadores puedehacerse en ambas direcciones.

Page 48: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 48/49

¿Cómo es una lista con múltiplesencadenamientos?

Esta variante permite mezclar listas que

contienen diferentes elementos. Loanterior se logra cuando los nodosalmacenan la dirección de otra lista

como indica la figura.

Page 49: Cap V, LISTAS.pdf

7/16/2019 Cap V, LISTAS.pdf

http://slidepdf.com/reader/full/cap-v-listaspdf 49/49

Esquema de una lista con múltiples

encadenamientos

Estas mezclas pueden llegar a ser tancomplejas como la aplicación lo requiera.