Programa de prueba
El programa consiste en insertar tres números enteros y luego imprimir
la pila teniendo en cuenta las siguientes opciones :
1) Imprimir y eliminar datos
2) Imprimir y conservar la información y orden de la pila
3) Imprimir e invertir el orden de la pila
Salida del programa
#include<stdio.h>
#include<stdlib.h>
/* Se declara de que tipo va a ser TipoP */
typedef int TipoP;
#include "tadpila.h"
/* funcion para invertir los elementos de la pila */
Pila invertir_pila(Pila stack)
{
Pila aux = inicPila();
while(!vaciaPila(stack))
{
adicPila(aux,infoPila(stack));
elimPila(stack);
}
return aux;
}
/* Funcion especifica que imprime la variable aux */
void imp_info(TipoP aux)
{
printf("\t %d",aux);
}
/*
** nota : Para ir avanzando en la pila, inevitablemente
debemos ir eliminando los elementos del tope.
Despues de eliminar dichos nodos, solo queda en pie
el header de la pila.
Es por eso que nos ponemos en tres casos :
1.- Imprimir y eliminar datos
pil = imprimir_pila(pil,imp_info,1);
2.- Imprimir y conservar la informacion
y orden de la pila
pil = imprimir_pila(pil,imp_info);
3.- Imprimir e invertir el orden de la pila
pil = imprimir_pila(pil,imp_info,0,1);
*/
Pila imprimir_pila(Pila stack,void (*imp)(TipoP), int eliminar = 0,int invertir = 0)
{
if (stack == NULL)
{
printf("\n Error! Pila == NULL");
return NULL;
}
else
{
Pila pil_aux = inicPila();
TipoP aux;
while(!vaciaPila(stack))
{
aux = infoPila(stack);
elimPila(stack);
imp(aux);
if(!eliminar) adicPila(pil_aux,aux);
}
if (invertir == 0) pil_aux = invertir_pila(pil_aux);
return pil_aux;
}
}
Pila generar_pila(Pila stack)
{
if(stack == NULL) stack = inicPila();
adicPila(stack,1);
adicPila(stack,2);
adicPila(stack,3);
return stack;
}
int main()
{
Pila pil = NULL;
/* se insertaran los datos 1,2,3
quedando la pila de la siguiente forma
1 -> 1 tope : 1
2 -> 2 1 tope : 2
3 -> 3 2 1 tope : 3
*/
printf("\n Adicionando 1,2,3 ... imprimir la pila \n");
pil = generar_pila(pil);
/* imprime la pila conservando los datos y el orden de la pila */
printf("\n PILA : ");
pil = imprimir_pila(pil,imp_info);
printf("\n\n Imprimir la pila e invertirla en el proceso ...\n\n PILA : ");
pil = imprimir_pila(pil,imp_info,0,1);
printf("\n\n PILA (invertida) : ");
pil = imprimir_pila(pil,imp_info);
printf("\n\n Imprimir la pila , eliminando los datos \n\n PILA : ");
pil = imprimir_pila(pil,imp_info,1);
if (vaciaPila(pil)) printf("\n\n Despues de imprimir la pila esta vacia \n\n");
destruirPila(pil);
return 0;
}
bajar TAD y programa de prueba