Vector Dinámico

 

1.- Escriba una función que elimina el último bloque de memoria si no es necesario después de haber borrado un elemento. Habrá un parámetro que nos indicará el nuevo número de elementos del vector.

 

2.- Haga una función que a partir del vector dinámico genere otro de enteros que contenga los primeros n números de la sucesión de Fibonacci.

 

3.- Haga una función que a partir del vector dinámico genere otro de enteros que contenga los factoriales de los n primeros números del vector.

 

4.- Cree una función que dado un vector de enteros positivos y negativos, construya otro vector a partir de los elementos negativos del primero de manera que este se quede sólo con los positivos.

 

5.- Implemente una función que nos devuelva el mínimo de un vector dinámico.

 

6.- Escriba una función que dado un valor nos devuelva los elementos mayores de ese valor dentro del vector dinámico.



Polinomio

 

1.- Implemente un método que nos devuelva un polinomio con la derivada de un polinomio dado.

 

2.- Implemente un método que nos devuelva un polinomio con la integral de un polinomio dado.

 

3.- Construya un procedimiento que nos diga si un polinomio está o no simplificado, es decir, si no existen 2 o más términos con el mismo grado.

 

4.- Escriba una función que se le pase un polinomio de segundo grado con raices reales y devuelva ambas.

 

5.- Escriba un procedimiento para dividir 2 polinomios, el resultado serán 2 nuevos polinomios, cociente y resto, donde el resto (si no es 0) tiene menor grado que el cociente.



Listas

 

1.-  Haga una función que nos diga el número de veces que un elemento se encuentra en una lista (hacerlo también recursivo).

 

2.- Implemente una función que nos compare 2 listas (tienen los mismos elementos, hacerlo también recursivo).

 

3.- Implemente una función para mezclar 2 listas (suponiendo que las listas están ordenadas de alguna manera).

 

4.- Escriba una función que invierta el contenido de una lista.

 

5.- Escriba una función que nos diga si la lista está ordenada ascendentemente según una relación de orden determinada.

 

6.- Escriba una función que tome una lista y 2 enteros y devuelva el trozo de lista comprendido entre ambos.

 

7.- Implementar un método que borre de una lista todos los elementos que sean iguales a uno dado (hacerlo también recursivo).

 

8.- Modificar las implementaciones de lista para que implementen una lista ordenada, es decir, una lista, donde los elementos se inserten de forma ordenada.

 

9.- Construir una función recursiva  que sume los elementos de una lista de enteros.

 

10.- Construir una función que imprima los elementos de una lista en orden inverso a partir de una posición dada.

 

11.- Calcular el elemento de una lista que aparece más veces repetido.

 

12.- Construya una función que nos devuelva una lista con los elementos comunes de 2 listas pasadas como argumento

 

13.- Hacer un TDA lista, donde los elementos estén ordenados por la frecuencia de acceso a los mismos en orden creciente.

 

14.- Escriba una función que divida una lista en otras 2, de modo que los elementos de las posiciones pares estén en una y las impares en la otra.



Pilas

 

1.- Especificar una función que genere la inversa de una pila (hacerla también recursiva).

 

2.- Realice un TDA pila a partir del TDA vector dinámico.

 

3.- Escriba una función divide pila que tome una pila y un número que indica en cuántas partes dividiremos la pila, cada una de las pilas divididas las devolveremos en una lista.

 

4.- Escriba una función que construya una pila a partir de una lista de pilas.

 

5.- Especificar una función que calcule el número de elementos de una pila.

 

6.- Escriba una función que calcule el elemento del fondo de la pila.

 

7.- Implementar una función que nos mezcle los elementos de 2 pilas, desde el fondo a la cima de la pila.

 

8.- Diseñar un procedimiento que copie una pila en otra (hacerlo también recursivo).

 

9.- Diseñar un procedimiento que elimine el elemento n-ésimo de una pila.

 

10.- Realizar un método recursivo que nos busque un elemento en una pila.

 

11.- Realizar un método recursivo que compare 2 pilas.

 

12.- Implementar el TDA pila usando un par de colas.



Colas

 

1.- Implementar una función que nos devuelva el último elemento de una cola.

 

2.- Implementar una función que produzca la inversa de una cola (también de forma recursiva).

 

3.- Hacer una función que nos concatene 2 colas, es decir, coloque los elementos de una al final de la otra.

 

4.- Implementar el TDA cola usando un par de pilas.

 

5.- Implementar el TDA cola usando el TDA vector dinámico.

 

6.- Escribir una función que sea el operador <, de tal manera que una cola es < que otra si contiene menos elementos.

 

7.- Realizar un método recursivo que nos busque un elemento en una cola.

 

8.- Realizar una función que  nos compare 2 colas (también de forma recursiva).

 

9.- Realizar un método recursivo que nos copie una cola en otra.



Árbol Binario

 

1.- Hacer una función que  nos calcule la frontera de un árbol, es decir, la lista formada por los elementos de las hojas tomados de izquierda a derecha.

 

2.- Calcular la talla de un árbol, o sea, el número de nodos de la rama más larga.

 

3.- Calcular el número de nodos de un árbol (hacerlo recursivo también).

 

4.- Calcular el número de hojas de un árbol (hacerlo recursivo también).

 

5.- Hacer una función para saber si un árbol es completo.

 

6.- Se dice que un árbol binario es zurdo si es el árbol vacío o una hoja, o bien si sus hijos son ambos zurdos y más de la mitad de sus descendientes son xizquierdos, implementar una función recursiva que nos diga si un árbol binario es zurdo o no.

 

7.- Se dice que la distancia entre 2 nodos es la longitud del camino que los une, y el diámetro del árbol es la máxima distancia sobre todos los pares de nodos, desarrollar una función para averiguar el diámetro de un árbol binario.

 

8.- Haga una función tal que dados 2 árboles indique si todos los elementos de uno están en el otro, no deben estar necesariamente en las mismas posiciones.

 

9.- Haga una función que nos realice el recorrido en anchura de un árbol binario.

 

10.- Escriba una función que calcule el número de niveles de árbol.

 

11.- Escriba una función que nos diga si un árbol está equilibrado, la función debe devolver un registro con 2 campos, un campo que nos indique si está o no equilibrado el árbol y otro que nos diga la diferencia de altura entre los subárboles izquierdo y derecho.

 

12.- Realizar una función recursiva que nos diga si 2 árboles son iguales.

 

13.-  Construya un procedimiento el cual le entre una lista de nodos y construya todos los posibles árboles binarios, por ejemplo, con 4 nodos podemos obtener 14 árboles distintos.

 

14.- Diseñe una función que dado el recorrido del árbol en preorden e inorden nos de el recorrido en postorden.

 

15.- Haga una función no recursiva que nos de el recorrido de un árbol binario en preorden.

 

16.- Haga una función no recursiva que nos de el recorrido de un árbol binario en inorden.

 

17.- Haga una función no recursiva que nos de el recorrido de un árbol binario en postorden.

 

18.- Implemente una función que dado un nodo del árbol nos devuelva el camino que hay desde la raíz hasta ese nodo.

 


19.- Implemente una función que nos diga si un árbol binario es homogéneo, o sea, todos los nodos, excepto las hojas, tienen el mismo grado (hacerla recursiva también).



Árbol Binario de Búsqueda (ABB)

 

1.- Escribir una función que ordene una lista de elementos distintos usando como estructura auxiliar un abb.

 

2.- Realice una función tal que dada una lista obtenga un abb  a partir de ella.

 

3.- Realice una función tal que dado un abb obtenga una lista ordenada a partir de él.

 

4.- ¿ Bajo que condiciones puede ser un árbol abb y apo simultáneamente ?.



Árbol Parcialmente Ordenado (APO)

 

1.- Diseñe una función que elimine el elemento i en el heap y restaure las propiedades del heap de la lista resultante más pequeña.

 

2.- Construya el TDA apo a partir del TDA pila.

 

3.- Diseñar el TDA cola con prioridad a partir del TDA apo.



Grafos

 

1.- Implementar una función que nos diga el número de arcos del grafo.

 

2.- Diseñar una función para averiguar la arista de tamaño mínimo del grafo.

 

3.- Hacer una función que nos diga el número de nodos conectados con al menos otros 2 nodos del grafo.

 

4.- Hacer una función para hallar el número de nodos de los cuales no sale ningún arco pero si le llega por lo menos uno.

 

5.- Realizar un procedimiento que imprima un grafo.

 

6.- Construir una función que nos diga el número de componentes conexas de un grafo.

 

7.- Construir un procedimiento que nos devuelva el grado de entrada de un nodo.

 

8.- Construir un procedimiento que nos devuelva el grado de salida de un nodo.

 

9.- Hacer una función que nos diga si un grafo es de Euler, o sea, existe un camino Euleriano (que incluya a todos los arcos del grafo).

 

10.- Escribir un procedimiento para recorrer un grafo en profundidad.

 

11.- Escribir un procedimiento para recorrer un grafo en anchura.

 

12.- Diseñar una función que nos diga si un grado es cíclico.

 

13.- Construir una función para obtener un orden topológico de los nodos de un grafo basándonos en el recorrido en profundidad.

 

14.- Implementar una función recursiva que nos de el camino (si existe) entre 2 vértices cualquiera de un grafo.

 

15.- Realizar una función basada en el recorrido en profundidad que nos diga si un grafo es realmente un árbol, en el caso de que lo sea debe devolver la raíz.

 

16.- Diseñe una función tal que dado un nodo del grafo v, nos devuelva una lista con los nodos accesibles desde v, los nodos de esta lista están ordenados de tal forma que para cada par de nodos vi y vj, vi está antes que vj, si y sólo si, la longitud del camino más corto de v a vi es menor o igual a la del de v a vj.