UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA ELO320 Estructuras de Datos y Algoritmos 25/10/2005 Segundo Certamen Pregunta 1 (30 puntos) : a) Desarrolle las funciones buscar( ) e insertar( ) para almacenar elementos con una clave de tipo float usando una tabla hash abierta. Asuma que tiene una función int hash(float) y que el tamaño de la tabla de hash es B. b) Calcule (paso a paso) la complejidad T( ) y Θ( ) de su funciones buscar( ) e insertar( ). c) Describa en sus palabras como se usa una relación de recurrencia para calcular la complejidad. Como ejemplo calcule la solución de: T(n) = T(n/2) + n, con T(1)= 2 n Puede usar: ∑ 2i = 2 (n + 1) −2 i=1 Pregunta 2 (20 puntos) : K C B N E a) Indique los factores de balance de cada nodo. b) Dibuje el árbol AVL después de la inserción de un nodo con valor A. Muestre paso a paso todas las operaciones que se efectúan para actualizar el árbol AVL. c) Habiendo ya insertado el nodo con valor A. Dibujar el árbol AVL después de la eliminación del nodo con valor B. Muestre paso a paso todas las operaciones que se efectúan para actualizar el árbol AVL. d) Dibuje el árbol AVL después de la inserción de un nodo con valor D. Muestre paso a paso todas las operaciones que se efectúan para actualizar el árbol AVL. 25-10-2005 1 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA ELO320 Estructuras de Datos y Algoritmos Pregunta 3 (30 puntos) : Usando este nodo: typedef struct moldenodo { char clave; struct moldenodo *left; struct moldenodo *right; } *pnodo, nodo; a) Diseñe una función recursiva que cuente los nodos en un árbol binario con valores mayores que un valor dado y que imprima esos nodos a la pantalla: int ContarNodos (pnodo t, char valor); b) Diseñe una función iterativa que en un árbol binario busque el nodo correspondiente a la clave y divida el árbol en dos desde ese nodo. A la salida se actualizan los siguientes parámetros: puntero al nodo que contiene la clave, un puntero al subárbol izquierdo desde el nodo con la clave y un puntero al subárbol derecho desde el nodo con la clave. El árbol debe retornar 0 si encuentra el nodo y 1 si no lo encuentra: int DividirArbol(char clave, pnodo t, pnodo *pClave, pnodo *pIzq, pnodo *pDer); Pregunta 4 (20 puntos): Para una cola de tamaño 5, con las siguientes variables globales: cabeza, cola, encolados. Considere la siguiente secuencia de operaciones: Indice Valor Put 13 0 Put 13 1 Put 4 2 Put 8 3 4 Get Put 7 Put 9 Put 9 Get Put 9 a) Indique el valor de las variables globales antes y después de cada operación. b) Muestre el contenido final de la cola después de realizadas todas las operaciones anteriores. 25-10-2005 2