profesor: josé miguel rubio l. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ici...

36
Profesor: José Miguel Rubio L. Magíster © en Ingeniería Informática Ingeniero Civil en Informática Licenciado en Ciencias de la Ingeniería Técnico en Programación Oficina: 3-20 e-mail 1: [email protected] e-mail 2: [email protected]

Upload: lehanh

Post on 03-Oct-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Profesor: José Miguel Rubio L.

Magíster © en Ingeniería InformáticaIngeniero Civil en InformáticaLicenciado en Ciencias de la IngenieríaTécnico en Programación

Oficina: 3-20e-mail 1: [email protected] 2: [email protected]

Page 2: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

ICI 142Fundamentos de Programación

Page 3: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Estructuras Lineales de Datos

Page 4: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Índice

• Abstracción de datos

• Utilización de un TDA

• Tipos de estructura de datos

lineales

• Listas

• Pilas

• Colas

Page 5: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Abstracción de datos

• La abstracción nos permite simplificar el análisis y resolución

de un problema separando las características que son

relevantes de aquellas que no lo son.

• Una abstracción de datos, también denominada tipo de dato

abstracto, es un nuevo tipo de dato más un conjunto de

operaciones que permiten manipular objetos de dicho tipo.

• La utilización de los TDA da lugar a programas que son:

– más legibles

– más fáciles de mantener

– y más fáciles de modificar.

Page 6: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Utilización de un TDA

• Para poder utilizar un TDA, sin saber como está

representado internamente, es necesario disponer de

su especificación.

• Un TDA se divide en dos partes:

– Especificación.

– Implementación.

Page 7: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Tipos de estructura de datos lineales

• Listas

• Pilas

• Colas

• Estas estructuras de datos pueden ser:

– Estáticas (implementado con arreglos) o

– Dinámicas (implementado con listas enlazadas).

Page 8: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Listas

• Son estructuras de datos secuenciales de 0 o más

elementos de un tipo dado almacenados en memoria.

• Son estructuras lineales, donde cada elemento de la

lista, excepto el primero, tiene un único predecesor y

cada elemento de la lista, excepto el último, tiene un

único sucesor.

• El número de elementos de la lista se llama longitud.

Si tiene 0 elementos se llama lista vacía.

Page 9: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Listas

• En una lista podemos añadir nuevos elementos o

suprimirlos en cualquier posición.

• Ejemplo implementado con arreglo:

Page 10: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Tipos de listas

• No enlazada (arreglo)

• Enlazada (objetos)

• Doblemente enlazada (anterior apunta al siguiente y

viceversa)

• Circular (el último apunta al primero)

• A la vez pueden estar:

– Ordenada

– No ordenada

Page 11: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Operaciones sobre Listas

• Algunas operaciones son:

– Inserción

– Supresión

– Recorrido

– Ordenación

– Búsqueda

– Consulta

Page 12: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Operaciones sobre Listas

Page 13: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Aplicación de las listas

• Las listas son comunes en la vida diaria: listas de

alumnos, listas de clientes, listas de espera, listas de

distribución de correo, etc.

• Las listas son estructuras de datos muy útiles para los

casos en los que se quiere almacenar información de la

que no se conoce su tamaño con antelación.

Page 14: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Aplicación de las listas

• También son valiosas para las situaciones en las que

el volumen de datos se puede incrementar o

decrementar dinámicamente durante la ejecución del

programa.

• Cuando aplicamos restricciones de acceso a las listas

tenemos pilas y colas que son listas especiales.

Page 15: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Listas Enlazadas

• Una lista enlazada está formada por una colección de

elementos (denominados nodos) tales que cada uno

de ellos almacena dos valores: un valor de la lista y

un puntero o referencia que indica la posición del

nodo que contiene el siguiente valor de la lista.

• Es necesario almacenar al menos la posición del

primer elemento.

• Es dinámica, su tamaño puede cambiar durante la

ejecución del programa.

Page 16: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Nodos de una lista enlazada

• Una lista enlazada es una sucesión de nodos en la

que a partir de un nodo se puede acceder al que

ocupa la siguiente posición en la lista.

• Esta característica nos indica que el acceso a las

listas es secuencial y no indexado, por lo que para

acceder al último elemento de la lista hay que

recorrer los n-1 elementos previos (n es el tamaño de

la lista).

Page 17: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Nodos de una lista enlazada

• Para que un nodo pueda acceder al siguiente y la

lista no se rompa en varias listas cada nodo tiene que

tener un puntero que guarde la dirección de memoria

que ocupa el siguiente elemento.

Page 18: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

• De esta forma un nodo se podría representar esquemáticamente así:

• En el campo información se almacena el objeto a guardar y nodo siguiente mantendrá la conexión con el siguiente nodo.

Esquema de una lista enlazada

Información

Nodo siguiente

Información

Nodo siguiente

Información

Nodo siguiente

Información

Nodo siguiente

Page 19: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Lista doblemente enlazada

• Son listas que tienen un enlace con el elemento

siguiente y con el anterior.

• Una ventaja que tienen es que pueden recorrerse en

ambos sentidos, ya sea para efectuar una operación

con cada elemento o para insertar, actualizar y

borrar.

• La otra ventaja es que las búsquedas son algo más

rápidas puesto que no hace falta hacer referencia al

elemento anterior.

Page 20: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

• Su inconveniente es que ocupan más memoria por

nodo que una lista simple.

Lista doblemente enlazada

Page 21: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

• Son listas en el que el último elemento tiene una

referencia (enlace) con el primer elemento

(cabecera).

• Pueden ser listas simples o doblemente circulares.

Listas circulares (enlazadas)

Page 22: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Pilas

• Es un tipo lineal de datos, secuencia de

elementos de un tipo, una estructura tipo LIFO

(Last In First Out) último en entrar primero en

salir.

• Son un subconjunto de las listas, en donde las

eliminaciones e inserciones se dan en un solo

extremo, de manera tal que, el último elemento

es el único accesible.

Page 23: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Pilas

• Operaciones básicas:

–– Crear la estructuraCrear la estructura

–– InsertarInsertar

–– EliminarEliminar

–– Obtener un elementoObtener un elemento

–– VacVacííarar

–– Mostrar los elementosMostrar los elementos

Page 24: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Aplicaciones de las pilas

• Compiladores (parsers: reconocedores sintácticos de los

compiladores).

• Programación de sistemas (para registrar llamadas a

subprogramas, y recuperar los datos anteriores, o

recuperar los parámetros).

• Recuperación de elementos en orden inverso al que

fueron colocados (en un depósito, una pila de

contenedores, sillas, etc. ).

• Convertir notación infija a posfija o prefija.

• Implementación de recursividad.

Page 25: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Notación polaca (postfija)

• Para evaluar la expresión aritmética:

según la prioridad de los operadores y el uso de los paréntesis, se sigue el indicado con las flechas.

• Para eliminar esta dificultad, se hace una traducción de las expresiones aritméticas a notación postfija, que se llama también notación de cadena polaca (denominada así en honor del matemático polaco Lukasiewicsz, quién la originó).

Page 26: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Notación polaca (postfija)

• Esta notación tiene la ventaja de que las operaciones aparecen en el orden en que se efectúan realmente la evaluación.

• La idea básica detrás de la notación de cadenas polacas es que los operadores se escriben al final y no en medio de las expresiones. De manera que A + B se escribiría como A B +.

• En esta forma, el operador + se considera como una orden para sumar los valores de las dos variables que lo preceden inmediatamente.

Page 27: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Notación polaca (postfija)

• Un ejemplo puede ser:

• La clave de la traducción de notación infija a posfija

es la prioridad de los operadores: ( ), + -, * /, ^.

Page 28: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Notación postfija

• Reglas básicas para convertir expresiones infijas a postfijas:1. Si el elemento es un ‘ (‘ se coloca directamente en la pila de operadores.

2. Si el elemento es un ‘ )’ , los operadores de la pila se transfieren uno a uno, al extremo derecho de la expresión posfija hasta llegar a un ‘ (‘ . Este se saca pero no va a la salida.

3. Si el elemento localizado es una variable, se coloca inmediatamente en el extremo derecho de la expresión posfija que se estácreando.

4. Si el elemento es un operador y es de menor precedencia que el operador en la pila, el operador de la pila se saca y va a la salida, continuando de esta manera hasta encontrar un ‘ (‘ o hasta que el operador de la pila sea de menor precedencia. Cuando esto ocurre, el operador en turno se apila.

Page 29: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Conversión infija a postfija

• Ecuación cuadrática

• En infija

( b + ( b ^ 2 – 4 * a * c ) ^ ( 1 / 2 ) ) / ( 2 * a )

• En postfija

b b 2 ^ 4 a c * * - 1 2 / ^ + 2 a * /

Page 30: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Algoritmo para evaluar una expresión postfija

1. Implementar la pila

2. Repetir hasta encontrar el fin de la expresión

postfija

– Tomar un carácter.

– Si el carácter es un operando colocarlo en la pila.

– Si el carácter es un operador entonces sacar los dos

valores del tope de la pila (operando2 operando1),

aplicar el operador (operando1 operador operando2) y

colocar el resultado en el nuevo tope de la pila.

Page 31: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Recursividad

• Algoritmo para hallar el factorial de un número mediante pilasleer n;mientras n > 1

pila.apilar (n);n = n-1;

fin mientrasfactorial = 1;mientras pila no está vacía

factorial = factorial * pila.desapilar ();fin mientras

Page 32: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Encapsulación en pilas y colas

• Al igual que con las colas, la implementación de las

pilas suele encapsularse, es decir, basta con conocer

las operaciones de manipulación de la pila para poder

usarla, olvidando su implementación interna.

Page 33: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Colas

• Es un tipo de dato lineal con estructura FIFO (First

In, First Out), el primero que entra es el primero que

sale.

• Las colas son un subconjunto de las listas, en

donde las eliminaciones se dan al comienzo de la

lista y las inserciones al final.

• Los elementos se procesan en el orden como se

reciben (similar a la cola de impresión en redes).

Page 34: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Colas

• Operaciones básicas:

–– Crear la estructuraCrear la estructura

–– InsertarInsertar

–– EliminarEliminar

–– Obtener un elementoObtener un elemento

–– VacVacííarar

–– Mostrar los elementosMostrar los elementos

Page 35: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Aplicaciones de las colas

• Las colas, al igual que las pilas, resultan de aplicación habitual en muchos problemas informáticos.

• Su utilización es infinita, desde la simulación de una cola formada frente a un cajero automático, hasta la cola de impresión.

• Quizás la aplicación más común de las colas es la organización de tareas de un ordenador. Los procesos forman colas para la utilización de los recursos de un sistema computacional.

Page 36: Profesor: José Miguel Rubio L. - zeus.inf.ucv.clzeus.inf.ucv.cl/~jrubio/docs/2008-02/ICI 142/Seccion 7.pdf · • También son valiosas para las situaciones en las que ... • Son

Como manipular las estructuras de datoslineales

• Idealmente una estructura de datos debe ser

manipulada únicamente por procedimientos propios

(encapsulación).

– Ejemplo: Una lista requiere de un top, pop y un push

– La estructura de datos y sus primitivas de manejo

constituyen la estructura abstracta de datos (TDA)