Programación General > C/C++
Re: Listas simple......
alama:
He añadido y corregido y por ahora creo q asi esta bastante bien,solo m falta lo de los comentarios(si m puedes ayudar!)#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
struct articulo{
char *cod_art;
char *nombre;
char *desc;
float precio;
int existencias;
char *cod_prov;
char *notas;
};
struct nodo_articulo
{
struct articulo inf_articulo;
struct nodo_articulo *sig;
};
void leer_articulo(struct articulo *art);
struct nodo_articulo *BuscarNodoArtInsertar(struct nodo_articulo *principio,struct nodo_articulo *nodo_buscado,int *repetido);
int BorrarNodoArt(struct nodo_articulo **principio,struct nodo_articulo *nodo_borrar);
struct nodo_articulo *BuscarNodoArtBorrar(struct nodo_articulo *principio,struct nodo_articulo *nodo_buscado,int *esta);
void mostrar_articulo(struct articulo *art);
int InsertarNodoArt(struct nodo_articulo **principio,struct nodo_articulo *nodo_nuevo);
void main()
{
struct articulo *art;
struct nodo_articulo *nodo_nuevo,*principio=NULL;
struct nodo_articulo *nodo_borrar;
int op;
do
{
printf("nELIGE UNA OPCIONn");
printf("1.-Insertar en listan");
printf("3.-Mostrar la listan");
printf("2.-Borrar n");
printf("4.-Salirn");
scanf("%i",&op);
fflush(stdin);
switch(op)
{
case1:
art=(struct nodo_articulo*)malloc(sizeof(struct nodo_articulo));
leer_articulo(&(nodo_nuevo->inf_articulo));
InsertarNodoArt(&principio,nodo_nuevo);
break;
case2:
/*Bucle que recorra la lista desde el principio y llame cada vez a mostrar_Articulo*/
mostrar_articulo(art);
break;
case3:
/*Preguntar codigo del articulo a borrar*/
printf("n¨Que articulo deseea borrar?");
/*Buscar el nodo a borrar*/
BorrarNodoArt (&principio,nodo_borrar);
break;
default:
printf("nERROR:Dato incorrecto");
break;
}
}
while(op!=4);
}
void leer_articulo(struct articulo *ar)
{
char aux[30];
float prec;
printf("nIntroduzca el codigo del articulo: ");
gets(aux);
ar->cod_art=(char*)malloc((strlen(aux)+1)*sizeof(char));
strcpy(ar->cod_art,aux);
fflush(stdin);
printf("nIntroduzca el nombre del articulo: ");
gets(aux);
ar->nombre=(char*)malloc((strlen(aux)+1)*sizeof(char));
strcpy(ar->nombre,aux);
fflush(stdin);
printf("nIntroduzca la descripcion del articulo: ");
gets(aux);
ar->desc=(char*)malloc((strlen(aux)+1)*sizeof(char));
strcpy(ar->desc,aux);
fflush(stdin);
printf("nIntroduzca el precio del articulo: ");
scanf("%f",&prec);
prec=ar->precio;
printf("nIntroduzca las existencias del articulo: ");
scanf("%i",&ar->existencias);
printf("nIntroduzca el codigo de la provincia: ");
gets(aux);
ar->cod_prov=(char*)malloc((strlen(aux)+1)*sizeof(char));
strcpy(ar->cod_prov,aux);
fflush(stdin);
printf("nIntroduzca las notas del articulo: ");
gets(aux);
ar->notas=(char*)malloc((strlen(aux)+1)*sizeof(char));
strcpy(ar->notas,aux);
fflush(stdin);
}
int InsertarNodoArt(struct nodo_articulo **principio,struct nodo_articulo *nodo_nuevo)
{
struct nodo_articulo *anterior;
int ya_esta;
if(*principio==NULL)
{
*principio=nodo_nuevo;
nodo_nuevo->sig=NULL;
}
else
{
anterior=BuscarNodoArtInsertar(principio,nodo_nuevo,&ya_esta);
if(ya_esta)
return 0;
else
if(anterior==NULL)
{
nodo_nuevo->sig=*principio;
*principio=nodo_nuevo;
}
else
{
nodo_nuevo->sig=anterior->sig;
anterior->sig=nodo_nuevo;
}
}
}
struct nodo_articulo *BuscarNodoArtInsertar(struct nodo_articulo *principio,struct nodo_articulo *nodo_buscado,int *repetido)
{
struct nodo_articulo *aux;
int comparacion;
aux = principio;
comparacion =strcmp(nodo_buscado->inf_articulo.cod_art,aux->inf_articulo.cod_art);
if(comparacion == 0)
{
*repetido = 1;
return NULL;
}
else if (comparacion > 0 && aux->sig == NULL)
{
*repetido =0;
return aux;
}
else if(comparacion < 0)
{
*repetido = 0;
return NULL;
}
while(aux->sig !=NULL)
{
comparacion = strcmp(nodo_buscado->inf_articulo.cod_art,aux->inf_articulo.cod_art);
if(comparacion == 0)
{
*repetido = 1;
return NULL;
}
else if(comparacion < 0)
{
*repetido = 0;
return aux;
}
aux = aux->sig;
}
return aux;
}
void mostrar_articulo(struct articulo *art)
{
printf("nArticulo: %s",art->cod_art);
printf("nNombre: %s",art->nombre);
printf("nDescripcion: %s",art->desc);
printf("nPrecio: %f",art->precio);
printf("nExistencias: %i",art->existencias);
printf("nProvincia: %s",art->cod_prov);
printf("nNotas: %s",art->notas);
getch();
}
int BorrarNodoArt(struct nodo_articulo **principio,struct nodo_articulo *nodo_borrar)
{
struct nodo_articulo *anterior, *a_borrar;
int esta,no_esta=0;
if(*principio == NULL)
{
esta=0;
return esta;
}
else
{
anterior=BuscarNodoArtBorrar(principio, nodo_borrar,&no_esta);
if(!esta)
return esta;
else if(anterior == NULL)
{
a_borrar=*principio;
*principio=a_borrar->sig;
free(a_borrar);
}
else
{
a_borrar=anterior->sig;
anterior->sig=a_borrar->sig;
free(a_borrar);
}
}
}
struct nodo_articulo *BuscarNodoArtBorrar(struct nodo_articulo *principio,struct nodo_articulo *nodo_buscado,int *esta)
{
struct nodo_articulo *aux;
int comparacion;
aux=principio;
comparacion=CompararArticulosCod(&nodo_buscado->inf_articulo,&aux->inf_articulo);
if(comparacion == 0)
{
*esta=1;
return NULL;
}
else if(aux->sig == NULL)
{
*esta=0;
return NULL;
}
while(aux->sig !=NULL)
{
comparacion = CompararArticulosCod(&nodo_buscado->inf_articulo,&aux->inf_articulo);
if(comparacion == 0)
{
*esta = 1;
return aux;
}
else if(comparacion < 0)
{
*esta = 0;
return NULL;
}
else aux = aux->sig;
}
*esta = 0;
return NULL;
}
JuanK:
Aque te refieres con lo de los comentarios.??
Juank
alama:
A lo q pone entre /* */,se llama asi,no?,bueno pero solo m falta el q pone
/*Buscar el nodo a borrar*/,gracias:hippi:
JuanK:
ayudaria mucho si colocas el codigo identado..
utilizando antes del codigo:
["code"] y al final ["/code"]
logicamente sin las comilals..
o sino anexando el archivo...
Juank
alama:
no te entiendo!q quieres q ponga?o como lo quieres q lo ponga?:question:
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa