Вы находитесь на странице: 1из 4

EJERCICIOS PARA TRABAJAR CON MEMORIA DINAMICA

PROBLEMA 1: la siguiente lista ligada representa una lista de enteros que no están ordenados, pudiendo existir
elementos repetidos.

Los nodos de la lista son idénticos y están definidos por la siguiente declaración de tipos:

typedef struct nodo{


int elem;
struct nodo *sig;
}TNodo;

typedef Tnodo * Tlista;

Tlista lista;

Por otro lado se dispone de la función Separa, cuyo prototipo es el siguiente:

Void separa (Tlista *lista, int numero, Tlista *resultado);

La función Separa extrae de la lista de números (parámetro lista del prototipo) todos los números que sean mayores que
el número que se pasa como parámetro a través del parámetro numero. El parámetro resultado es una lista generada por
la función compuesta por los números que se han extraído del parámetro lista. Por ejemplo, para la lista mostrada en la
figura anterior, el resultado de la función Separa (con el parámetro numero = 13 ) sería el de la siguiente figura:

resultado

En la figura se observa que la función ha extraído de la variable lista los nodos cuyo contenido es mayor que 13 y los ha
dejado (en el mismo orden en que han sido encontradas en lista) en resultado.
Se pide: Codificar en C la función Separa.

Página 1 de 15
PROBLEMA 2: Una clínica médica desea mantener una aplicación informática que le permita conocer en todo
momento los médicos que trabajan en la clínica y la información de los pacientes que tiene cada médico. Para
hacerlo una empresa que desarrolla aplicaciones ha diseñado una en la que la estructura de datos que almacena la
información es la siguiente:

Datos de los médicos:

typedef struct{ typedef struct nodoMedico{


char codColegiado[10]; TMedico infoMedico;
char nombre[50]; TNodoPaciente *listaPaci;
}TMedico; struct nodoMedico *sigMedico;
}TNodoMedico;

Datos de los pacientes:

typedef struct{ typedef struct nodoPaciente{


char NumHistoria[10]; TPaciente infoPaci;
char nombre[50]; struct nodoPaciente *sigPaciente;
char diagnostico[200]; }TNodoPaciente;
}TPaciente;

Cuya representación gráfica sería:

Se Pide: Codificar en C la función AltaPaciente que dado el código de colegiado (char codColegiado[10]) de un
médico, los datos de un paciente (TPaciente) y la lista con toda la información de la clínica (como la indicada en al
figura anterior), añada los datos de ese nuevo paciente a la lista de pacientes del médico mencionado anteriormente. La
lista con los pacientes de cada médico no tiene porque estar ordenada por ningún campo. El prototipo de la función a
codificar sería:
void AltaPaciente(TNodoMedico *clicnica, Tpaciente nuevoPaciente, char
codColMedico[]);

Página 2 de 15
PROBLEMA 3: Dada la siguiente definición de un tipo de datos en C:

typedef struct nodo{


int informacion;
struct nodo *siguiente;
}TNodo;

Se pide:
Codificar una función en C que teniendo el siguiente prototipo:

TNodo *Concatenar ( TNodo *Lista1, TNodo *Lista2);

reciba como parámetros dos listas del tipo definido y devuelva como resultado una nueva lista que esté formada por los
elementos de las dos listas de entrada concatenados, es decir, los elementos de la Lista1 delante de los elementos de la
Lista2. Las listas de entrada no deberán ser modificadas dentro de la función.

Por ejemplo, si se pasan como parámetros dos listas como las mostradas en la siguiente figura:

1 3 2 27

Lista1 sig sig sig NULL

6 8 54

Lista2 sig sig NULL

se devolverá una lista como la mostrada en la siguiente figura:

1 3 2 27 6 8 54

ListaResultado sig sig sig sig sig sig NULL

Para la realización de esta función se supone ya codificada en la aplicación una función cuyo prototipo es:

void InsertarAlFinal (TNodo *&lista, TNodo *elemento);

Página 3 de 15
PROBLEMA 4: Una federación deportiva desea mantener una aplicación informática que le permita conocer en todo
momento cuántos equipos están jugando una competición, cuántos jugadores forman parte de dichos equipos, contra
qué equipos han jugado y el resultado obtenido. Para hacerlo una empresa que desarrolla aplicaciones ha diseñado una
en la que la estructura de datos que almacena la información es la siguiente:

#define MAX_NOMBRE 30 typedef struct datos


{
typedef struct resultados char nombreEquipo[MAX_NOMBRE];
{ struct datos *siguienteEquipo;
char contrario[MAX_NOMBRE]; TJugadores *siguienteJugador;
char resultado [4]; TResultados *siguienteResultado;
struct resultados *siguienteResultado; }TEquipo;
}TResultados;
TEquipo *liga;
typedef struct jugadores
{
char nombre[MAX_NOMBRE];
struct jugadores *siguienteJugador;
}TJugadores;

Cuya representación gráfica es la siguiente:

liga

Nombre1 Nombre2 Nombre n

NULL

jugadores

resultados
pepe Contrario 1

Juan Antonio Contrario 2 Contrario n

NULL

NULL

La aplicación se ha diseñado sin saber previamente cuantos equipos y jugadores formarán parte de una liga.

Se pide: Codificar una función que, pasándole como parámetro un puntero a una variable de tipo TEquipo, es decir una
liga completa formada por equipos, jugadores pertenecientes a esos equipos y resultados que se han producido, elimine
toda la información de las diferentes listas, devolviéndola vacía.

Página 4 de 15

Вам также может понравиться