/* =============================================================================================
   Wilfredo Cruz Yarlequé                              wcruzy@gmail.com
   Piura, Perú, Octubre 04 de 2019
   
   Programa para manejo de Pilas en base a un arreglo
   ============================================================================================= */

#include <stdio.h>
#include <stdlib.h>

void menu(void);

void estadoPila(int, char *);

void main()
{
	char x[100];	// arreglo de cien caracteres
	int top=0;	// puntero al tope de la pila
	int opcion;	// opción del menu
	char valor;	// valor a ser ingresado a la pila
	char sale;	// valor que se obtiene de la pila

	menu();		// lista las opciones del menú

	printf("Opcion: ");
	scanf("%d", &opcion);

	while (opcion != 3)
	{
		switch(opcion)
		{
			case 1 : // Insertar un valor en la pila
				if (top < 100)
				{
					printf("Valor a ingresar en la pila: ");
					scanf("\n%c", &valor);
					x[top+1]=valor;
					top++;
					estadoPila(top, x);
				}
				else
					printf("\nPila completamente llena...\n");
				break;
			case 2 : // Retirar elemento superior de la pila
				if (top >=1)
				{
					sale=x[top];
					printf("\nElemento retirado de la pila: %c\n", sale);
					top--;
					estadoPila(top, x);
				}
				else
					printf("\nPila vacía...\n");
				break;
			default :
				printf("\nOpción no valida...\n");
				break;
		}

		printf("Opción: ");
		scanf("%d", &opcion);
	}

	printf("\nFin del programa...\n");

	return;
}

// Despliega las opciones del menu
void menu(void)
{
	printf("Ingrese una de las siguientes opciones:\n"
	       "1 : Insertar un valor a la pila\n"
	       "2 : Retirar el valor en la parte superior de la pila\n"
	       "3 : Salir del programa\n"
	       "\n");

	return;
}

// Muestra el estado de la pila
void estadoPila(int top, char *x)
{
	int i;

	for (i=1; i<=top; i++)
		printf("%c ", x[i]);
	printf("\n");
}