código

Anuncio
// 2piza46.c
#include<stdio.h>
#include<conio.h>
struct lista * inicializa(struct lista *cabeza);
struct lista * mete(struct lista *cabeza, int idade);
struct lista * saca(struct lista *cabeza, int idade);
struct lista * sacaR(struct lista *cabeza, int idade);
void amosa (struct lista *cabeza);
struct lista {
int idade;
struct lista *seguinte;
};
/////////////////////////////////////////////////////////////////////
void main(void)
{
struct lista *cabeza;
int idade,numero;
char dato[10];
clrscr();
cabeza=inicializa(cabeza);
do
{
printf ("\n M E N U");
printf ("\n =======");
printf ("\n 1.- INICIALIZA Lista ");
printf ("\n 2.- AMOSA Lista");
printf ("\n 3.- METE idade en Lista");
printf ("\n 4.- SACA idade de Lista (iterativamente)");
printf ("\n 5.- SACA idade de Lista (recursivamente)");
printf ("\n 6.- FINAL\n ");
gets(dato);
numero=atoi(dato);
switch(numero)
{
case 1:
cabeza=inicializa(cabeza);
printf ("\n Lista INICIALIZADA\n");
break;
case 2:
amosa(cabeza);
break;
case 3:
printf ("\nDame idade (para METER): ");
gets(dato);
idade=atoi(dato);
cabeza=mete(cabeza,idade);
break;
case 4:
printf ("\nDame idade (para SACAR): ");
gets(dato);
idade=atoi(dato);
cabeza=saca(cabeza,idade);
break;
case 5:
printf ("\nDame idade (para SACAR): ");
gets(dato);
idade=atoi(dato);
cabeza=sacaR(cabeza,idade);
break;
case 6:
printf ("\nFINAL");
break;
default:
printf ("\n OPCION Erronea\n");
break;
}
}
while (numero!=6);
getchar();
}
/////////////////////////////////////////////////////////////////////
struct lista * inicializa(struct lista *cab) {
cab=NULL;
return (cab);
}
/////////////////////////////////////////////////////////////////////
struct lista * mete(struct lista *cab, int ida) {
struct lista *p;
p=(struct lista *)malloc (sizeof (struct lista));
p->idade=ida;
p->seguinte=cab;
return (p);
}
/////////////////////////////////////////////////////////////////////
struct lista * saca(struct lista *cab, int ida) {
// solucion iterativa
struct lista *p,*q;
int salir;
p=cab;
salir=0;
while (!salir)
{
if (p==NULL)
salir=1;
else
{
if (p->idade==ida)
{
if (cab==p)
cab=p->seguinte;
else
q->seguinte=p->seguinte;
free((struct lista *)p);
salir=1;
}
else
{
q=p;
p=p->seguinte;
}
}
}
return (cab);
}
/////////////////////////////////////////////////////////////////////
struct lista * sacaR(struct lista *cab, int ida) {
// solucion recursiva
struct lista *p,*q;
if (cab!=NULL)
{
if (cab->idade!=ida)
cab->seguinte=saca(cab->seguinte,ida);
else
{
p=cab;
cab=cab->seguinte;
free((struct lista *)p);
}
}
return (cab);
}
/////////////////////////////////////////////////////////////////////
void amosa(struct lista *cab) {
printf ("\n
Lista de idades\n");
printf ("\n
===============\n");
while (cab!=NULL)
{
printf ("\n%13d",cab->idade);
cab=cab->seguinte;
}
printf("\n");
}
Descargar