Dom Ago 22, 2010 9:28 pm
Bueno, empiezo con una serie de posts que nos van a ayudar a manejar tipos abstractos de datos en C.
En este primer posteo voy a explicarles brevemente qué son y nos iniciaremos con pilas (stacks)
Los Tipos Abstractos de Datos (TAD) son básicamente estructuras definidas por el usuario con sus respectivos métodos.
Para la implementación en C++ definiríamos clases (classes) pero en C son estructuras (structs).
Pilas:
Podemos definir el tipo de dato pila (stack) como un tipo especial de lista (list), donde cada inserción o borrrado se
efectúa de uno en uno, siendo éste llamado el tope de la pila.
Si hacemos la analogía, para entenderlo mejor, tendríamos que imaginarnos una pila de platos en nuestra cocina.
El primero en "sacar" fue el último en posicionar. Es por eso que normalmente a este TAD se lo denomina LIFO (last in first out) - el primero en ingresar, es el último en salir.
Cuando ingresamos un dato a la pila se lo denomina "push"
Cuando lo sacamos de la pila, denominamos a este acto "pop"
Implementacion de pilas usando arrays y structs.
Bueno, este es 100 % tutorial mío.
Si les gustó, voy a seguir con esta breve introduccion a los TAD en C.
(si no, no sigo más)
Se escuchan criticas.
Saludos a todos en mi primer post.
To be continued ---->
En este primer posteo voy a explicarles brevemente qué son y nos iniciaremos con pilas (stacks)
Los Tipos Abstractos de Datos (TAD) son básicamente estructuras definidas por el usuario con sus respectivos métodos.
Para la implementación en C++ definiríamos clases (classes) pero en C son estructuras (structs).
Pilas:
Podemos definir el tipo de dato pila (stack) como un tipo especial de lista (list), donde cada inserción o borrrado se
efectúa de uno en uno, siendo éste llamado el tope de la pila.
Si hacemos la analogía, para entenderlo mejor, tendríamos que imaginarnos una pila de platos en nuestra cocina.
El primero en "sacar" fue el último en posicionar. Es por eso que normalmente a este TAD se lo denomina LIFO (last in first out) - el primero en ingresar, es el último en salir.
Cuando ingresamos un dato a la pila se lo denomina "push"
Cuando lo sacamos de la pila, denominamos a este acto "pop"
Implementacion de pilas usando arrays y structs.
- Código:
//pila.h
#define MAXPILA 10
typedef char tipo_dato;
typedef enum {FALSE=0, TRUE} bool;
typedef struct nodo_pila{
int tope;
tipo_dato valor[MAXPILA];
} pila;
bool vacia (pila *);
bool llena (pila *);
void inicializ (pila *);
void push (tipo_dato, pila *);
void pop (tipo_dato, pila *);
void Error(char *);
// funcion push, ingresa un dato nuevo a la pila
void push (tipo_dato dato, pila *ptr_pila)
{
if (ptr_pila->tope >=MAXPILA)
Error ("Pila llena");
else
ptr_pila->valor[ptr_pila->tope++]=dato;
}
//------
//------
//funcion pop , saca un dato de la pila
void pop (tipo_dato *ptr_dato, pila *ptr_pila)
{
if (ptr_pila->tope <=0)
Error ("Pila vacia");
else
*ptr_dato=ptr_pila->valor[--ptr_pila->tope];
}
//--------
//--------
// funcion Error
void Error (char *s)
{
fprinf (stderr,"%s\n",s);
exit (1);
}
//-------
//-------
//funcion vacia: devuelve TRUE si pila vacia (no 0)
bool vacia (pila *ptr_pila)
{
return ptr_pila->tope<=0;
}
//-------
//-------
//funcion llena: devuelve TRUE si pila llena (no 0)
bool llena (pila *ptr_pila)
{
return ptr_pila->tope>=MAXPILA;
}
//-------
//-------
//funcion inicializ: inicializa la pila vacia
void inicializ (pila *ptr_pila)
{
ptr_pila->tope=0;
}
Bueno, este es 100 % tutorial mío.
Si les gustó, voy a seguir con esta breve introduccion a los TAD en C.
(si no, no sigo más)
Se escuchan criticas.
Saludos a todos en mi primer post.
To be continued ---->