Clase 2 Estructura de Datos - 456

34
UNIVERSIDAD MARIANO GALVEZ DE GUATEMALA FACULTAD DE INGENIERIA EN SISTEMAS DE INFORMACION INGENIERIA EN SISTEMAS DE INFORMACION ESTRUCTURAS DE DATOS Ing. Otto Ortíz

description

programacion

Transcript of Clase 2 Estructura de Datos - 456

Page 1: Clase 2 Estructura de Datos - 456

UNIVERSIDAD MARIANO GALVEZ DE GUATEMALA

FACULTAD DE INGENIERIA EN SISTEMAS DE INFORMACION

INGENIERIA EN SISTEMAS DE INFORMACION

ESTRUCTURAS DE DATOS

Ing. Otto Ortíz

Page 2: Clase 2 Estructura de Datos - 456

Agenda

● Examen corto clase anterior

● Listas: ● Componentes de una lista

● Operaciones de una lista

● Tipos de listas

Page 3: Clase 2 Estructura de Datos - 456

UNIVERSIDAD MARIANO GALVEZ DE GUATEMALA

FACULTAD DE INGENIERIA EN SISTEMAS DE INFORMACION

INGENIERIA EN SISTEMAS DE INFORMACION

Examen corto clase anterior

Page 4: Clase 2 Estructura de Datos - 456

Preguntas

¿Qué es un tipo de dato?

¿Cuáles son los tipos de datos más comunes?

¿Qué es una estructura de datos?

¿Cuál es la diferencia entre una estructura de datos

estática y una dinámica?

¿Cuáles son las etapas necesarias para seleccionar un

tipo de estructura de datos?

Page 5: Clase 2 Estructura de Datos - 456

UNIVERSIDAD MARIANO GALVEZ DE GUATEMALA

FACULTAD DE INGENIERIA EN SISTEMAS DE INFORMACION

INGENIERIA EN SISTEMAS DE INFORMACION

Listas

Page 6: Clase 2 Estructura de Datos - 456

Listas

● Una lista es un contenedor secuencial en el que se

pueden insertar y borrar elementos

independientemente del tamaño del contenedor.

● Para insertar un elemento cualquiera debemos ir

recorriendo la lista.

● Una inserción en medio de la lista no requiere mover

todos los elementos que se encuentran después del

punto de inserción

Page 7: Clase 2 Estructura de Datos - 456

Clasificación de las listas enlazadas

Los diferentes tipos de listas dependen de la forma de enlazar los nodos, son:

• Listas simplemente enlazadas. Cada nodo (elemento) 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 enlaces, 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. Una lista enlazada simplemente en

la que el último elemento (cola) se enlaza al primer elemento (cabeza) de tal

modo que la lista puede ser recorrida de modo circular (“en anillo”).

• Lista circular doblemente enlazada. Una lista doblemente enlazada en la

que el último elemento se enlaza al primer elemento y viceversa. Esta lista

se puede recorrer de modo circular (en anillo) tanto en dirección directa

(“adelante”) como inversa (“atrás”).

La implementación de cada uno de los cuatro tipos de estructuras de listas se

puede desarrollar utilizando referencias.

Page 8: Clase 2 Estructura de Datos - 456

Operaciones

● Las operaciones básicas de los diferentes tipos de

listas son las mismas sólo que se realizan de formas

diferentes dependiendo de la naturaleza de cada una

de ellas.

● Estas operaciones básicas son:

● Insertar

● Eliminar

● Editar

● Consultar

Page 9: Clase 2 Estructura de Datos - 456

Eliminar un elemento de una lista

La operación de eliminar un dato de una lista supone

enlazar el nodo anterior con el nodo siguiente al que se

desea eliminar y liberar la memoria que ocupa. El algoritmo

para eliminar un elemento sigue estos pasos:

1. Búsqueda del nodo que contiene el dato. Se ha de obtener la

dirección del nodo a eliminar y la dirección del anterior.

2. El enlace del nodo anterior que apunte al nodo siguiente del que

se elimina.

3. Si el nodo a eliminar es el cabeza de la lista (primero), se modifica

primero para que tenga la dirección del siguiente nodo.

4. Por último, la memoria ocupada por el nodo se libera. Es el propio

sistema el que libera el nodo, al dejar de estar referenciado.

Page 10: Clase 2 Estructura de Datos - 456

Inserción de un elemento en una

lista Doble y/o Lista Circular Doble Quitar un nodo de una lista supone realizar el enlace de dos nodos, el

nodo anterior con el nodo siguiente al que se desea eliminar. La

referencia adelante del nodo anterior debe apuntar al nodo siguiente, y

la referencia atrás del nodo siguiente debe apuntar al nodo anterior.

El algoritmo es similar al del borrado para una lista simple. Ahora, la

dirección del nodo anterior se encuentra en la referencia atrás del nodo

a borrar. Los pasos a seguir son:

1. Búsqueda del nodo que contiene el dato.

2. La referencia adelante del nodo anterior tiene que apuntar a la

referencia adelante del nodo a eliminar (si no es el nodo

cabecera).

3. La referencia atrás del nodo siguiente a borrar tiene que apuntar a

la referencia atrás del nodo a eliminar (si no es el último nodo).

4. Si el nodo que se elimina es el primero, cabeza, se modifica

cabeza para que tenga la dirección del nodo siguiente.

5. La memoria ocupada por el nodo es liberada automáticamente.

Page 11: Clase 2 Estructura de Datos - 456

Editar un elemento en una lista

La operación editar un elemento en una lista recorre la lista

hasta encontrar la posición del nodo al que se desea

modificar la información del elemento y actualiza la

información del nodo por el nuevo elemento.

El algoritmo, una vez modificada la información del nodo,

devuelve la referencia a ese nodo (en caso negativo,

devuelve null).

Otro planteamiento es que el método devuelva true si se

pudo modificar la información del nodo con el elemento, y

false si no se pudo realizar la operación.

Page 12: Clase 2 Estructura de Datos - 456

Consulta de un elemento en una

lista

La operación búsqueda de un elemento en una lista

enlazada recorre la lista hasta encontrar el nodo con el

elemento.

El algoritmo, una vez encontrado el nodo, devuelve la

referencia a ese nodo (en caso negativo, devuelve null).

Otro planteamiento es que el método devuelva true si

encuentra el nodo con el elemento, y false si no está en la

lista.

Page 13: Clase 2 Estructura de Datos - 456

Nodo

Para comprender de una mejor manera el

concepto de Listas Simples es necesario,

primeramente, conocer la estructura básica de

un nodo. En general un nodo consta de dos

partes:

• Un campo Información que será del tipo de

datos que se quiera almacenar en la lista

• Un puntero sig, que se utiliza para establecer

el enlace con otro nodo de la lista. que será

del tipo de datos que se quiera almacenar en

la lista. Si el nodo fuera el último de la lista,

este campo tendrá como valor: NULL (vacío).

Al emplearse el campo puntero sig para

relacionar dos nodos, no será necesario

almacenar físicamente a los nodos en

espacios contiguos.

Page 14: Clase 2 Estructura de Datos - 456

LISTA SIMPLE ENLAZADA • Estructura conformada por un elemento fundamental denominado

Nodo. El Nodo es un elemento que contiene la información y la

dirección del siguiente elemento, el primer elemento creado se le

denomina cabeza y es la referencia para el desarrollo de las

diversas acciones en la Lista.

• Una lista enlazada, en su forma mas simple, es una colección de

nodos que juntos forman un orden lineal. El ordenamiento esta

determinado de tal forma que cada nodo es un objeto que guarda

una referencia a un elemento y una referencia, llamado siguiente, a

otro nodo. La idea principal es que se cree un nuevo nodo, se pone

su enlace siguiente para que se referencie al mismo objeto que la

cabeza, y entonces se pone que la cabeza apunte al nuevo nodo.

Page 15: Clase 2 Estructura de Datos - 456

LISTA SIMPLE ENLAZADA • Podría parecer extraño tener un nodo que referencia a otro nodo,

pero tal esquema trabaja fácilmente. La referencia siguiente dentro

de un nodo puede ser vista como un enlace o apuntador a otro

nodo. De igual nodo, moverse de un nodo a otro siguiendo una

referencia al siguiente es conocida como salto de enlace o salto de

apuntador.

• Como en un arreglo, una lista simple enlazada guarda sus

elementos en un cierto orden. Este orden está determinado por la

cadenas de enlaces siguientes yendo desde cada nodo a su

sucesor en la lista. A diferencia de un arreglo, una lista simple

enlazada no tiene un tamaño fijo predeterminado, y usa espacio

proporcional al número de sus elementos. Asimismo, no se emplean

números índices para los nodos en una lista enlazada. Por lo tanto,

no se puede decir sólo por examinar un nodo si este es el segundo,

quinto u otro nodo en la lista.

Page 16: Clase 2 Estructura de Datos - 456

LISTA SIMPLE ENLAZADA

Ejemplo de Inserción

Page 17: Clase 2 Estructura de Datos - 456

LISTA SIMPLE ENLAZADA

Ejemplo de Eliminar

Page 18: Clase 2 Estructura de Datos - 456

Implementación de lista simple

Creando la Clase para el manejo de la lista

Métodos para determinar si la lista

Está vacía y para obtener el tamaño

De la misma

Page 19: Clase 2 Estructura de Datos - 456

Implementación de lista simple Inserción

Page 20: Clase 2 Estructura de Datos - 456

Implementación de lista simple Borrado

Page 21: Clase 2 Estructura de Datos - 456

Implementación de lista simple Borrado

Page 22: Clase 2 Estructura de Datos - 456

Implementación de lista simple Búsqueda

Page 23: Clase 2 Estructura de Datos - 456

Implementación de lista simple Impresión

Page 24: Clase 2 Estructura de Datos - 456

LISTA DOBLE ENLAZADA • En una lista doblemente enlazada cada nodo tiene una referencia al

nodo siguiente, el cual apunta al siguiente nodo en la lista, y al nodo anterior el cual apunta al nodo previo en la lista. Al igual que en las implementaciones de otras estructuras, en la lista doblemente enlazada los nodos cabecera y final tienen referencias a null. Una buena analogía de una lista doble enlazada sería un tren, donde cada vagón esta conectado con el que le precede y el que le sigue.

• Tipo de lista enlazada que permite ir en ambas direcciones hacia

adelante y hacia atrás en una lista enlazada. Tal lista permite una

gran variedad de operaciones rápidas de actualización, al estar

doblemente ligada facilita la implementación de la búsqueda y

recorridos en ambos sentidos incluyendo la inserción y el borrado

en ambos extremos, y en el centro.

Page 25: Clase 2 Estructura de Datos - 456

LISTA DOBLE ENLAZADA

Ejemplo de Inserción

Page 26: Clase 2 Estructura de Datos - 456

LISTA DOBLE ENLAZADA

Ejemplo de Eliminar

Page 27: Clase 2 Estructura de Datos - 456

LISTA CIRCULAR • En las listas lineales simples o dobles siempre hay un primer nodo y

un último nodo que tiene el campo de enlace a nulo. Esto, porque se delimita el comienzo y el término de la misma. Una lista circular, por su naturaleza cíclica, no tiene ni principio ni fin. No obstante, es útil y recomendable establecer un nodo de referencia a partir del cual se acceda a la lista y así poder conocer la posición inicial y acceder a sus operaciones insertar, borrar etc.

• Una lista circularmente enlazada tiene el mismo tipo de nodos que una lista simple enlazada. Esto es, cada nodo en una lista circularmente enlazada tiene un apuntador siguiente y una referencia a un elemento. Pero no hay una cabeza o cola en la lista circularmente enlazada. En vez de tener que el apuntador del último nodo sea null, en una lista circularmente enlazada, este apunta de regreso al primer nodo. Por lo tanto, no hay primer nodo o último. Si se recorren los nodos de una lista circularmente enlazada desde cualquier nodo usando los apuntadores sig, se ciclará a través de los nodos.

Page 28: Clase 2 Estructura de Datos - 456

LISTA CIRCULAR • Aún cuando una lista circularmente enlazada no tiene inicio o

terminación, no obstante se necesita que algún nodo esté marcado

como especial, el cual será llamado el cursor. El nodo cursor

permite tener un lugar para iniciar si se requiere recorrer una lista

circularmente inversa. Y si se recuerda esta posición inicial,

entonces también se puede saber cuando se haya terminado con

un recorrido en la lista circularmente enlazada, que es cuando se

regresa al nodo que fue el nodo cursor cuando se inicio.

Page 29: Clase 2 Estructura de Datos - 456

LISTA CIRCULAR

Ejemplo de Inserción

Page 30: Clase 2 Estructura de Datos - 456

LISTA CIRCULAR

Ejemplo de Eliminar

Page 31: Clase 2 Estructura de Datos - 456

LISTA CIRCULAR DOBLE • En una lista circular doblemente enlazada, cada nodo tiene dos

enlaces, análogamente a la lista doblemente enlazada lineal, el cambio radica en que el enlace anterior del primer nodo apunta al último y el enlace siguiente del último nodo, apunta al primero

• Como en una lista doblemente enlazada, las inserciones y

eliminaciones pueden ser hechas desde cualquier punto con acceso

a algún nodo contiguo. Aunque estructuralmente una lista circular

doblemente enlazada no tiene ni principio ni fin, un puntero de

acceso externo (centinela) puede establecer el nodo apuntado que

está en la cabeza o al nodo final, y así mantener el orden como en

una lista doblemente enlazada.

Page 32: Clase 2 Estructura de Datos - 456

LISTA CIRCULAR DOBLE • La búsqueda y los algoritmos de ordenación se simplifican si se

usan los llamados Nodos Centinelas o cabecera, donde cada

elemento apunta a otro elemento y nunca a nulo. El Nodo Centinela

o Puntero Cabeza contiene, como otro, un puntero siguiente que

apunta al que se considera como primer elemento de la lista

También contiene un puntero previo que hace lo mismo con el

último elemento.

• El Nodo Centinela es definido como otro nodo en una lista

doblemente enlazada. Si los punteros anterior y siguiente apuntan

al Nodo Centinela la lista se considera vacía. En otro caso, si a la

lista se le añaden elementos ambos puntero apuntarán a otros

nodos. Estos Nodos Centinelas simplifican muchos las operaciones

pero hay que asegurarse de que los punteros anterior y siguiente

existen en cada momento.

Page 33: Clase 2 Estructura de Datos - 456

LISTA CIRCULAR DOBLE

Ejemplo de Inserción

Page 34: Clase 2 Estructura de Datos - 456

LISTA CIRCULAR DOBLE

Ejemplo de Eliminar