• Sábado 27 de Abril de 2024, 19:08

Autor Tema:  duda sobre listas anidadas y pilas  (Leído 2778 veces)

m3t4l3ro

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
duda sobre listas anidadas y pilas
« en: Lunes 14 de Junio de 2010, 04:05 »
0
Hola gente, tengo una duda estoy programando una tarea pa mañana y no se que es lo que pasa con un error.

el programa crea un numero de pilas con un numero de items a apilar dado por el usuario, estas pilas las quiero meter en una lista dinamica, para tener pila1->pila2->....
implemente por separado la funcion para crear las pilas, y dentro de ella, llame a la funcion para crear la lista, le paso la pila y me crea un nodo

este es el codigo completo:

#include<stdio.h>
#include<stdlib.h>
#include <time.h>

FILE *dat;
typedef struct pila{
int codigo;
char nombre[20];
struct pila *sig;
}*PILA;


typedef struct NODO{
PILA *pila;
struct NODO *next;
};


NODO * CrearLista(PILA*,NODO*);
NODO * push(PILA *, NODO *);
void MostrarLista(NODO*);












main(){
int n,m,i;
PILA p=NULL;
NODO *head=NULL;

dat=fopen("containers.txt", "r");
printf("Ingrese el numero de Pilas : ");
scanf("%d", &m);
system("cls");
printf("Ingrese el tamaño de las Pilas : ");
scanf("%d", &n);

for(i=0;i<m;i++)
head=push(&p,head);

if(!fclose(dat))
printf( "n<Fichero datos_secadoras.txt cerrado>n" );
else
{
printf( "n<Error: datos_secadoras.txt NO CERRADO>n" );
}


MostrarLista(head);
system("pause");


}

NODO * push(PILA *pila, NODO *head)
{
PILA aux;

aux = (PILA) malloc(sizeof(struct pila));
aux->sig = NULL;

if(pila == NULL)
{
aux->codigo = rand();
fscanf( dat, "%sn", &aux->nombre);
*pila = aux;
printf("entro");
}
else
{
aux->codigo = rand();
fscanf( dat, "%sn", &aux->nombre);
aux->sig = *pila;
*pila = aux;
}

head=CrearLista(pila,head);

}

NODO * CrearLista(PILA *pila,NODO *head)
{


NODO *p,*r;
p=head;
if(head==NULL)
{
p=new(NODO);
head=p;
p->pila=pila;
p->next=NULL;


}else {while(p->next!=NULL)
p=p->next;

r=new(NODO);
p->pila=pila;
p->next=r;
r->next=NULL;

}

return(head);

}


void MostrarLista(NODO *head)
{

int i=0;
NODO *p;
p=head;

while(p!=NULL)
{printf("%dn%snn", p->pila.codigo, p->pila.nombre);
p=p->next;}
printf("NULLnn");
}









el error me lo da en la funcion MostrarLista

en la linea {printf("%dn%snn", p->pila.codigo, p->pila.nombre);


y el error que me da es

1ro:
`codigo' has not been declared

2do

request for member of non-aggregate type before ',' token



no se que pasa, debe ser error de puntos, y flechas,, o quizas es con (*p)->pila
no se
alguien que me ayude porfa es pa mañana la tarea y es solo una parte de ella..


saludos!

lilezek

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: duda sobre listas anidadas y pilas
« Respuesta #1 en: Lunes 14 de Junio de 2010, 16:46 »
0
Te lo he reestructurado un poquillo, y te he eliminado un puntero que era redundante en una función en la que realmente no necesitas puntero. El programa no funciona (no sé que es lo que intentas) pero compila, así que a partir de aquí deberías poder continuar.

Por ejemplo, en la estructura NODO tienes una PILA*, pero PILA ya es un puntero pila*, entonces sería un pila**, cosa que no necesitas.

Código: C++
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include <time.h>
  4.  
  5. FILE *dat;
  6. typedef struct pila
  7. {
  8.     int codigo;
  9.     char nombre[20];
  10.     struct pila *sig;
  11. }*PILA;
  12.  
  13.  
  14. struct NODO
  15. {
  16.     PILA pila;
  17.     struct NODO *next;
  18. };
  19.  
  20.  
  21. NODO * CrearLista(PILA,NODO*);
  22. NODO * push(PILA*, NODO *);
  23. void MostrarLista(NODO*);
  24.  
  25. void main(int argc,char ** argv)
  26. {
  27.     int n,m,i;
  28.     PILA p=NULL;
  29.     NODO *head=NULL;
  30.  
  31.     dat=fopen("containers.txt", "r");
  32.     printf("Ingrese el numero de Pilas : ");
  33.     scanf("%d", &m);
  34.     system("cls");
  35.     printf("Ingrese el tamaño de las Pilas : ");
  36.     scanf("%d", &n);
  37.  
  38.     for(i=0;i<m;i++)
  39.         head=push(&p,head);
  40.  
  41.     if(!fclose(dat))
  42.         printf( "n<Fichero datos_secadoras.txt cerrado>n" );
  43.     else
  44.         printf( "n<Error: datos_secadoras.txt NO CERRADO>n" );
  45.  
  46.  
  47.     MostrarLista(head);
  48.     system("pause");
  49. }
  50.  
  51. NODO * push(PILA * pila, NODO *head)
  52. {
  53.     PILA aux;
  54.  
  55.     aux = (PILA) malloc(sizeof(struct pila));
  56.     aux->sig = NULL;
  57.  
  58.     if(pila == NULL)
  59.     {
  60.         aux->codigo = rand();
  61.         fscanf( dat, "%sn", &aux->nombre);
  62.         *pila = aux;
  63.         printf("entro");
  64.     }
  65.     else
  66.     {
  67.         aux->codigo = rand();
  68.         fscanf( dat, "%sn", &aux->nombre);
  69.         aux->sig = *pila;
  70.         *pila = aux;
  71.     }
  72.  
  73.     return CrearLista(*pila,head);
  74. }
  75.  
  76. NODO * CrearLista(PILA pila,NODO *head)
  77. {
  78.  
  79.  
  80.     NODO *p,*r;
  81.     p=head;
  82.     if(head==NULL)
  83.     {
  84.         p=new(NODO);
  85.         head=p;
  86.         p->pila=pila;
  87.         p->next=NULL;
  88.  
  89.  
  90.     }
  91.     else
  92.     {
  93.         while(p->next!=NULL)
  94.             p=p->next;
  95.         r=new(NODO);
  96.         p->pila=pila;
  97.         p->next=r;
  98.         r->next=NULL;
  99.     }
  100.  
  101.     return(head);
  102. }
  103.  
  104.  
  105. void MostrarLista(NODO *head)
  106. {
  107.     int i=0;
  108.     NODO *p;
  109.     p=head;
  110.  
  111.     while(p != NULL)
  112.     {
  113.         printf("%dn%snn", p->pila->codigo, p->pila->nombre);
  114.         p=p->next;
  115.     }
  116.     printf("NULLnn");
  117. }
  118.