Autor
|
Tema: Ayuda solucionar error en PILAS en C. (Leído 6,379 veces)
|
ml0x
Desconectado
Mensajes: 1
|
Hola tengo una duda, al imprimir mi pila se cae el programa y no entiendo por que ! me estoy frustrando, agradecería muchísimo su ayuda. de ante mano Muchas gracias! Aquí les va mi código !! #include <stdio.h> #include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//creacion de la estructura typedef struct Pila { int *dato; struct Pila *sgte; }Pila;
//asignacion de memoria Pila *asignarMemoria(){ return (Pila *)malloc(sizeof(Pila)); }
//apilado Pila *apilar(Pila *p, int dato){ Pila *q = asignarMemoria(); //Pila auxiliar q->dato=dato; q->sgte=NULL; if(p==NULL){ return q; } q->sgte = p; p = q; return p; }
//desapilado Pila *desapilar(Pila *p){ if(p == NULL){ return p; } Pila *q = p->sgte; p->sgte = NULL; free(p); //liberar memoria return q; }
//listar la pila void mostrarPila (Pila *p){ if(p!=NULL){ Pila *q = p; //pila auxiliar while(q!=NULL){ printf("%d ", q->dato); q = desapilar(q); } return; } printf("No hay elementos en la Pila\n"); } //buscar un elemento en la pila int buscarPila(Pila *p, int dato){ if(p!=NULL){ Pila *q = p; //pila auxiliar while(q!=NULL){ if(q->dato==dato){ return 1; //verdadero si lo encuentra. } q = desapilar(q); } return 0; //falso, si no lo encuentra. } return 0; //falso, si no lo encuentra. }
int main(int argc, char *argv[]) { //Menu Principal. int opcionMenu, volverIntentar, scanfValidador; srand(time(NULL)); //Semilla del creador de numeros Randoms do{ do{ printf("Seleccione una opcion\n"); printf("[1] Ejercicio 1\n[2] Ejercicio 2\n[3] Ejercicio 3\n[4] Salir\n"); scanfValidador = scanf("%d", &opcionMenu); fflush(stdin); if(scanfValidador!=1){ printf("\nOpcion no valida, ingrese un valor numererico positivo.\n"); puts(""); } }while(scanfValidador!=1); //Validador if(opcionMenu == 1){ // Crear y listar una pila con n elementos. Ingresar un dato y consultar cuantas veces se repite y en que posiciones. Pila *pila; int n, i; //tamaño n de la pila int numRand; int scanfValidador3; do{ puts("Ingrese tamaño de la Pila la cual tendra numeros random del [0-10]"); scanfValidador3 = scanf("%d", &n); fflush(stdin); if(scanfValidador3!=1){ printf("\nOpcion no valida, ingrese un valor numererico positivo.\n"); puts(""); } }while(scanfValidador3!=1); //Validador i=n; while(n!=0){ //Recorrer Pila numRand = rand() % 11; // genera un numero Random entre el 0 y el 10 //pila->sgte=NULL; pila = apilar(pila, numRand); n--; } while(i!=0){ mostrarPila(pila); i--; } } else if(opcionMenu == 2){ printf("Opcion 2\n"); } else if(opcionMenu == 3){ printf("Opcion 3\n"); } else if(opcionMenu == 4){ exit(0); } else{ puts(""); printf("Opcion invalida\n"); puts(""); } int scanfValidador2; do{ printf("\nPara volver a intentar preciona [1] y da enter.\nPara salir use cualquier otro numero y precione enter.\n"); puts(""); scanfValidador2 = scanf("%d", &volverIntentar); fflush(stdin); if(scanfValidador2!=1){ printf("\nOpcion no valida, ingrese un valor numererico positivo.\n"); puts(""); } }while(scanfValidador2!=1); //Validador }while(volverIntentar==1); return 0; }
|
|
|
En línea
|
|
|
|
class_OpenGL
Desconectado
Mensajes: 437
Si usas Direct3D, no eres mi amigo :P
|
Un error que he visto es el siguiente: void mostrarPila (Pila *p){ if(p!=NULL){ Pila *q = p; //pila auxiliar while(q!=NULL){ printf("%d ", q->dato); // Aquí interpretas el dato de q como un puntero a entero q = desapilar(q); } return; } printf("No hay elementos en la Pila\n"); }
Pila *apilar(Pila *p, int dato){ Pila *q = asignarMemoria(); //Pila auxiliar q->dato=dato; // Aquí interpretas el dato de q como un entero q->sgte=NULL; if(p==NULL){ return q; } q->sgte = p; p = q; return p; }
Básicamente, estás interpretando de dos formas diferentes una variable. O bien interpretas la variable como un puntero, o bien como un entero. En este último caso, yo cambiaría de la estructura el tipo 'int*' a 'int'
|
|
|
En línea
|
| Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL |
|
|
|
|
class_OpenGL
Desconectado
Mensajes: 437
Si usas Direct3D, no eres mi amigo :P
|
¿Por qué en la función apilar no retornas directamente q?
|
|
« Última modificación: 10 Abril 2016, 15:50 pm por class_OpenGL »
|
En línea
|
| Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL |
|
|
|
|
lfgmespino
Desconectado
Mensajes: 12
|
Tiene muchas cosas mal o por lo menos, rarillas. Te he corregido el mínimo necesario para que funcione. #include <stdio.h> #include <stdlib.h> #include <time.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ //creacion de la estructura typedef struct Pila { int dato; struct Pila *sgte; } Pila; //asignacion de memoria Pila *asignarMemoria(){ return (Pila *)malloc(sizeof(Pila )); } //apilado Pila *apilar(Pila *p, int dato){ Pila *q = asignarMemoria(); //Pila auxiliar q->dato=dato; q->sgte=NULL; if(p==NULL){ return q; } q->sgte = p; p = q; return p; } //desapilado Pila *desapilar(Pila *p){ if(p == NULL){ return p; } Pila *q = p->sgte; p->sgte = NULL; // free(p); //liberar memoria return q; } //listar la pila void mostrarPila (Pila *p){ while(p) { p = p->sgte; } } /* if(p!=NULL){ Pila *q = p; //pila auxiliar while(q!=NULL){ printf("%d ", q->dato); q = desapilar(q); } return; } printf("No hay elementos en la Pila\n"); } */ //buscar un elemento en la pila int buscarPila(Pila *p, int dato){ if(p!=NULL){ Pila *q = p; //pila auxiliar while(q!=NULL){ if(q->dato==dato){ return 1; //verdadero si lo encuentra. } q = desapilar(q); } return 0; //falso, si no lo encuentra. } return 0; //falso, si no lo encuentra. } int main(int argc, char *argv[]) { //Menu Principal. int opcionMenu, volverIntentar, scanfValidador; srand(time(NULL )); //Semilla del creador de numeros Randoms do{ do{ printf("Seleccione una opcion\n"); printf("[1] Ejercicio 1\n[2] Ejercicio 2\n[3] Ejercicio 3\n[4] Salir\n"); scanfValidador = scanf("%d", &opcionMenu ); if(scanfValidador!=1){ printf("\nOpcion no valida, ingrese un valor numererico positivo.\n"); } }while(scanfValidador!=1); //Validador if(opcionMenu == 1){ // Crear y listar una pila con n elementos. Ingresar un dato y consultar cuantas veces se repite y en que posiciones. Pila *pila; int n, i; //tamaño n de la pila int numRand; int scanfValidador3; do{ puts("Ingrese tamaño de la Pila la cual tendra numeros random del [0-10]"); scanfValidador3 = scanf("%d", &n ); if(scanfValidador3!=1){ printf("\nOpcion no valida, ingrese un valor numererico positivo.\n"); } }while(scanfValidador3!=1); //Validador i=n; while(n!=0){ //Recorrer Pila numRand = rand() % 11; // genera un numero Random entre el 0 y el 10 //pila->sgte=NULL; pila = apilar(pila, numRand); n--; } // while(i!=0) { mostrarPila(pila); // i--; // } } else if(opcionMenu == 2){ } else if(opcionMenu == 3){ } else if(opcionMenu == 4){ } else{ } int scanfValidador2; do{ printf("\nPara volver a intentar preciona [1] y da enter.\nPara salir use cualquier otro numero y precione enter.\n"); scanfValidador2 = scanf("%d", &volverIntentar ); if(scanfValidador2!=1){ printf("\nOpcion no valida, ingrese un valor numererico positivo.\n"); } }while(scanfValidador2!=1); //Validador }while(volverIntentar==1); return 0; }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda solucionar error UBUNTU 11.04 64bits
GNU/Linux
|
777Rubenix777
|
3
|
5,593
|
29 Abril 2011, 23:10 pm
por 777Rubenix777
|
|
|
Como solucionar el error 414 de Google
Desarrollo Web
|
Graphixx
|
0
|
7,552
|
16 Julio 2011, 05:58 am
por Graphixx
|
|
|
SOLUCIONAR ERROR 0XC004E003
Windows
|
kikagauto
|
0
|
17,182
|
28 Abril 2012, 06:33 am
por kikagauto
|
|
|
Ayuda! Hay un error que no se como solucionar en Python
Python
|
LucchettiFan
|
4
|
3,808
|
7 Enero 2024, 13:36 pm
por LucchettiFan
|
|
|
MOVIDO: Ayuda! Hay un error que no se como solucionar en Python
Programación General
|
fary
|
0
|
1,673
|
6 Enero 2024, 17:49 pm
por fary
|
|