[C con Clase] listas en c (no c++) xD!
Mariano Demarchi
marchi.hh en gmail.com
Lun Jun 15 07:38:38 CEST 2009
Hola Diego, te dejo un ejemplo con lo que pedis:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct _prefijo{
int dato0;
struct _prefijo *p;
} *prefijo;
typedef struct _empresa{
char nombre[20]; /*aca guardo el nombre de cada empresa, que no se
repetiran*/
prefijo p; /*esta seria la lista de numeros que tiene esta empresa*/
struct _empresa *siguiente; /*puntero a la siguiente empresa*/
} *empresa;
void add_empresa(empresa *e,char *nom)
{
if(!*e){
*e = (empresa) malloc(sizeof(struct _empresa));
strcpy((*e)->nombre,nom);
(*e)->siguiente = NULL;
(*e)->p = NULL;
}else{
add_empresa(&((*e)->siguiente),nom);
}
}
void add_num(empresa e,char *nom,int val)
{
empresa tmp0 = e;
prefijo tmp1;
if(!e) return;
while(strcmp(tmp0->nombre,nom))
if(tmp0->siguiente) tmp0 = tmp0->siguiente;
else return;
if(!(tmp0->p)){
tmp0->p = (prefijo) malloc(sizeof(struct _prefijo));
tmp0->p->dato0 = val;
tmp0->p->p = NULL;
}else{
tmp1 = tmp0->p;
while(tmp1->p) tmp1 = tmp1->p;
tmp1->p = (prefijo) malloc(sizeof(struct _prefijo));
tmp1->p->dato0 = val;
tmp1->p->p = NULL;
}
}
void show(empresa e)
{
empresa tmp0 = e;
prefijo tmp1;
int cont0 = 1;
int cont1;
printf("\n");
while(tmp0){
printf("Empresa %d - %s\n",cont0,tmp0->nombre);
tmp1 = tmp0->p;
cont1 = 1;
while(tmp1){
printf("\tNumero %d - %d\n",cont1,tmp1->dato0);
cont1++;
tmp1 = tmp1->p;
}
printf("\n");
cont0++;
tmp0 = tmp0->siguiente;
}
}
empresa empresas = NULL;
int main()
{
char buff[32];
int n,m,i,j,val;
printf("Cantidad de empresas: ");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("\nNombre de la empresa %d: ",i+1);
scanf("%s",buff);
add_empresa(&empresas,buff);
printf("\nCantidad de numeros para %s:",buff);
scanf("%d",&m);
for(j=0;j<m;j++){
printf("\nIngrese un numero para %s: ",buff);
scanf("%d",&val);
add_num(empresas,buff,val);
}
}
show(empresas);
return 0;
}
Saludos
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090615/4f5c70a1/attachment.html>
Más información sobre la lista de distribución Cconclase