Bueno asi por encimita...
no debiera haber una función
destruye_pila();
Y por otro lado operaciones como
-copiar pila
-crear copia invertida de la pila
podrian ser de gran utilidad.
Normalmente las librerias de manejo de pilas incluyen otras cosas que no se si esten contempladas dentro de tu alcance:
- Ordenar alfabeticamente
- Ordenar numericamente
- Ordenar alfabeticamente desc
- Ordenar numericamente desc
- 'Concatenar' una pila con otra
- Un metodo que devuelva un string con el contenido de la cabeza de la pila
Otra funcionalidad podria ser por ejemplo que en cada nodo de la pila exista realmente una estructura con un dato tipo void (como ya lo tienes) y un campo que indique que tipo de dato esta almacenado en el nodo, ejemplo
#define 0 TIPO_INDEFINIDO
#define 1 TIPO_CHAR
#define 2 TIPO_INT
#define 3 TIPO_LONG
#define 4 TIPO_CHAR_POINTER
#define 5 TIPO_INT_POINTER
#define 6 TIPO_LONG_POINTER
...
...
...
/* Estructura que actuara como NODO */
struct nodo {
/* Elemento a almacenar */
void *elem;
/* Tipo del elemento a almacenar*/
char tipoDato;
/* Puntero al elemento siguiente */
struct nodo *sig;
}
Una recomendacion para tu programacion es que utilices la notacion al 'estilo pascal' creo que se llama...
es decir para que tu codigo sea un poco mas claro los nombres de las funciones deberian comenzar siempre en mayusculas y si son de nombres compuestos deberia ser mayuscula en la pimera letra de un nuevo nombre.
Y la forma que utilizas actualmente para los nombres de las funciones utilizarla para los nombres de las variables.
Mas tarde hare otros comentarios sobre tu codigo.