Você está na página 1de 16

Gua semestral

INF2240-01 Estructura de datos


Escuela de Ingeniera Informtica
Pontificia Universidad Catlica de Valparaso
Mellado Silva | rafael.mellado@ucv.cl
Rafael

1 Presentacin
A continuacin, se presenta una serie de ejercicios, los cuales son responsabilidad del alumno desarrollarlos en su totalidad
de forma personal y como trabajo de estudio. Desarrolle un algoritmo para cada una de las siguientes situaciones:

2 Algoritmos Simples
1. Desarrolle un programa que dado un numero (entero) por el usuario muestre por pantalla todos los divisores de dicho
nmero, por ejemplo, si se ingresa el nmero 2, sus divisores son el 1 y el 2.
2. Desarrollar un programa que dada una cantidad de nmeros (n, con ciclos iterativos de peticin y que terminan cuando
el usuario ingrese 0) guarde el impar mayor y el par menor y luego los muestre por pantalla. Para saber si es par o impar
deber desarrollar una funcin que arroje 0 si es par y 1 en caso contrario.
3. Dada la Longitud de dos lados de un tringulo cualquiera, encuentre y muestre por pantalla la longitud del tercer lado.
4. Hacer un programa que dado un nmero encuentre, si es posible, su equivalente en potencias. Por ejemplo: Para el 8
el equivalente seria 2**3.
5. Desarrolle un programa que dados 3 nmeros enteros, busque el mnimo comn mltiplo (M.C.M) entre ellos y lo
muestre por pantalla
6. Realice un programa que reciba una frase o texto ingresados por el usuario y que cuente la cantidad de coincidencias
para cada letra. Ej: Marta -> m=1; a=2; r=1; t=1.
7. Desarrolle un programa que calcule la siguiente sumatoria, con n y H ingresados por el usuario. La sumatoria se
calcular siempre y cuando el resultado no exceda H (ingresado), de manera que si el ndice K no pudo llegar hasta n ,el
programa mostrara hasta qu ndice lleg (antes de exceder el valor de H) y calcular el rango de error (diferencia) entre
el verdadero resultado de H y el que ha sido ingresado. **recuerde que el ndice n ingresado por el usuario tiene que ser
positivo y mayor que k de la misma manera que H, Haga las validaciones correspondientes.

8. Tenemos que un nmero Perfecto es cuando dicho nmero es resultado de la suma de sus divisores menos de el
mismo. Implemente una funcin de bsqueda de los divisores y Dado un numero entero positivo n ingresado por el
usuario (de 1 a 10) buscar la cantidad hasta n de nmeros perfectos.
9. Hacer un programa que calcule la siguiente expresin, dados n (numero entero positivo), b no mayor que 7 y c no
mayor que 3.

10. Escriba un programa que dndole el importe exacto de una cantidad te indica el mnimo nmero de monedas que
podras tener. Las monedas son de 5,10,50,100,500.

3 Arreglos:
1. De una lista de 50 nmeros enteros ingresados en un arreglo por el usuario (debe realizar llenado del arreglo), y un
nmero n, buscar y mostrar por pantalla cuantos nmeros en la lista de nmeros del arreglo son mltiplos del nmero n.
2. Desarrolle un programa que cuente la cantidad de letras ingresadas en un arreglo, estas deben ser contadas de forma
agrupadas segn el orden de la palabra y sus coincidencias. Ejemplo: arcoiris=arrcoiis, entonces tendramos slo 6
letras, tomando en cuenta que el arreglo debe ser ordenado antes de contar las letras.
3. De un arreglo A de caracteres (letras) de largo mximo 50, invertir sus valores en un arreglo B del mismo tamao. Luego
verificar si la palabra es palndrome (es decir se lee igual hacia adelante y hacia atrs) comparando los dos arreglos
simultneamente. Haga las restricciones necesarias para la entrada de los datos sin que afecte lo antes expuesto.
4. Ordenar un arreglo de tamao 10 de enteros ingresados por el usuario de menor a mayor, no se permite el uso de
arreglos auxiliares.
5. Reciba 10 notas guardadas en un arreglo y calcule el promedio de un alumno tomando en cuenta que se debe
preguntar el porcentaje que tiene cada nota (puede ser guardado en otro arreglo de igual tamao). Trabaje con los dos
arreglos simultneamente.
6. Se tiene un vector compactado de 50 nmeros enteros sume la 1 con la 2 casilla y gurdelo en la 3, sumando este
resultado al valor que ocupaba ese lugar (1+2=3 ; 3+4=5 ; 5+6=7). Repita la operacin en todo el arreglo. Ej:
1-2-3= 1-2-6
7. En el Aeropuerto de Santiago se manejan 15 puestos de estacionamiento (identificados por las letras del abecedario de
la A a la O), a su vez hay 15 aviones funcionando ese mismo da (que se identifican con su nmero de vuelo). El
Aeropuerto guarda adems la hora de llegada del vuelo, la hora de salida, la cantidad de pasajeros que ocupan el avin,
y el destino al cual se dirige.
Maneje 6 arreglos de diferentes tipos para guardar cada uno de estos datos y manejarlos se forma sincronizada. Se
pide que al preguntar por el estacionamiento diga el numero de vuelo que lo ocupa, Al preguntar por el numero de vuelo
diga la hora de salida, la hora de llegada, la cantidad de personas que ocupan el avin, el numero del estacionamiento y
el destino del avin, Y que al preguntar por un destino especfico muestre una lista con todos los aviones (n de vuelo)
que se dirigen ah.
8. Se tiene un arreglo de largo 25 de nmeros enteros que se maneja de manera compactada y ordenada. Se pide que
haga una funcin que permita eliminar un nmero especfico y mantener el arreglo compactado y otra funcin que
permita (si hay espacio disponible) agregar un nmero de forma ordenada sin perder ningn valor del arreglo. Considere
que en los lugares vacios se guardarn nmeros que se consideren nulos.
9. Se tiene un vector de largo 50 lleno de nmeros en el cual debe asumir que existen nmeros repetidos ya sea de forma
consecutiva o alternada. Se pide hacer un programa para listar por pantalla todos los nmeros distintos entre si, sin
utilizar arreglos auxiliares.
Ejemplo:
Si el arreglo es: | 5 | 4 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1 | 2 | 5 | 3
Debe mostrar:

| 5 | 4 | 3 | 6 | 7 | 8 | 9 | 1 | 2

4 Anidacin Arreglos:
1. En un arreglo de largo 30 de estructuras tipo Info, se encuentran almacenados diversos datos de los miembros de un
club de fans. Se pide que elabore un programa que permita:
a.
b.
c.

Al ingresar las iniciales del nombre de uno de los integrantes mostrar todos sus datos.
Agregar o Eliminar del Vector de Pagos una cantidad especfica
Ordenar el vector en forma ascendente cada vez que el usuario ingrese un numero en el vector de pagos.

Las estructuras a utilizar sern las siguientes:


struct Info
{
char Nombre[50];
char Rut[11];
int edad;
int Pagos[100];
};

2. Se tiene un arreglo de largo 20 de arreglos (largo 10) que a su vez este ltimo es de estructuras tipo Trabajador. En el
primer arreglo cada celda representa un da hbil del mes (es decir trabajado), y cada da posee un arreglo que simboliza
a las personas que trabajaron (normalmente en esa empresa son 10) durante ese da. Se pide que con las estructuras
definidas posteriormente:
a.
b.
c.

Agregue los datos de todas las personas en un da ingresado por el usuario


Dado un nmero, mostrar esa cantidad de trabajadores en un da especificado.
Eliminar (o poner valores nulos en las variables) de una persona indicada por Rut

Las estructuras a utilizar sern las siguientes:


struct Trabajador
{
char Nombre[50];
char Rut[11];
char cargo[15];
int edad;
}

3. Un vector de largo 5 de enteros que representan los nmeros sorteados de un juego de azar, est ubicado dentro de
otro vector de largo 4 que representa las veces que se sortean los nmeros al mes, a su vez este vector est ubicado
en uno de largo 12 que representan los meses del ao. Se pide que dado 5 nmeros busque la coincidencia en la
estructura y muestre por pantalla el nmero del sorteo, el mes en que fue sorteado y el nmero de la semana en que
ocurri.

5 Matrices:
1. Teniendo una matriz de nmeros enteros de dimensiones 10 x 10 (cuadrada) se pide desarrollar un algoritmo para
recorrer dicha matriz de forma espiral mostrando por pantalla el resultado de dicho recorrido.
2. Sumar una matriz cuadrada de tamao 6 x 6 con su transpuesta, y determinar si la resultante es simtrica (Matriz[i][j] ==
Matriz[j][i]).
3. Implementar una funcin para encontrar el nmero mayor y el menor de una matriz de enteros, debe considerar que el
tamao de la matriz, as como la matriz son recibidos por parmetro.
4. Ingresar una lista de 30 alumnos con ocho calificaciones cada uno. Mostrar aquellos alumnos con sus notas, cuyo
promedio sea igual o superior al promedio general, para ello debe hacer uso de las matrices y/o arreglos que se estime
conveniente.
5. Desarrolle un juego de combate naval que opere sobre una matriz de 10 x 10 con barcos que ocupan slo una
coordenada de la matriz, debiendo leerse las posiciones de los barcos desde un archivo de texto. Un adversario debe
efectuar un mximo de 40 disparos (indicando las coordenadas del disparo), y si en ella existe un barco se deber
indicar que el barco est hundido. Tras cada disparo los barcos deben desplazarse una posicin a la derecha. En caso
de ya estar en el extremo derecho pasa al extremo izquierdo dando la sensacin de continuidad.
6. Una compaa de gaseosas ordena sus pedidos en una matriz, una de sus dimensiones corresponden al nmero de
gaseosas que trabajan (en este caso serian 15 tipos), la segunda dimensin corresponde a la cantidad de clientes que
posee la empresa (155) en la matriz se guarda la cantidad de gaseosas de cada tipo que requiere un cliente es decir:
Cada celda de la matriz guardar un entero correspondiente a la cantidad de gaseosas que cada cliente requiere. De
acuerdo al ndice de esta matriz se sabr el tipo de gaseosa y el nmero del cliente.
cliente\gaseosa

coca

naranja

Limn

001

20

24

002

15

30

Se pide lo siguiente:
Mostrar por pantalla de manera ordenada (mostrar como tabla) los pedidos de los clientes tomando en cuenta que el
numero de los clientes se mostrar del 001 al 155 y que el tipo de gaseosas se identificar con letras A hasta O segn
del ndice (es decir, ndice 0 corresponde A).
a.
b.
c.

Agregar pedidos a la matriz


Borrar pedidos
Calcular los pedidos por clientes y Mostrarlo por pantalla

6 Anidacin Matrices-Arreglos:
1. Se tiene una matriz de 10x10 la que representa los asientos de una sala ordenados por fila/columna, en cada celda de
la matriz existe una estructura que simboliza a la persona que corresponde cada asiento, la estructura posee los datos
de dicha persona adems de un vector que guarda las horas en que esa persona estar ocupando el asiento. Se pide
que dado un nmero de asiento busque a la persona y muestre los datos por pantalla, adems de crear una funcin
que permita buscar un asiento disponible, si no existiese que muestre el que se desocupar ms pronto.
2. En un cibercaf de la ciudad las personas que entran deben registrarse para poder tener un control de los daos que
pudiesen ser causados en los equipos. Para esto se tiene una matriz tridimensional (tres dimensiones) que representa el
numero de computadores (25), las horas identificadas del 1 al 11 (son las horas que trabaja cada computador
diariamente), y las personas (con un tope de 100 por equipo). A su vez cada persona tiene un vector de las paginas
que ha visitado (el vector ser de enteros ya que cada pgina en la base de datos del cibercaf, est identificada con
un numero). Calcule el valor de la visita de una persona segn las horas que estuvo en el ciber, cree una funcin que
busque una persona segn el nombre y otra que muestre todos los usuarios de un computador en especfico.
Estructuras de datos:
struct Persona
{
char Nombre[50];
char Horain[6];
char Horaout[6];
int edad;
int paginas[20];
};

3. Se tiene un vector de largo 12 representando a las regiones del pas, cada celda posee un vector de largo 20 para las
ciudades de la regin y cada celda de ste a su vez posee un vector de largo 20 para las comunas de dicha ciudad.
En cada celda que representa a las comunas existe una matriz de 4x4 que guarda todos los cdigos postales de esa
comuna. Muestre por pantalla ordenado por regin-cuidad-comuna los cdigos postales (utilice nmeros para identificar
cada una de ellas) y cree una funcin que dado una regin-cuidad-comuna muestre los cdigos de esa zona.

7 Punteros (arreglos-matrices dinmicos):


1. Ingresar una frase en un vector de largo n (dinmico) y todas aquellas letras que se encuentren repetidas eliminarlas y
dejar slo la primera coincidencia. Requiere compactar.
2. Recibir 2 palabras en arreglos dinmicos y concatenarlas en un tercer arreglo.
3. Crear un vector de estructuras de largo 50 que contiene los datos de la gua telefnica de la Isla Juan Fernndez. La
estructura contiene: nombre (Char*), direccin (Char*), telfono (int) y rut (int). Muestre las personas ordenadas por
nombre y todos sus datos.
4. Crear un vector de punteros estructuras de largo 50 que contiene nombre (char*), edad (int) y n de cuenta bancaria
(char*). El vector se maneja de manera compactada (es decir sin nulls en medio). Mostrar todas las personas cuyo
nombre empieza con una cadena ingresada por el usuario.
5. En un jardn de nios se lleva el registro de todos los nios y las mensualidades pagadas durante el ao en una matriz
dinmica (de dimensiones indicadas por el usuario). Cada nio tiene asociado un nombre (char*), apoderado (Char*),
deuda_anual (Int) y deuda_pagada (int), todo esto en un vector de estructuras. Se pide desarrollar un programa que
mediante un men permita realizar las siguientes operaciones:
a.
b.
c.
d.

Listar a todos los apoderados y sus hijos cuya deuda anual sea mayor que la pagada
Calcular las deudas de todos los alumnos y obtener lo que se le debe al jardn
Mostrar a todos los nios que estn al dia
Eliminar o modificar los datos de un nio.

6. Desarrollar un programa que permita girar una matriz nxm en 90 en sentido contrario a las agujas del reloj, el programa
debe permitir varios giros consecutivos. La matriz debe ser dinmica, y el proceso de giros debe realizarse en funciones,
adems determinar si la matriz es identidad.
Matriz Original

Matriz Girada en 90

Matriz Girada en 90 ms

7. Se define que una matriz cuadrada es "superiormente achurada en orden" si para la diagonal principal y para cada una
de las paralelas superiores a ella, se cumple que sus elementos se encuentran ordenados ascendentemente,
considerndolos de izquierda a derecha y de arriba hacia abajo (cada diagonal por separado). Por ejemplo:

En este ejemplo cada diagonal


tiene sus
elementos ordenados ascendentemente de arriba
abajo y de izquierda a derecha, por tanto es
"superiormente achurada en orden".

Construya un algoritmo que, para una matriz cuadrada de N x N (con posiciones desde la 0 a la N-1 en filas y
columnas),llena con nmeros enteros ya ingresados, determine si cumple la propiedad de ser "superiormente achurada
en orden".
8. Se tiene que en un colegio de la Zona se organizan los profesores de la siguiente manera: En un vector dinmico de
estructuras, en cada celda del vector se guarda la informacin de un profesor, cada profesor posee nombre (char*), rut
(char*), especialidad (char*) y una matriz de semanas vs das (4x7). En cada celda de dicha matriz existe una estructura
que contiene horario (char*) y un vector dinmico de los cursos (char*) que tiene que dictar ese da. Se pide que a
travs de un men el programa haga lo siguiente:
a.
b.
c.
d.
e.

Agregar, modificar y eliminar los datos de un profesor


Agregar, modificar y eliminar los cursos que el profesor dicta.
Listar a todos los profesores y sus cursos en un da especfico.
Buscar a un profesor por su nombre
Dado un el nombre de un curso listar a todos los profesores que dictan el curso ese da.

9. Realizar el proceso de multiplicacion de dos Matrices (dinamicas), tomando encuenta que el producto de dos matrices
se puede definir slo si el nmero de columnas de la matriz izquierda es el mismo que el nmero de filas de la matriz
derecha. Si A es una matriz mn y B es una matriz np, entonces su producto matricial AB es la matriz mp (m filas, p
columnas) dada por:

Por ejemplo:

10. Un Edificio se maneja en una matriz tridimensional (tres dimensiones) de estructuras. La primera dimensin hace
referencia a los pisos del edificio (10), la segunda y tercera dimensin se consideran como las 16 habitaciones que
posee cada piso (podemos imaginarnos una matriz de 4x4).
La Estructura se define:
struct habitacion
{
char* estado;
char* titular;
int n_de_ocupantes;
int n_de_camas;
};

Se pide:
a.
b.
c.

Mostrar las habitaciones ordenadas por piso y si se encuentran ocupadas o disponibles


Buscar a un titular dentro del edificio
Buscar segn las necesidades del usuario un nmero de camas especfico y mostrar todas aquellas habitaciones
que posean esa cantidad. Mostrar las que estn disponibles con un 0 y aquellas q no con un 1 (en una funcin
aparte).
8

8 Listas:
11. Una lista doblemente enlazada tiene un puntero al siguiente nodo de la lista y otro al anterior, permitiendo recorrer la lista
en ambas direcciones. Defina y construya el ADT Lista Doblemente Enlazada (puede usar un nodo fantasma).
12. Una casa comercial maneja su lista de novios de una manera singular: cada persona ocupa un nodo dentro de una lista
simplemente enlazada, mantenindose siempre junta la pareja, primero el novio y a continuacin la novia. Si las parejas
se reconocen en la lista ordenadas de acuerdo con el apellido del novio, entonces:
a.
b.
c.
d.

Defina las estructuras a utilizar


Crear una funcin que elimine a una pareja de la lista dado el apellido del novio.
Desarrolle una funcin que cree e inserte ordenadamente una pareja a la lista.
Crear una funcin que al escribir una H muestre a todos los novios y una M a todas las novias. De sta se
despliega otra opcin: al escribir cualquier letra del abecedario mostrar los apellidos que comiencen con dicha
letra.

13. Una empresa distribuidora utiliza una lista circular para definir la ruta que sigue su camin repartidor dentro de la ciudad.
En esta lista cada nodo representa un cruce de calles, con la excepcin del nodo apuntado por la cabeza de la lista,
que representa a la empresa misma.

Ruta
Se pide :
a.
b.
c.

Definir los tipos de datos que soporten esta estructura


Programar un procedimiento que permita inicializar la lista (crear el registro que representa a la empresa).
Programar un procedimiento que permita mostrar la ruta.

14. Un mayorista guarda todas las ventas de los minoristas en una lista simplemente enlazada, donde cada nodo contiene
el RUT del minorista y el monto de la venta (un minorista puede figurar ms de una vez en la lista). A partir de esto se
desea construir otra lista ordenada por RUT, en que cada minorista figure una sola vez con el total de las ventas. Se
pide:
a.
b.

Definir los tipos de datos que soporten estas estructuras.


Construir un procedimiento que permita generar la segunda lista a partir de la primera.

9 Anidacin Listas-Arreglos:
15. Una empresa que vende sus productos en el mercado nacional, mantiene su lista de distribuidores de la siguiente
forma: un arreglo de largo 13 representa las regiones del pas (Santiago es la regin 13), donde de cada posicin del
arreglo cuelga una lista de los distribuidores autorizados de la regin (cada distribuidor se identifica por un RUT). Se
pide:
a.
b.
c.

Definir los tipos de datos de esta estructura


Construir un procedimiento que muestre todos los distribuidores del pas, agrupados por regin.
Eliminar un distribuidor de una regin, a partir de su RUT.

16. Para la utilizacin de la Tarjeta PrestaFacil se maneja un lista simplemente enlazada de clientes con los siguientes datos:
N de tarjeta, clave secreta, nombre del titular, un puntero a un adicional, Rut del titular, y una lista simplemente enlazada
de compras. Cada estructura de la lista de compras posee: nombre del producto, cdigo, precio normal, n de
cuotas, precio final, valor de cada cuota.
Tomando en cuenta que los trabajadores manejan el sistema, Desarrolle un programa que:
a.
b.
c.
d.
e.

Defina las estructuras a utilizar


Cancele una cuota de las compras (requiere restar el precio total y n de cuotas)
Una funcin que borre automticamente la compra de un cliente cuyo precio total sea cero.
Eliminar a un cliente y a su adicional de la lista
Agregar a un cliente a la lista ordenado por su Rut

17. Una Empresa de ventas de juegos de Nintendo Wii a nivel nacional, necesita un sistema bsico para manejar sus
sucursales, considerando que cuenta con numerosas sucursales en muchas regiones del pas, y que cada una de ellas
puede tener un listado n de ttulos (juegos que se encuentran disponibles en las tiendas). Sabiendo que se tiene: una
lista doblemente enlazada de ciudades, una lista contigua de punteros a sucursales, y una lista simple de ttulos se pide
implementar las siguientes funciones, y llamarlas a travs de un men en el main():
a.
b.
c.
d.

Una funcin que crea la titulo y retorna un puntero a ella.


Una funcin que agrega un titulo a las sucursales de la ciudad indicada por el puntero (recibido).
Vender un juego de algn ttulo disponible, dada la sucursal y el titulo del juego.
Una funcin que determine cul es el ttulo ms vendido a nivel nacional.

El prototipo de estructuras utilizadas son:


struct titulo
{
char *nombre;
char *tipo;
int ventas;
struct
titulo
*sig;
};

struct sucursal
{
char *direccin;
int codigo;
struct titulo *titulos;
struct sucursal *sig;
};

struct ciudad
{
char *nombre;
struct
sucursal
*sucur;
struct ciudad *ant;
struct ciudad *sig;
};

18. En una Reserva Natural se est comenzando a autorizar el camping. Se decidi registrar cada familia que entra al
camping y el lugar de la reserva que ocuparn para acampar. En una lista contigua se guarda el apellido del titular de la
familia y los datos de la familia en general (int integrantes, int automvil (0= si 1= no), char* apellido_titular, char*
lugar_camping, int fecha_in (ddmm), int fecha_out (ddmm)), de cada titular cuelga tambin una lista circular de los
acompaantes (familiares) donde se detallan los datos de cada integrante incluido el titular (nombre, parentesco con
titular, edad, Rut). De acuerdo a esto se pide:

10

a.
b.
c.
d.
e.

f.

Declare las estructuras a utilizar


Desarrolle una funcin que agregue y elimine (funciones separadas) una familia del camping
Desarrolle una funcin que agregue y elimine (funciones separadas) a todos o alguno de los integrantes de una
familia. Para buscar la familia se usa el apellido del titular y para borrar alguno de los integrantes se buscan por el rut
Buscar una familia dentro de la Reserva e indicar en qu lugar estn acampando
Desarrolle una funcin que de acuerdo a la fecha de llegada y la de salida calcule el precio total a pagar. Se debe
considerar que se paga una entrada (adulto desde los 18 aos= $1500 y nios de cero a 17 aos $500) y
estada en el lugar (por cada noche cada integrante paga $300, si son ms de 5 integrantes en la familia se hace
un descuento del 30%.
Muestre a Todas las familias ordenadas por titulares (orden alfabtico) que ocupan el camping y el sector donde se
encuentran.

19. La empresa Lomito maneja sus tiendas en un vector de punteros largo 4, donde cada celda representa a una de sus
tiendas (Heladerias Lomito, Desayunos Lomito, Lomito Comida Rpida, Lomito Express), a su vez de cada tienda cuelga
una lista doble de sucursales. Se pide:
a.
b.
c.
d.
e.

Definir el prototipo de estructuras


Eliminar una sucursal de una tienda especifica (se elimina de acuerdo al cdigo de sucursal)
Calcula las ganancias totales de la tienda, tomando en cuenta que en la estructura de cada sucursal se guardan las
ganancias de sta (quiere decir que se pide sumar las ganancias de todas las sucursales)
Calcular las ganancias de Limito (todas las ganancias de las tiendas).
Eliminar una tienda del vector. Recuerde que se debe compactar.

20. Dada la siguiente estructura matricial de punteros:

Matriz

a.
b.
c.
d.

Establezca los tipos de datos necesarios para generar esta estructura.


Disee un procedimiento para mostrar por pantalla una matriz cuadrada similar a la de la figura (recorrindola de
izquierda a derecha y de arriba a abajo).
Disee un procedimiento para mostrar por pantalla la diagonal de una matriz similar a la de la figura, de dimensiones
desconocidas.
Desarrollar una funcin que permita obtener el valor almacenado en la posicin [i, j] de la matriz (suponga que la
matriz conserva siempre todos sus nodos), tomando en cuenta de que no pueden existir variables globales.

21. En el Registro Civil para organizacin, se necesita registrar a cada persona que solicita un documento (certificados de
todo tipo, etc.). Para ello se necesita que cree las siguientes funciones:

11

a.
b.
c.
d.

struct Persona* crear()= crea el registro de una persona y sus datos y devuelve un puntero a ella.
struct Documento* solicitud()= crea una solicitud de un documento y retorna un puntero al mismo
void busqueda_solicitud (struct Persona** head, char* documento)= Busca en cada persona el tipo de documento
que solicit, si coincide con el documento buscado, muestra los datos de la persona por pantalla.
void unir_persona()=une a la lista de personas ordenandas por Rut una nueva persona creada.

Utilice el siguiente prototipo de estructuras:


struct Persona{
char* Nombre;
char* Rut;
char* Direccion;
int edad;
struct Documento *Doc;
struct Persona *ant, *sig;
};

struct Documento{
char* Nombre_documento;
char* Nombre_solicitado;
char* estado_doc;
int cantidad_doc;
int valor_unitario_doc;
int valor_transaccion;
struct Documento *sig;
};

10 Recursividad:
1. Desarrollar un programa que a travs del uso de funciones recursivas calcule si un numero es Perfecto (ejercicio n
10).
2. Desarrolle una funcin recursiva que halle el valor de la siguiente sumatoria, dado un valor aproximado de V. La
sumatoria se detendr cuando el valor total de sta sea menor o igual a V. Considere V y n ingresados por usuario.
100

n+1
V= n*n
K=1
3. La problemtica de las Torres de Hanoi, consiste en que hay tres postes: A, B y C. En el poste A se ponen n
discos de dimetro diferente de tal manera que un disco de dimetro mayor siempre queda bajo de uno de
dimetro menor. El objetivo es mover los discos al poste C usando B como auxiliar. Slo puede moverse el disco
superior de cualquier poste a otro poste, y un disco mayor jams puede quedar sobre uno menor, un ejemplo para
tres discos es la que se muestra en la figura:

12

4. Desarrollar un programa que a travs de recursividad invierta una palabra. Ejemplo: live=evil
5. Escribir una funcin recursiva que encuentre la altura de un rbol binario.

11 rboles:
6. En una Empresa los nombres y edades de todos los trabajadores se necesitan guardar para llevar un registro de
ellos. Luego deben mostrarse todos los trabajadores ordenados alfabticamente. Implemente un rbol binario.
7. Implemente un rbol lleno de valores enteros, en el que se pueda calcular el promedio de todos los valores
menores o iguales a un nmero ingresado por el usuario. El recorrido debe ser en pre-orden y de forma recursiva.
a.

Inserte el numero 106 :

b.

Inserte el numero 60:


60
10
22
6
8

15
17

69
74
27
50

65
68

70
72

92
99

8. Qu Rotacin debe realizarse. Realice la rotacin detalladamente.

9. Realice lo siguiente en un rbol AVL de orden 6:


a.
b.

Insertar: 8-12-6-35-15-20-46-9-18-36-30-10-1
Eliminar: 35-20-46-1

13

10.Inserte en un ABB los siguientes datos de manera sucesiva: 2,1,4,3,6,5,8,7,9 y luego responda lo siguiente:
a.
b.
c.
d.

cul es la altura del rbol?


Utilizando rotaciones simples y dobles, construya un rbol AVL posible.
cul es la altura del rbol AVL?
cuntos nodos no tienen hijos?

11.Implementar las funciones de recorrido que a continuacin se describen, de forma recursiva, para un AB de
nmeros (int numero), buscando un valor determinado, y cuando este sea encontrado retorne un puntero a l, de lo
contrario retorna NULL.
a.
b.

Recorrido in-orden
En un ABB, con post-orden.

12.En un rbol AB se guardan los nombres de los integrantes de una familia, es decir, el AB representa a un rbol
genealgico. Se pide que a travs del rbol, cree su representacin mediante tres vectores.
13.Del mismo rbol anterior, haga la representacin del AB mediante un vector de valores, recuerde que el hijo
derecho va en la posicin 2*i y el izquierdo 2*i+1.
14.En una farmacia se guardan los medicamentos en un rbol que posee la siguiente estructura:
struct Medicamentos
{
char* Nombre_Real;
char* nombre_publicitario;
char* laboratorio;
Char* Datos;
Int clave;
Int precio;
Struct Medicamentos *izq, *der;
};

Se pide que de acuerdo a la estructura dada, cree una funcin que transforme el rbol a un vector de estructuras.
15.Se tiene un rbol binario de bsqueda de punteros, ordenado por un cdigo de persona, usando las estructuras
inferiormente expuestas, determinar si un rbol binario de bsqueda es o no degenerado, tomando en
cuenta que debe implementar de forma obligatoria las funciones que se describen a posteriormente
a.
b.

struct persona *crear_persona(): crea un nodo a una persona y retorna un puntero a ella.
int insertar_nodo (struct abb **raiz, struct persona *nodo_nuevo): funcin recursiva que

c.

recibe el rbol, y el nodo que se desea insertar (persona), retorna 1 en caso de xito, 0 en caso de que ya
existe el elemento.
int abb_degenerado (struct abb *raiz, int lado): determina si un abb es degenerado por la
izquierda o por la derecha dependiendo de la opcion (1: izquierda, 2: derecha), recibe la raz del ABB y la
opcin del lado a verificar, esta funcin es iterativa.

14

El prototipo de estructuras utilizadas son:

Ejemplo de rbol degenerado por la derecha:

16.La Asociacin Gremial De Transportes desea construir un rbol para organizar sus recorridos segn las ciudades,
sabiendo que el identificador de cada ciudad es su cdigo (cdigo de ciudad). Cada ciudad posee otro rbol de
las lneas que la recorren cuyo identificador es su nmero y a su vez cada lnea tiene un vector dinmico de
estructuras donde se guarda el valor de los pasajes (ejemplo: plan-cerro=$370)
Asociando tenemos un rbol de Asociacin Gremial de Transportes (ciudades) y de l cuelga otro rbol con las
lneas de cada ciudad, de cada lnea un vector dinmico de estructuras con el detalle de los precios. Se pide que:
a.
b.
c.
d.
e.
f.
g.
h.
i.
j.
k.

Declare las estructuras a utilizar


Llenar los datos con funciones modularmente independientes
Mostrar los datos de cada rbol segn necesidad del usuario
Borrar un nodo del rbol principal (ciudad)
Borrar un lnea
Cambiar el valor de un pasaje en una lnea y ciudad especfica
Agregar una nueva lnea a una determinada ciudad
Agregar una nueva ciudad de consideracin al rbol
Eliminar toda la asociacin
Ordenar las lnea segn numero
Bsqueda de lneas y ciudad

17.Dado el grafo orientado que se muestra en la inferior, se pide:


a.
b.

Calcular, mediante el algoritmo de Floyd, el camino mnimo desde cualquier vrtice (fuente) al vrtice (destino) 0
de dicho grafo, es decir el camino mnimo desde los vrtices 1, 2, 3 y 4 al vrtice 0. Mostrar para ello, la
secuencia de matrices de costes y la secuencia matrices de vrtices intermedios.
Calcular adems, cul es el vrtice del grafo que ms veces se considera como vrtice intermedio o de paso al
aplicar el algoritmo de Floyd. Justificar convenientemente la solucin.

15

12 Bsqueda y Ordenamiento:
18.Dado el siguiente enunciado, desarrolle la funcin de bsqueda secuencial. void busqueda_secuencial(int v[20],int
valor).
19.Implemente una Hashtable con funcin de hash (mod) y mediante un arreglo de listas simplemente enlazadas para
manejar las colisiones. A la Hashtable se le ingresan valores en el rango 1 a 100 y el arreglo es de largo 15.
Implementar las estructuras y las operaciones para agregar y eliminar valores de la Hashtable.
20.Desarrolle el algoritmo de la bsqueda binaria dado un nmero ingresado y un arreglo de largo 50.
21.Desarrolle un algoritmo que permita la insercin de un nmero en un arreglo con el mtodo de la baraja. El arreglo
debe estar ordenado de menor a mayor,
22.Desarrolle en C la funcin del mtodo Quicksort.

16

Você também pode gostar