Algoritmos y estructuras de datos Dr. Eduardo A. Rodríguez Tello Laboratorio de Tecnologías de Información Cinvestav Tamaulipas ertello@tamps.cinvestav.mx Cursos de inducción a la MCC Cinvestav Tamaulipas 2012 1
La computadora como herramienta para resolver problemas Un problema es una tarea a realizar Dadas sus características de tratamiento de información por medio de programas, la computadora es útil en la resolución de problemas Proceso deresolución deproblemas: En general Análisis del problema Desde el punto de vista de la Computación Análisis del problema Diseño de la solución Desarrollo de la solución Verificación y pruebas Diseño del programa para solucionar el problema Implementación (Programación) Verificación y pruebas Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 2
Ejemplo: el problema de ordenamiento Entrada: Una secuencia de n números a 1,a 2,...,a n Salida: Una permutación (reordenamiento) b 1,b 2,...,b n de la secuencia de entrada tal que b 1 b 2 b n Nota: los mismos elementos aparecen en a 1,a 2,...,a n y en b 1 1,,b 2 2,,...,b, n Ejemplo Entrada: 31,41,59,26,41,58 Salida: 26,31,41,41,58,59 Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 3
De los problemas a los programas PROBLEMA Algoritmos Estructuras de datos PROGRAMA Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 4
Algoritmos Algoritmo: procedimiento sistemático y bien definido, consistiendo de un grupo de instrucciones, para resolver un problema Un algoritmo puede verse como una función matemática: Toma un conjunto de datos de entrada. Estos datos son el conjunto de información necesaria para resolver un problema y que es manipulada por el algoritmo Genera un conjunto de datos de salida. Estos datos son la solución del problema Un problema puede tener muchos algoritmos Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 5
Algoritmo de ordenamiento por burbuja Repasar la secuencia Comparar cada par de elementos adyacentes Cambiarlos si no están en orden Hasta que haya una pasada sin cambios 31,41,59,26,41,58 58 1ª pasada 31,41,26,41,58,59 2ª pasada 31,26,41,41,58,59 3ª pasada 26,31,41,41,58,59 Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 6
Estructuras de datos Organización de los datos para obtener un rendimiento razonable en su memorización, tratamiento y recuperación Ejemplo: para el caso del problema de ordenamiento, los datos se pueden representar como una secuencia o lista La dificultad para resolver un problema radica en ocasiones en escoger la estructura de datos adecuada. La elección del algoritmo y de las estructuras de datos que manipulará estarán muy relacionadas Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 7
Temario I. Introducción II. Estructuras de datos estáticas y dinámicas a. Repaso de tipos de datos elementales b. Estructuras de datos estáticas: arreglos y estructuras c. Estructuras de datos dinámicas: apuntadores y listas ligadas III. Tipos de datos abstractos IV. Ordenamientos V. Búsquedas VI. Resumen Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 8
Repaso de tipos de datos elementales en C Tipo Ejemplo Tamaño Rango mínimo..máximomáximo en bytes char c 1 0..255 short 15 2 128..127 127 int 1024 2 32768..32767 unsigned int 42325 2 0..65535 long 262144 4 2147483648.. 2147483647 float 10.5 4 3.4*(10 38 ).. 3.4*(10 38 ) double 0.00045 8 1.7*(10 308 ).. 1.7*(10 308 ) long double 1e 8 8 Igual que double Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 9
Arreglos Secuencia de objetos del mismo tipo Declaración en C: <tipo> <nombre>[<tamaño>] Los datos almacenados pueden ser de cualquier tipo que se pueda definir en C Ejemplos: int c[5] = {1,2,3,4,5}; // Se inicializa int b[] = {1,2,3,4,5,6}; // Se puede omitir su tamaño b[0] b[1] b[2] b[3] b[4] b[5] 1 2 3 4 5 6 Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 10
Arreglos para representar cadenas de caracteres En C no existe el tipo «cadena»: se usan arreglos de tipo char, donde el caracter '\0' indica el fin de cadena Ejemplos: char c1[20] = {'H','o','l','a',0};,,,0}; char c2[20] = "Hola cadena"; Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 11
Arreglos de dos o más dimensiones Un arreglo 2D es conocido como matriz: int m1[2][3] = {{1,2,3},{2,2,1}}; {2 2 1}}; float m3[][4] = {{0.2, 1.1, 2.3, 3.1}, {1.1, 1.2, 1.3, 5.4}}; Es posible tener arreglos en 3 o más dimensiones int espacio[2][2][2]; int penta[2][3][2][3][4]; Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 12
Estructuras Colección de uno o más elementos denominados miembros, cada uno de los cuales puede ser de un tipo diferente Ejemplo: typedef struct { char nombre[30]; int edad; } Persona; Persona p; La notación. se usa para acceder a cada campo de la estructura p.nombre = "Francisco Mina"; p.edad = 24; Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 13
Apuntadores Un apuntador es una variable cuyo valor es la dirección de memoria de otra variable Declaración de apuntadores en C: <tipo de dato apuntado> *<identificador del apuntador> Ejemplos Apuntador a un dato de tipo tpoentero int *p_edad; Dos apuntadores a datos de tipo caracter char *cad1, *cad2; Apuntador a un dato de tipo punto flotante float *ptr2; Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 14
Apuntadores Para asignar una dirección de memoria a un apuntador se utiliza el operador de referencia & int edad = 50; int *p_edad = &edad; Para obtener el valor al que apunta un apuntador se utiliza el operador de indirección (*) *p_edad 1 2 50 edad 20 2 p_edad Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 15
Listas ligadas Colección de elementos (nodos) dispuestos uno a continuación del otro, cada uno de ellos conectado al siguiente por un apuntador, excepto el último Cada nodo contiene un valor (de cualquier tipo) y un apuntador al siguiente nodo Se distinguen dos apuntadores auxiliares: uno apuntando al primer nodo de la lista y otro al último Nodo a 1 a 2 a 3 a 4 a 5 ptr_primeroprimero Valor Apuntador ptr_ultimo Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 16
Declaración de tipos para listas ligadas en C a 1 a 2 a 3 a 4 a 5 ptr_primero ptr_ultimo Declaración del nodo struct nodo { typedef int elemento; elemento dato; nodo *siguiente; } Declaración de apuntadores nodo *ptr_primero; nodo *ptr_ultimo; Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 17
Operaciones en listas ligadas Inicializar una lista Comprobar si la lista está vacía Insertar un nodo en una lista Eliminari un nodo de una lista Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 18
Operaciones en listas ligadas Insertar un nodo: requiere obtener un nodo nuevo para después realizar dos operaciones con apuntadores a 1 a 2 a 3 a 4 a 5 a 2 Eliminari un nodo: se puede ejecutar con un cambio de apuntador a 1 a 2 a 3 a 4 a 5 Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 19
Tipos de listas ligadas Lista ligada simple Lista doblemente ligada Lista circular ligada Lista circular doblemente ligada Cursos de inducción a la MCC Estructuras de datos Cinvestav Tamaulipas 2012 20