Tipo de Datos Abstracto Pila a void I

Tipo de Datos Abstracto Pila a void I

Comenzamos una serie de articulos dedicados a una nueva versión del tipo de datos abstracto Pila, más genérica, que podrá contener cualquier tipo de datos.

Nuestro primer objetivo es crear el fichero .h con las cabeceras de las funciones y procedimientos básicos que emplearemos. Evidentemente, se podrán añadir nuevas funciones y procedimientos, ya dependerá de las funcionalidades que requiera el problema.

Vamos a empezar por mostrar el código:

#ifndef PILAVOID
#define PILAVOID

typedef void *pila;

pila p_nueva ( int tam );
int p_vacia ( pila p );
void p_mete ( pila p, void *e );
void p_saca ( pila p, void *e );
void p_dest ( pila* p );
pila p_copy ( pila p );

#endif

Con éste tipo de datos vamos a conseguir una gran generalidad, usando para ello punteros a void. Dejaremos al usuario realizar los cast sobre los punteros a void devueltos.

Para el constructor, deberemos tener en cuenta que haya memoria para el nuevo objeto. Devolverá una pila vacía. El tamaño del tipo base vendrá expresado con el argumento tam.

En la función auxiliar p_vacia, devolverá un elemento distinto de cero si la pila no contiene ningún elemento y 0 si contiene algún elemento.

En el procedimiento meter un elemento en la pila, debemos tener en cuenta que haya memoria para el nuevo elemento y que la pila esté creada. Realizadas las comprobaciones añadirá un elemento al principio de la Pila.

Para el procedimiento dedicado a sacar un elemento, la pila deberá existir y habrá que comprobar que no esté vacía. Devolverá un elemento y lo eliminará de la Pila.

El procedimiento destructor, debe comprobar inicialmente que la pila exista y no esté vacía. Libera la memoria ocupada por la Pila en la memoria y le asigna a la variable el valor NULL.

Por último, la pila copiar comprueba si existe memoria suficiente para la nueva pila, y devuelve una copia de la pila que le pasamos como argumento.

Como siempre, invito a mis seguidores a que comenten y propongan alternativas para éste tipo de dato abstracto Pila.

No Comments

Post a Comment