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

gracias a ambos por la respuesta me sirivio ya pude ejecutar el programa la funcion push funciona bien ahora tengo un problema con la funcion pop lo que sucede es que a la hora de imprimir me muestra los ingresados menos el ultimo (si meto datos de 3 personas muestra datos de dos personas y no de la ultima ingresada) y se sale probe depurando y me dice que tengo una violacion de acceso a la memoria (fallo de segmentacion) en el momento que deberia mostrar al ultimo

aqui el codigo
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,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:");
   salida=Pop(&pila);
   x=salida.valor;
   while(x!=0){   
    printf("\n nombre de la persona %i: %s ",i,salida.nombre);
    printf("\n apellido de la persona %i: %s",i,salida.apellido);
    printf("\n edad de la persona %i: %i",i,salida.valor);    
    salida=Pop(&pila);
    x=salida.valor;              
    }                  
   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,(*pila)->datos.apellido);
   strcpy(salida.nombre,(*pila)->datos.nombre);
   salida.valor=(*pila)->datos.valor;
   /* Borrar el nodo */
   free(nodo);
   return salida;}

Última edición por maur1c10; 19/07/2012 a las 17:16