// 2piza45.c #include<stdio.h> #include<conio.h> struct lista * inicializa(struct lista *cabeza); struct lista * mete(struct lista *cabeza, struct cliente cliente); struct lista * saca(struct lista *cabeza, int codigo); void amosa (struct lista *cabeza); struct cliente { int codigo; char nome[40]; char cidade[20]; }; struct lista { struct cliente datos; struct lista *seguinte; }; ///////////////////////////////////////////////////////////////////// void main(void) { struct lista *cabeza; struct cliente cliente; int numero,codigo; char dato[10]; clrscr(); cabeza=NULL; do { printf ("\n M E N U"); printf ("\n ======="); printf ("\n 1.- INICIALIZA Lista de clientes "); printf ("\n 2.- AMOSA Lista de cliente"); printf ("\n 3.- METE cliente en Lista"); printf ("\n 4.- SACA cliente de Lista (iterativamente)"); printf ("\n 5.- 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 cliente (para METER): "); printf ("\n Codigo: "); gets(dato); cliente.codigo=atoi(dato); printf ("\n Nome: "); gets(cliente.nome); printf ("\n Cidade: "); gets(cliente.cidade); cabeza=mete(cabeza,cliente); break; case 4: printf ("\nDame CODIGO de cliente (para SACAR): "); gets(dato); codigo=atoi(dato); cabeza=saca(cabeza,codigo); break; case 5: printf ("\nFINAL"); break; default: printf ("\n OPCION Erronea\n"); break; } } while (numero!=5); getchar(); } ///////////////////////////////////////////////////////////////////// struct lista * inicializa(struct lista *cab) { cab=NULL; return (cab); } ///////////////////////////////////////////////////////////////////// struct lista * mete(struct lista *cab, struct cliente cliente) { struct lista *p; p=(struct lista *)malloc (sizeof (struct lista)); p->datos=cliente; p->seguinte=cab; return (p); } ///////////////////////////////////////////////////////////////////// void amosa(struct lista *cab) { printf ("\n Lista de clientes"); printf ("\n ================="); printf ("\n CODIGO NOME while (cab!=NULL) { printf ("\n%10d",cab->datos.codigo); printf ("%15s",cab->datos.nome); printf ("%15s",cab->datos.cidade); cab=cab->seguinte; } printf("\n"); } CIDADE"); ///////////////////////////////////////////////////////////////////// struct lista * saca(struct lista *cab, int codigo) { // solucion iterativa struct lista *p,*q; int salir; p=cab; salir=0; while (!salir) { if (p==NULL) salir=1; else { if (p->datos.codigo==codigo) { 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); }