necesito ayuda, estoy aprendiendo pilas y quiero hacer una pila que en cada nodo tenga una estructura y el puntero hacia el sig. elemento, pero en la funcion pop tengo errores estoy usando el dev c++, no se si como lo estoy haciendo es correcto o debo usar otro metodo aqui les dejo mi codigo, gracias de antemano por la ayuda.
Código:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct agenda{
int valor;
char nombre[30];
char apellido[30];};
typedef struct _nodo {
struct agenda datos;
struct _nodo *siguiente;
} tipoNodo;
char *nomaux, *apeaux;
int *vaux;
typedef tipoNodo *pNodo;
typedef tipoNodo *Pila;
/* Funciones con pilas: */
void Push(Pila *l,int pvalor,char papellido[],char pnombre[]);
struct agenda Pop(Pila *l);
int main() {
struct agenda salida;
int num,i,val;
char nom[30],ape[30];
nomaux=nom;
apeaux=ape;
vaux=&val;
Pila pila = NULL;
printf("Ingreso de datos de personas, cuantas personas son: \n");
scanf("%i",&num);
for(i=0;i<num;i++){
printf("\n digite el nombre de la persona no. %i",i+1);
gets(nom);
printf("\n digite el apellido de la persona no. %i",i+1);
gets(ape);
printf("\n digite la edad de la persona no. %i",i+1);
scanf("%i",&val);
Push(&pila,val,ape,nom);}
getchar();
return 0;
}
void Push(Pila *pila,int pvalor,char papellido[30],char pnombre[30]){
pNodo nuevo;
/* Crear un nodo nuevo */
nuevo = (pNodo)malloc(sizeof(tipoNodo));
nuevo->datos.valor = pvalor;
strcpy(nuevo->datos.nombre,pnombre);
strcpy(nuevo->datos.apellido,papellido);
/* Añadimos la pila a continuación del nuevo nodo */
nuevo->siguiente = *pila;
/* Ahora, el comienzo de nuestra pila es en nuevo nodo */
*pila = nuevo;}
struct agenda Pop(Pila *pila){
struct agenda salida;
pNodo nodo; /* variable auxiliar para manipular nodo */
/* Nodo apunta al primer elemento de la pila */
nodo = *pila;
if(!nodo){
salida.valor=0;
return salida; /* Si no hay nodos en la pila retornamos 0 */}
/* Asignamos a pila toda la pila menos el primer elemento */
*pila = nodo->siguiente;
/* Guardamos
el valor de retorno */
strcpy(salida.apellido,pila->datos.apellido);
strcpy(salida.nombre,pila->datos.nombre);
strcpy(salida.valor,pila->datos.valor);
/* Borrar el nodo */
free(nodo);
return salida;}
me da los sig. errores por cada linea que esta en rojo
`datos' has not been declared
request for member of non-aggregate type before '.' token