#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct lista1
{
int anio;
struct lista2 *d;
struct lista1*sig;
} lista_anios;
typedef struct lista2
{
int mes;
int cotizacionDolar;
struct lista2 *sig2;
} lista_meses;
#define MINIMA_COTIZACION 25
void mostrarlista(lista_anios *);
void cargaranios(lista_anios *);
void cargardatos(lista_meses *r);
void mostrardatos(lista_meses *r);
void borrarCotizacion(lista_anios* p, int cotizacion);
int main()
{
lista_anios *p=NULL;
p=(lista_anios*)malloc(sizeof(lista_anios));
cargaranios(p);
mostrarlista(p);
lista_anios *la=p;//uso un puntero aparte para mantener p en el origen de la lista
borrarCotizacion(la,MINIMA_COTIZACION);
mostrarlista(p);
//getch();
}
void cargaranios(lista_anios *p)
{
printf("\nIngrese el anio (0 para finalizar): ");
scanf("%d", &p->anio);
if (p->anio==0)
{
p->sig=NULL;
return;
}
else
{
p->d=(lista_meses*)malloc(sizeof(lista_meses));
cargardatos(p->d);
p->sig=(lista_anios*)malloc(sizeof(lista_anios));
cargaranios(p->sig);
}
}
void cargardatos(lista_meses *r)
{
printf("\nIngrese el mes (0 para finalizar): ");
scanf("%d",&r->mes);
if (r->mes==0)
{
r->sig2=NULL;
return;
}
else
{
printf("\nIngrese la cotización promedio del dolar: ");
scanf("%d", &r->cotizacionDolar);
r->sig2=(lista_meses*)malloc(sizeof(lista_meses));
cargardatos(r->sig2);
}
}
void mostrarlista(lista_anios *p)
{
if (p->sig!=NULL)
{
printf("\n\nAnio: %d \n", p->anio);
mostrardatos(p->d);
mostrarlista(p->sig);
}
}
void mostrardatos(lista_meses *r)
{
if (r->sig2!=NULL)
{
printf("Mes: %d\n", r->mes);
printf("Promedio dolar: %d\n", r->cotizacionDolar);
mostrardatos(r->sig2);
}
}
void borrarCotizacion(lista_anios *p, int cotizacion)
{
while (p->sig != NULL)
{
printf("\n\nAnio: %d \n", p->anio);
lista_meses* nodoborrar = p->d;
lista_meses* nodoanterior = NULL;
while(nodoborrar->sig2!=NULL)
{
if (nodoborrar->cotizacionDolar<MINIMA_COTIZACION)
{
printf("La cotizacion %d del mes %d del anno %d es menor que %d y se borrara\n",nodoborrar->cotizacionDolar,nodoborrar->mes,p->anio,MINIMA_COTIZACION);
if (!nodoanterior)//primer elemento
{
p->d=p->d->sig2;//hago que el primer elemento de la sublista apunte al siguiente elemento
}
else
{
nodoanterior->sig2 = nodoborrar->sig2;
}
free(nodoborrar);
}
nodoanterior = nodoborrar;
nodoborrar = nodoborrar->sig2;
}
p=p->sig;
}
}