// 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"); }