Ver Mensaje Individual
  #8 (permalink)  
Antiguo 19/07/2012, 21:08
maur1c10
 
Fecha de Ingreso: octubre-2009
Mensajes: 25
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: problema con programa pilas

muchas gracias ecfisa y a versinlimites por ayudarme con tanto ya me funciona bien al final lo de getchar() era por como estaba usando el Pop(), gracias de nuevo

aqui dejo el codigo por si le sirve a alguien:
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=0,val,x=1;
   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);  
       scanf("%s",nom);
       printf("\n digite el apellido de la persona no. %i: ",i+1);
       scanf("%s",ape);
       printf("\n digite la edad de la persona no. %i: ",i+1); 
       scanf("%i",&val);     
       Push(&pila,val,ape,nom);}
   printf("\n sacando datos de la pila, datos ingresados:");
   i=0;
   while(x!=0){
    salida=Pop(&pila);
    x=salida.valor;
    if(x!=0){                
    printf("\n nombre de la persona %i+1: %s ",i,salida.nombre);
    printf("\n apellido de la persona %i+1: %s",i,salida.apellido);
    printf("\n edad de la persona %i: %i+1",i,salida.valor);}   
    i++;              
    }                  
   fflush(stdin);
   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;
      strcpy(salida.nombre,"x");
      strcpy(salida.apellido,"x");       
      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,nodo->datos.apellido);
   strcpy(salida.nombre,nodo->datos.nombre);
   salida.valor=nodo->datos.valor;
   /* Borrar el nodo */
   free(nodo);
   return salida;}