Estructuras de Datos GUÍA DE EJERCICIOS 1 TIPOS ABSTRACTOS DE DATOS 1. Implementar la función Suma(S) que retorna la suma de los enteros contenidos en un stack S, sin modificarlo. 2. Implementar la función Ordenar(S1, S2) que genera un stack S2, ordenado, a partir de un stack S1, desordenado, utilizando un stack auxiliar S0. 3. Implementar la función Ultimo(S) que elimina y retorna el último elemento presente en S, sin afectar el orden de los restantes elementos. 4. Un polinomio se representa mediante dos stacks C, E que contienen los coeficientes (enteros), el primero, y los exponentes, el segundo. Los stacks están bien formados, es decir, tienen la misma cantidad de elementos y existe una correspondencia posicional entre coeficiente y exponente para cada término del polinomio. Implementar la función Derivar(C, E) que genere en los stacks C y E, respectivamente, los coeficientes y los exponentes del polinomio derivado. 5. Implementar la función Invertir(S) que invierte el orden de los elementos de un stack S, utilizando sólo una variable auxiliar entera x y la función Ultimo del problema 3. 6. Implementar la función Invertir(S) que invierte el orden de los elementos contenidos en un stack S, utilizando una cola auxiliar C. 7. Para representar la forma binaria de un número entero no negativo se utiliza un stack de modo que el dígito del extremo derecho se sitúa en el top y el del extremo izquierdo en el bottom. Implementar la función Decimal(S) que retorna el valor decimal del número representado en un stack S, sin modificar su contenido. El tipo base de S es el subrango 0..1. 8. En una cola Q es posible advertir la sistemática repetición consecutiva de ciertos valores. Sin embargo, para efectos prácticos, tal repitencia no tiene validez alguna. Implementar la función Reducir(Q) que reduce a una la ocurrencia de los elementos consecutivamente repetidos en una cola Q, sin alterar la distribución original. 9. Una cola refleja es una cola cuyos elementos son los mismos de una cola directa, pero en orden inverso. Implementar, recursivamente, la función Reflejar(R, D) que concluya con las versiones directa y refleja de una cola. 10. En un sistema computacional multiusuario, los procesos en espera por la asignación del procesador se encuentran en una cola Q. El sistema tiene la calidad de estable, es decir, que la cantidad de unidades de tiempo que cada proceso requiere para ejecutarse se conoce anticipadamente. Luego, el tipo base de la cola Q es una cantidad de unidades de tiempo. Iniciada la operación del sistema, se asigna el procesador al primer proceso durante una unidad de tiempo, es decir, se saca de la cola y, transcurrida la unidad, retorna a la cola (si no ha completado su ejecución) con su cantidad de unidades disminuida en uno. Omitiendo los tiempos de transición y suponiendo que existe una cantidad constante de procesos en espera, implementar la función Terminados(Q, t) que determina el número de procesos que han abandonado la cola Q, por haber completado su ejecución, al concluir la t-ésima unidad de tiempo. Estructuras de Datos 2 11. Se desea alterar la ubicación original de los elementos contenidos en una cola C, de modo que estos queden ordenados ascendentemente. Implementar la función Reubicar(C) que consiga el efecto descrito utilizando un heap auxiliar H. 12. Implementar la función SortHeap(A,m) que ordena, ascendentemente, un arreglo A de m números naturales, utilizando un heap auxiliar H. 13. Implementar, recursivamente, la función Impares(H) que elimina todos los elementos de ordinalidad par existentes en un heap H de números naturales, es decir, los elementos segundo, cuarto, sexto, etc. 14. Implementar, recursivamente, la función Kaesimo(H, k) que elimina y retorna el k-ésimo elemento, según el orden de prioridades, contenido en un heap H, sin afectar la presencia de los restantes elementos. Si H tiene menos de k elementos, se deberá retornar el valor cero. Por ejemplo, si H = 7 ( 21 ( 87 , 74 ) , 43 ( 62 , 59 ) ) entonces el cuarto elemento (k = 4) es 59. 15. Definición: un HeapAbb es, al mismo tiempo, tanto un Heap como un Abb, si se acepta la existencia de valores repetidos. Establecer todas las condiciones necesarias para que un HeapAbb completo cumpla con la definición. 16. Se dispone de dos Abb’s R, T. Implementar la función Unir(R, T), correspondiente a la operación R = R T. T deberá quedar vacío. 17. Tres conjuntos de números enteros P, Q, R, se representan mediante tres Abb’s. Implementar la función Inter(P, Q, R), correspondiente a la operación R = P Q. P y Q no deben ser modificados. 18. Implementar la función Swap(T1, T2), que intercambia los contenidos de dos Abb’s T1, T2. 19. A partir de un árbol Abb no vacío T, implementar la función Separar(T, I, R) que genere dos Abb’s: I con los nodos del subárbol izquierdo de T y R con los nodos restantes. T deberá quedar vacío. 20. Se dispone de un árbol AVL A, con subárboles izquierdo L y derecho R, de modo que: A = 36 ( L, R ), con L = 18 ( 9, 27 ) y R = 81 ( 54 ( 45, 72), 90 ) Si sólo se existen los operadores S+(T) y S (T), correspondientes a las rotaciones simples, tanto positiva como negativa, sobre cualquier AVL T, mostrar en forma gráfica la aplicación del proceso de recuperación del carácter de árbol balanceado por altura de A, después de insertar un nodo con clave k = 63. Justificar adecuadamente.