Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10

3,212 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,212
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Aedii pilas colas_y_recursividad_teoria_sem07_a_sem10

  1. 1. Objetivos : <ul><li>Definición y clasificación de las pilas. </li></ul><ul><li>Implementación de pilas con vectores. </li></ul>Semana 07 Algoritmo y Estructura de Datos II
  2. 2. Pila : Colección de datos. Es una estructura de datos que permite almacenar datos del mismo tipo, en la cual en un extremo se puede insertar y eliminar elementos, llamado la parte superior de la pila o cima. A este tipo de estructura de datos se le conoce como LIFO (primero en entrar, último en salir). DEFINICIÓN ESTRUCTURA DE DATOS – Pilas PILAS
  3. 3. <ul><li>Utiliza una Estructura lineal para implementarla esta puede ser: </li></ul><ul><ul><li>Lista </li></ul></ul><ul><ul><li>Arreglo </li></ul></ul><ul><li>El acceso a la pila se hace a través de sus operaciones apilar (push) y desapilar (pop) </li></ul><ul><li>No se puede recorrer </li></ul>CARACTERISTICAS ESTRUCTURA DE DATOS – Pilas PILAS
  4. 4. OPERACIONES ESTRUCTURA DE DATOS – Pilas PILAS <ul><li>Agregar (apilar) </li></ul>Agrega un elemento a la pila. Pila empujada hacia abajo. Empujar (push). <ul><li>Eliminar (desapilar) </li></ul>Retira un elemento de la pila. Validación de la pila vacía. Retirar (pop).
  5. 5. ESTRUCTURA DE DATOS – Pilas PILAS Elemento Cima Apilar Desapilar D D REPRESENTACIÓN LIFO (primero en entrar, último en salir). A B C
  6. 6. ESTRUCTURA DE DATOS – Pilas REPRESENTACIÓN DE UNA PILA
  7. 7. IMPLEMENTACIÓN ESTRUCTURA DE DATOS – Pilas PILAS UTILIZANDO VECTORES A B C i=7 dato[0] dato[2]  dato CIMA (Índice último elemento ingresado) PILA VACÍA índice -1 dato[1] A B C
  8. 8. IMPLEMENTACIÓN ESTRUCTURA DE DATOS – Pilas PILAS UTILIZANDO VECTORES <ul><li>public class Pila { </li></ul><ul><li>public int cima ; </li></ul><ul><li>private char dato[] ; </li></ul><ul><li>public Pila ( int n ) { </li></ul><ul><li>dato=new char[n] ; </li></ul><ul><li>cima = -1 ; </li></ul><ul><li>} </li></ul><ul><li>public int tamaño( ) { </li></ul><ul><li>return cima + 1 ; </li></ul><ul><li>} </li></ul><ul><li>public boolean estaLleno ( ) { </li></ul><ul><ul><li>if ( cima+1==dato.length ) </li></ul></ul><ul><ul><li>return true ; </li></ul></ul><ul><ul><li>else </li></ul></ul><ul><ul><li>return false ; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>//… </li></ul></ul>dato PILA VACÍA índice -1 CIMA A B C
  9. 9. IMPLEMENTACIÓN ESTRUCTURA DE DATOS – Pilas PILAS UTILIZANDO VECTORES x [-1] PILA VACÍA índice -1 <ul><li>//… </li></ul><ul><li>public char ultimo(){ </li></ul><ul><ul><li>return datos[cima] ; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>public void apilar (char d) { </li></ul></ul><ul><li>if (cima<dato.length){ </li></ul><ul><li>cima = cima + 1 ; </li></ul><ul><li>dato[cima] = d; </li></ul><ul><li>} </li></ul><ul><ul><li>} </li></ul></ul><ul><li>public String desapilar ( ) { </li></ul><ul><li>if ( cima < 0 ) { </li></ul><ul><li>return “pila vacía” ; </li></ul><ul><li>} </li></ul><ul><li>dato [cima] = ‘ ’ ; </li></ul><ul><li>cima = cima - 1 ; </li></ul><ul><li>return “elemento eliminado” ; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>A B C
  10. 10. IMPLEMENTACIÓN ESTRUCTURA DE DATOS – Pilas PILAS UTILIZANDO LISTAS x [-1] 1 2 3 fin C B A CIMA PILA Índice último elemento ingresado PILA VACÍA índice -1 A B C
  11. 11. Objetivos : <ul><li>Definición de las colas. </li></ul><ul><li>Características de las colas </li></ul><ul><li>Implementación de cola usando lista </li></ul>Semana 08 Algoritmo y Estructura de Datos II
  12. 12. <ul><li>Cola: Colección de datos. </li></ul><ul><li>Es una estructura de datos que permite almacenar datos del mismo tipo, los datos se insertan al final al cual se le conoce como ultimo y se procesan primero los que se encuentran al inicio </li></ul><ul><li>Una cola es una estructura FIFO, es decir el primero en entrar, es el primero en salir. First In, First Out(FIFO ) </li></ul><ul><li>Ejemplo </li></ul><ul><li>La cola del autobús </li></ul><ul><li>La cola de la impresora </li></ul>DEFINICIÓN ESTRUCTURA DE DATOS – Colas COLAS
  13. 13. <ul><li>Utiliza una Estructura lineal para implementarla esta puede ser: </li></ul><ul><ul><li>Lista </li></ul></ul><ul><ul><li>Arreglo </li></ul></ul><ul><li>El acceso a la cola se hace a través de sus operaciones por un extremo se inserta y por el otro se retira. No se puede recorrer </li></ul>CARACTERISTICAS ESTRUCTURA DE DATOS – Colas COLAS
  14. 14. ESTRUCTURA DE DATOS – Colas COLAS ultimo primero Poner Sacar D A REPRESENTACIÓN FIFO (primero en entrar, primero en salir). A B C
  15. 15. IMPLEMENTACIÓN ESTRUCTURA DE DATOS – Colas COLAS A B C ultimo primero D FIFO (primero en entrar, primero en salir). UTILIZANDO VECTORES ALGORITMO InsertarCola (acolar) PARAMETRO: dato INICIO SI ( ultimo < max - 1 ) ENTONCES ultimo = ultimo + 1 cola [ultimo] = dato SI ( primero = -1) ENTONCES primero = 0 FINSI FINSI FIN max cola [ ]
  16. 16. IMPLEMENTACIÓN ESTRUCTURA DE DATOS – Colas COLAS B C ultimo primero A FIFO (primero en entrar, primero en salir). UTILIZANDO VECTORES ALGORITMO EliminarCola (decolar) RETORNO: dato INICIO TEXTO dato = “” SI ( primero <> -1 ) ENTONCES dato = cola [primero] cola [primero] = “” SI ( primero = ultimo ) ENTONCES primero = -1 ultimo = -1 SINO primero = primero + 1 FINSI SINO dato = “cola vacía” FINSI RETORNAR dato FIN max cola [ ]
  17. 17. IMPLEMENTACIÓN ESTRUCTURA DE DATOS – Colas COLAS B C ultimo primero FIFO (primero en entrar, primero en salir). UTILIZANDO VECTORES Para hacer un uso mas eficiente de la memoria disponible (definido en el arreglo) se puede tratar a la cola como una estructura circular. Es decir, el elemento anterior al primero es el último. max cola [ ]
  18. 18. IMPLEMENTACIÓN ESTRUCTURA DE DATOS – Colas COLAS A B C ultimo primero D FIFO (primero en entrar, primero en salir). UTILIZANDO VECTORES ALGORITMO InsertarColaCircular (acolar) PARAMETRO: dato RETORNO: estado INICIO NUMERO estado = 0 SI ((ultimo = max - 1 AND primero = 0) OR (ultimo + 1 = primero)) ENTONCES estado = -1 SINO SI ( ultimo = max -1) ENTONCES ultimo = 0 SINO ultimo = ultimo + 1 FINSI cola [ultimo] = dato SI ( primero = -1 ) ENTONCES primero = 0 FINSI FINSI RETORNAR estado FIN max cola [ ]
  19. 19. IMPLEMENTACIÓN ESTRUCTURA DE DATOS – Colas COLAS B C ultimo primero A FIFO (primero en entrar, primero en salir). UTILIZANDO VECTORES max cola [ ] Desarrolle el algoritmo en pseudocódigo y el código en lenguaje de programación Java del método eliminarColaCircular (decolar) para una cola.
  20. 20. Objetivos : <ul><li>Definición de recursividad </li></ul><ul><li>Recursividad en la programación </li></ul><ul><li>Ejemplos de recursividad </li></ul><ul><li>Métodos Recursivos </li></ul><ul><li>Recursividad en listas </li></ul>Semana 10 – sesión 01 Algoritmo y Estructura de Datos II
  21. 21. Un algoritmo recursivo es un algoritmo que expresa la solución de un problema en términos de una llamada a sí mismo. La llamada a sí mismo se conoce como llamada recursiva. Ver : http://es.wikipedia.org/wiki/Recursividad y http://es.wikipedia.org/wiki/Algoritmo_recursivo RECURSIVIDAD RECURSIVIDAD <ul><li>En la programación utilizamos la recursividad como una técnica de programación llamada divide y venceras , y es la base para algoritmos de gran importancia y es parte fundamental de la programación dinámica. </li></ul><ul><li>La recursividad la encontramos en variables recursivas y métodos recursivos. </li></ul><ul><li>EJEMPLOS: </li></ul><ul><li>Factorial n ! = n × ( n -1)! </li></ul><ul><li>Sucesión de Fibonacci f ( n ) = f ( n -1) + f ( n -2) </li></ul><ul><li>http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci </li></ul><ul><li>Números de Catalan C (2 n , n )/( n +1) </li></ul><ul><li>http://es.wikipedia.org/wiki/Numeros_de_Catalan </li></ul><ul><li>Las Torres de Hanoi http://es.wikipedia.org/wiki/Torres_de_Hanoi </li></ul><ul><li>Función de Ackermann http://es.wikipedia.org/wiki/Funci%C3%B3n_de_Ackermann </li></ul>DEFINICIÓN
  22. 22. <ul><li>Se puede utilizar la recursividad como una alternativa a la iteración. </li></ul><ul><li>Una solución recursiva es normalmente menos eficiente en términos de tiempo de computadora que una solución iterativa debido a las operaciones auxiliares que llevan consigo las llamadas suplementarias a las funciones. </li></ul><ul><li>La solución recursiva muchas veces permite a los programadores especificar soluciones naturales, que en otros casos sería difícil de resolver. </li></ul>RECURSIVIDAD EN LA PROGRAMACIÓN <ul><li>Se debe consideran dentro de los métodos recursivos lo siguiente: </li></ul><ul><li>Parámetros </li></ul><ul><li>Condición antes de invocarse </li></ul><ul><li>Debe tener un fin </li></ul>MÉTODOS RECURSIVOS RECURSIVIDAD
  23. 23. Función recursiva para calcular el factorial de un número entero: n! = n * (n-1) * (n-2) * ... * 1 No se puede calcular el factorial de números negativos, y el factorial de cero es 1, de modo que una función bien hecha para cálculo de factoriales debería incluir un control para esos casos: EJEMPLOS DE RECURSIVIDAD Estado base Estado recursivo ANÁLISIS DE ESTADOS n! = 1 si n = 0 n * (n – 1)! si n > 0 RECURSIVIDAD
  24. 24. Llamada al método recursivo EJEMPLOS DE MÉTODOS RECURSIVOS public int factorial ( int n ) { if ( n == 1 ) return 1 ; else return n * factorial ( n-1 ) ; } Desarrollar un método recursivo que permita calcular el factorial de un número entero: i nt x = factorial ( 5 ) ; Método recursivo: RECURSIVIDAD
  25. 25. EJEMPLOS DE RECURSIVIDAD Función recursiva para calcular la potencia de un número “a” elevado a un número “b”: a b = a * a b-1 * a b-2 * ... * a 0 Es importante indicar que un número elevado a cero es 1. Estado base Estado recursivo ANÁLISIS DE ESTADOS a b = 1 si b = 0 a * a b-1 si b > 0 RECURSIVIDAD
  26. 26. EJEMPLOS DE MÉTODOS RECURSIVOS Llamada al método recursivo public int potencia ( int a, int b ) { if ( b == 0 ) return 1 ; else return a * potencia ( a, b-1 ) ; } Desarrollar un método recursivo que permita calcular la potencia de un número elevado a otro número: Método recursivo: i nt x = potencia ( 3,2 ) ; RECURSIVIDAD
  27. 27. Función recursiva para calcular la suma y la cantidad de dígitos de un número: Análisis : n=125  125 /10  cociente 12, resto = 5 12 /10  cociente 1, resto = 2 1 /10  cociente 0, resto = 1 0 /10  cociente 0, resto = 0 EJEMPLOS DE RECURSIVIDAD RECURSIVIDAD
  28. 28. Función recursiva para calcular la suma de dígitos de un número: EJEMPLOS DE RECURSIVIDAD Estado base Estado recursivo ANÁLISIS DE ESTADOS suma (n) = 0 si n = 0 n%10 + suma (n/10) si n > 0 Función recursiva para calcular la cantidad de dígitos de un número: Estado base Estado recursivo ANÁLISIS DE ESTADOS cant (n) = 0 si n = 0 1 + cant (n/10) si n > 0 RECURSIVIDAD
  29. 29. EJEMPLOS DE MÉTODOS RECURSIVOS Desarrollar un método recursivo que permita calcular la suma de los dígitos de un número: Llamada al método recursivo Método recursivo: i nt rpta = suma ( 125 ) ; public int suma ( int n ) { if ( n == 0 ) return 0 ; else return n%10 + suma ( n/10 ) ; } RECURSIVIDAD
  30. 30. EJEMPLOS DE MÉTODOS RECURSIVOS Desarrollar un método recursivo que permita calcular la cantidad de dígitos de un número: Llamada al método recursivo Método recursivo: i nt rpta = cant ( 125 ) ; public int cant ( int n ) { if ( n == 0 ) return 0 ; else return 1 + cant ( n/10 ) ; } RECURSIVIDAD
  31. 31. Objetivos : <ul><li>Recursividad en listas </li></ul>Semana 10 – sesión 02 Algoritmo y Estructura de Datos II
  32. 32. El otro campo donde la recursividad es muy útil es el procesamiento de lista. Siempre que podamos evaluar si una lista esta vacía, lo cual permitiría especificar el estado base y finalizar el método. Para el desarrollo de métodos recursivos en listas se utilizará una lista de números, tal y como se muestra en el siguiente ejemplo: RECURSIVIDAD EN LISTAS 5 8 12 cab null a : Lista RECURSIVIDAD EN LISTAS
  33. 33. EJEMPLOS DE RECURSIVIDAD Llamada al método recursivo int total = a.cantidad ( a.cab ) ; Método recursivo: public int cantidad ( Elemento p ) { if ( p == null ) return 0 ; else return 1 + cantidad ( p.sig ) ; } Desarrollar un método recursivo de la clase Lista que permita calcular la cantidad de números almacenados en la lista: RECURSIVIDAD EN LISTAS
  34. 34. EJEMPLOS DE RECURSIVIDAD Llamada al método recursivo int total = a.cantidadPares ( a.cab ) ; Método recursivo: public int cantidadPares ( Elemento p ) { if ( p == null ) return 0 ; else if ( p.getNumero ( ) % 2 == 0 ) return 1 + cantidadPares ( p.sig ) ; else return 0 + cantidadPares ( p.sig ) ; } Desarrollar un método recursivo de la clase Lista que permita calcular la cantidad de números pares almacenados en la lista: RECURSIVIDAD EN LISTAS
  35. 35. EJEMPLOS DE RECURSIVIDAD Desarrollar un método recursivo de la clase Lista que permita elaborar un listado con todos los números almacenados: Llamada al método recursivo String lista = a.listado ( a.cab ) ; Método recursivo: public String listado ( Elemento p ) { if ( p == null ) return “” ; else return p.getNumero ( ) + “n” + listado ( p.sig ) ; } RECURSIVIDAD EN LISTAS
  36. 36. EJEMPLOS DE RECURSIVIDAD Desarrollar un método recursivo de la clase Lista que permita ingresar datos al final de la lista: Llamada al método recursivo a.cab = a.agregarFinal ( a.cab , 15 ) ; Método recursivo: public Elemento agregarFinal ( Elemento p, int num ) { if ( p == null ) p = new Elemento ( num ) ; else p.sig = agregarFinal ( p.sig, num ) ; return p ; } RECURSIVIDAD EN LISTAS
  37. 37. ENUNCIADO <ul><li>Del ejercicio anterior, desarrollar los siguientes métodos: </li></ul><ul><li>Insertar un número en la lista en la posición que le corresponda de tal forma que la lista siempre permanezca ordenada en forma ascendente. </li></ul><ul><li>Insertar un número en la lista en la posición que le corresponda de tal forma que la lista siempre permanezca ordenada en forma ascendente. Si el número ya existe no se deberá insertar en la lista. </li></ul>RECURSIVIDAD EN LISTAS
  38. 38. Ejercicio 1 Caso Pilas Desarrolle un programa que permita almacenar números reales ingresados desde el teclado de la computadora en una estructura de datos de tipo Pila, implementada con un arreglo. Utilice una clase para controlar a la pila y otra para controlar a la aplicación. RECURSIVIDAD EN LISTAS

×