#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
struct pilanodo {
int dato;
struct pilanodo *sig;
};
typedef struct pilanodo PILA;
typedef PILA *PILAPTR;
void menu(void);
void push(PILAPTR *, int);
int pop(PILAPTR *);
int vacia (PILAPTR);
void imprime (PILAPTR);
main()
{ PILAPTR pilaptr = NULL;
int opcion;
int valor;
menu();
printf ("\n\n Selecciona una de las siguientes opciones:");
scanf ("%d", &opcion);
while (opcion!= 4)
{switch (opcion)
{case 1: printf ("\n\n Dame el valor del elemento a guardar: ");
scanf ("%d", &valor);
push (&pilaptr, valor);
menu();
printf ("\n\n Elige una opcion :");
scanf ("%d", &opcion);
break;
case 2: if(!vacia(pilaptr))
printf("\n\n El valor extraido de la pila es %d", pop(&pilaptr));
case 3: imprime(pilaptr);
menu();
printf ("\n\n Elige una opcion :");
scanf ("%d", &opcion);
break;
default : printf("\n\n Ingresaste un numero no valido\n\n");
printf("\n\n || Por favor reinicie el programa ||\n\n");
getch();
}
}
}
void menu(void) {
system("cls");
printf("\n\n Operaciones disponibles con la Pila");
printf("\n\n 1.- Agregar un elemento a la pila");
printf("\n\n 2.- Eliminar un elemento a la pila");
printf("\n\n 3.- Recorrer la pila");
printf("\n\n 4.- Fin");
};
void push(PILAPTR *aux, int valor)
{PILAPTR aux1;
aux1=((PILAPTR)malloc(sizeof (PILA)));
if(aux1!=NULL)
{ aux1->dato = valor;
aux1->sig = NULL;
if(*aux==NULL)
*aux=aux1;
else{ aux1->sig = *aux;
*aux = aux1;
}
}
else printf ("\n\n No se creo el nodo por que no hay memoria suficiente");
}
int pop(PILAPTR *aux)
{ PILAPTR aux1; int sale;
aux1 = *aux;
*aux = aux1 -> sig;
sale = aux1->dato;
free(aux1);
return (sale);
}
int vacia(PILAPTR aux){
return aux==NULL;
}
void imprime(PILAPTR aux)
{ if (aux == NULL)
printf("\n || La pila esta vacia || \n\n");
else
{ printf("\n La pila es: \n\n");
printf("\n\n Tope");
while (aux != NULL)
{ printf("\n %4d", aux->dato);
aux = aux->sig;
}
printf("\n Fondo\n\n");
}
printf("\n\n Enter para regresar...");
getch();
}
No hay comentarios:
Publicar un comentario