GUÍA DE EJERCICIOS TIPOS ABSTRACTOS DE DATOS

Anuncio
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.
Descargar