Sie sind auf Seite 1von 5

Ejercicios Resueltos Listas Simples - Parte 2.

1. Disee una funcin que permita incluir un nodo al final de una lista doblemente enlazada
cclica. Recuerde que una lista doblemente enlazada cclica est estructurada como lo
muestra la siguiente figura.
ListaD

Ant

Info

Sig

Ant

Info

Sig

Ant

Info

Sig

Figura 1. Esquema de una lista cclica doblemente enlazada.


typedef int DATO;
struct NODO
{
DATO Info;
NODO *ant, *sig;
};
typedef NODO* ptNODO;
void insertar (ptNODO &Lista_D, DATO X)
{
ptNODO Nuevo = new(NODO), A=Lista_D;
Nuevo->Info = X;
Nuevo->ant = NULL;
Nuevo->sig = NULL;
if (Lista_D == NULL)
{
Lista_D = Nuevo;
Lista_D->ant = Nuevo;
Lista_D->sig = Nuevo;
}
else
{
while (A->sig != Lista_D) A= A->sig;
A->sig = Nuevo;
Nuevo->ant = A;
Nuevo->sig = Lista_D;
Lista_D->ant = Nuevo;
}
}

2. El departamento de computacin requiere un programa que permita automatizar la


impresin de los cumpleaos de sus profesores.
El programa debe implementarse a travs del esquema de la figura 2. Debe crearse un
arreglo de lista, que permita almacenar 1 lista por cada mes el ao. En el campo info se
almacenarn el nombre y la fecha de cumpleaos del profesor.
Para operar de manera organizada, el programa contar con un men de opciones como se
especifica a continuacin:
1) Registrar Profesor: Se ingresar el nombre y la fecha de nacimiento del profesor.
Dependiendo del mes de cumpleaos se registrar en su lista correspondiente. Nota:
los datos de los cumpleaeros deben quedar por orden ascendente segn su
da de cumpleaos (ver figura 2).
2) Lista de Cumpleaeros: solicitar el ingreso del mes y ao, y mediante una subrutina
imprimir la lista de cumpleaeros de dicho mes mostrando su nombre, el da de
cumpleaos y la edad a cumplir.
3) Salir del Programa.

Lista [12]
0

Lista[0]

Lista[1]

...

...

10

Lista[10]

11

Lista[11]

Sutanita

Info

Cumple
1
82

Sig

Info

Fulanito

Sig

Info

Sig

Cumple
1
73

...

Meses

Info

Sig

Info

Sig

Info

Sig

Info

Sig

Info

Sig

Info

Sig

Nombre

Cumple
Dia Mes Anio

Figura 2. Esquema de la estructura del Ejercicio 2.


#include <conio.h>
#include <iostream.h>
#define N 12
struct Fecha
{
int dd, mm, aaaa;
};
2

struct dato
{
char nombre[30];
Fecha cumple;
};
typedef dato DATO;
struct NODO
{
DATO Info;
NODO *Sig;
};
typedef NODO* ptNODO;
struct Lista_Cumple
{
char mes[15];
ptNODO Lista;
};
Lista_Cumple Cumples[N];
void inicializacion (Lista_Cumple Reg[])
{
int i;
strcpy(Cumples[0].mes, "Enero");
strcpy(Cumples[1].mes, "Febrero");
strcpy(Cumples[2].mes, "Marzo");
strcpy(Cumples[3].mes, "Abril");
strcpy(Cumples[4].mes, "Mayo");
strcpy(Cumples[5].mes, "Junio");
strcpy(Cumples[6].mes, "Julio");
strcpy(Cumples[7].mes, "Agosto");
strcpy(Cumples[8].mes, "Septiembre");
strcpy(Cumples[9].mes, "Octubre");
strcpy(Cumples[10].mes, "Noviembre");
strcpy(Cumples[11].mes, "Diciembre");
for (i=0; i<N; i++)
{
Reg[i].Lista = NULL;
}
}
void ingresar(ptNODO &Lista, DATO Elem)
{
ptNODO A = Lista, NUEVO = new(NODO);
NUEVO->Info = Elem; NUEVO->Sig = NULL;
if(Lista == NULL) Lista = NUEVO;
else
{while (A->Sig != NULL) A = A->Sig;
A->Sig = NUEVO;
3

}
}
int mostrar (ptNODO Lista, int aaaa)
{
ptNODO A=Lista;
if (A != NULL)
{
cout<<"Nombre Dia Edad \n";
while (A!= NULL)
{
cout<<A->Info.nombre<<" ";
cout<<A->Info.cumple.dd<<" ";
cout<<aaaa-A->Info.cumple.aaaa<<" ";
A= A->Sig;
}
getch();
return 1;
}
else
{
cout << "Lista Vacia ";
return 0;
}
}
void main()
{
inicializacion (Cumples);
int opc=1, MM, AAAA;
DATO Cumple_Ing;
char slash;
while (opc>=1 && opc<3)
{
cout<<"Menu de Opciones: \n";
cout<<"1) Ingresar Datos \n";
cout<<"2) Mostrar Lista de Cumpleaneros \n";
cout<<"3) Salir del Programa \n";
cin>>opc;
switch (opc)
{
case 1:
clrscr();
cout<<"Ingrese los Datos del Profesor: \nNombre: ";
cin.getline(Cumple_Ing.nombre, 20, '.');
cout<<"Fecha de Nacimiento (dd/mm/aaaa)";
4

cin>>Cumple_Ing.cumple.dd>>slash>>MM>>slash>>Cumple_Ing.cumple.aaaa;
Cumple_Ing.cumple.mm = MM;
ingresar (Cumples[MM-1].Lista, Cumple_Ing);
break;
case 2:
clrscr();
cout<<"Indique el Mes y el Anio para el listado: \n";
cin>>MM>>AAAA;
if (!mostrar(Cumples[MM-1].Lista, AAAA))
{
cout<<"No hay cumpleaeros en ese mes... \n";
}
break;
case 3:
cout<<"Fin del programa...";
break;
}
}
}

Das könnte Ihnen auch gefallen