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 !!
Aquí les va mi código !!
Código [Seleccionar]
#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;
}