[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