STACK en español significa PILA.
En programación, una pila es un tipo de dato abstracto TDA que se comporta como una pila en la vida real. Por ejemplo, un maso de cartas es una pila, o un conjunto de trastes apilados también. Estos dos objetos apilados se operan tomando o quitando el último objeto de la pila, o sea, el que está más arriba. Está cualidad hace que este tipo de estructura de dato entre en la categoría de LIFO: Last In First Out, es decir, el último en entrar es el primero en salir.
Cada elemento que se va colocando en una pila va quedando en el tope y entre más objetos se pongan más abajo quedarán los demás, es por eso que si se quiere quitar algúno se tiene que quitar primero el de hasta arriba hasta llegar al deseado.
En términos informáticos, a la operación de inserción en una pila se le denomina PUSH y a la operación de sacar se le denomina POP.
Operaciones esenciales de una PILA
- Push() - insertar un elemento en la pila push(elemento)
- Pop() - _quitar un elemento de la pila_pop(elemento)
- peek()- Obten el último elemento de la pila sin removerlo
- isFull()- Checa si la pila esta llena
- esEmpty- Checa si la pila esta vacía
Operaciones esenciales de una PILA en C
Peek()
int peek(){
return stack[top];
}
isFull()
bool isfull() {
if(top == MAXSIZE)
return true;
else
return false;
}
isEmpty()
bool isempty() {
if(top == -1)
return true;
else
return false;
}
Push()
void push(int data) {
if(!isFull()) {
top = top + 1;
stack[top] = data;
} else {
printf("Could not insert data, Stack is full.\n");
}
}
Pop()
int pop(int data) {
if(!isempty()) {
data = stack[top];
top = top - 1;
return data;
} else {
printf("Could not retrieve data, Stack is empty.\n");
}
}
Implementación del la PILA explicada
Ya que dimos un vistazo a lo que es una pila, sus operaciones básicas y ejemplos en C (lenguaje de programación de machos Alfas), vamos a usar nuestro compilador online y codificar en español nuestra pila.
Lo primero que haremos sera definir unas variables globales.
#include
int tam_pila = 10;
/* tamaño de nuestra pila cambiando este valor podemos
cambiar el tamaño de nuestra pila*/
int pila[8];
/*Arreglo de ints, nuestra pila*/
int tope_pila = -1;
/*variable que apunta al tope de nuestra pila,
se inicializa en -1 ya que esta vacía*/
Implementamos nuestra función para checar si esta vacía nuestra pila
int esVacia() {
if(tope_pila == -1)
return 1;
else
return 0;
}
Si la pila esVacía, o sea que el tope se quedo con el valor de -1 retornamos true. En caso contrario retornamos un false.
Ahora implementamos nuestra función para checar si esta llena
int estaLlena() {
if(tope_pila == tam_pila)
return 1;
else
return 0;
}
Consecuentemente implementamos la función para obtener el último valor de la pila, el del tope.
int obtener() {
return pila[tope_pila];
}
Evidentemente hemos avanzado con las operaciones básicas pero faltan las más importantes ¿no? push y pop, pues era necesario implementar primero las anteriores para poder usarlas en éstas. Veamos porque...
int quitar() {
int dato;
if(!esVacia()) {
dato = pila[tope_pila];
tope_pila = tope_pila - 1;
return dato;
} else {
printf("No se pudo quitar ningún dato, la pila está vacía .\n");
}
}
Ahora vamos por nuestra función de inserción.
int insertar(int dato) {
if(!estaLlena()) {
tope_pila = tope_pila + 1;
pila[tope_pila] = dato;
} else {
printf("No se puede insertar datos, la pila esta llena.\n");
}
}
Y finalmente para poder llamar y hacer uso de todas las funciones anteriores, codificamos el main, el proceso principal, la torre de control de major TOM.
int main() {
// Insertar elementos en lal PILA
insertar(3);
insertar(55);
insertar(66);
insertar(78);
insertar(23);
insertar(33);
printf("Elemento en el tope de la pila: %d\n" ,obtener());
insertar(55);
insertar(66);
insertar(78);
insertar(23);
insertar(33);
insertar(78);
insertar(23);
insertar(33);
return 0;
}
Referencias