19/07/2012, 17:07
|
| | Fecha de Ingreso: octubre-2009
Mensajes: 25
Antigüedad: 15 años, 2 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 |