código

Anuncio
// 2piza47.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);
struct lista * sacaR(struct lista *cabeza, int codigo);
void amosa (struct lista *cabeza);
struct cliente dame (struct cliente cliente);
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.- SACA cliente 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 cliente (para METER): ");
cliente=dame(cliente);
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 ("\nDame CODIGO de cliente (para SACAR): ");
gets(dato);
codigo=atoi(dato);
cabeza=sacaR(cabeza,codigo);
break;
case 6:
printf ("\nFINAL");
break;
default:
printf ("\n OPCION Erronea\n");
break;
}
}
while (numero!=6);
getchar();
}
/////////////////////////////////////////////////////////////////////
struct cliente dame(struct cliente cliente) {
char dato[10];
printf ("\n Codigo: ");
gets(dato);
cliente.codigo=atoi(dato);
printf ("\n Nome: ");
gets(cliente.nome);
printf ("\n Cidade: ");
gets(cliente.cidade);
return (cliente);
}
/////////////////////////////////////////////////////////////////////
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
printf ("\n
Lista de clientes");
=================");
printf ("\n
CODIGO
while (cab!=NULL)
{
NOME
CIDADE");
printf ("\n%10d",cab->datos.codigo);
printf ("%15s",cab->datos.nome);
printf ("%15s",cab->datos.cidade);
cab=cab->seguinte;
}
printf("\n");
}
/////////////////////////////////////////////////////////////////////
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);
}
/////////////////////////////////////////////////////////////////////
struct lista * sacaR(struct lista *cab, int codigo) {
// solucion recursiva
struct lista *p,*q;
if (cab!=NULL)
{
if (cab->datos.codigo!=codigo)
cab->seguinte=saca(cab->seguinte,codigo);
else
{
p=cab;
cab=cab->seguinte;
free((struct lista *)p);
}
}
return (cab);
}
Descargar