Pilas (Stacks)

 ¿Que son las pilas o stacks?

Las pilas siguen el principio: Last In First Out (LIFO), o en español ultimo el en entrar es el primero en salir. La gran diferencia con las colas o las listas radica en que la inserción y eliminación de elementos se realizara siempre al principio de la pila, es decir, el nuevo elemento que se añadirá siempre sera la cima la pila. El equivalente a la cabeza de la lista en las pilas seria la cima.

Al momento de implementar una pila o una cola se utiliza como base una lista enlazada. Realmente funcionan casi igual, ya que tanto las listas como las colas funcionan con nodos que poseen un puntero hacia el siguiente nodo. 

Esto también implica que ya no necesitaremos un puntero hacia la cola o ultimo elemento de la lista, porque únicamente necesitaremos modificar la cima de la pila.

Implementacion de una pila

Insercion de un nodo (Apilar)
void insertar_nodo(Pila** cima, int valor)
{
    // Reserva de memoria para el nuevo nodo
    Pila* nuevo_nodo = (Pila*) malloc(sizeof(Pila));
    if (nuevo_nodo == NULL) { // En caso de error al reservar memoria se acaba el programa
        printf("\nError al intentar reservar un espacio en memoria para el nuevo nodo\n");
        exit(1);
    }
    nuevo_nodo->num = valor;
    nuevo_nodo->sig = *cima; // Nuevo apunta hacia la anterior cima (Si no hay cima sera nulo)
    *cima = nuevo_nodo; // Nuevo ahora es la cima
}

Eliminacion de un nodo (Desapilar)
void eliminar_nodo(Pila** cima) 
{     
    if (*cima == NULL) { // Si no hay cima no hay pila, asi que abortamos         
        return;
    }
     
    Pila* aux = *cima; // Guardamos la direccion de la vieja cima en un auxiliar     
    int valor = aux->num;     
    *cima = aux->sig; // Puede quedar NULL si era el único     
    free(aux); 
}

Programa ejemplo de implementacion de una pila en C
Para ejemplificar de mejor manera la implementacion de una pila asi como tambien demostrar el potencial y la utilidad que los stacks pueden llegar a tener, aqui esta un programa que funciona como una calculadora de Notacion Polaca Inversa (RPN). 

¿Que es una calculadora RPN?
Una calculadora RPN es un tipo de calculadora que utiliza la Notación Polaca Inversa (Reverse Polish Notation o Postfija) para realizar cálculos. A diferencia de las calculadoras algebraicas tradicionales (que usan la notación infija, como 3 + 4), en RPN primero se ingresan los números (operandos) y luego se ingresa la operación (operador) que se va a realizar sobre ellos.



Descargar programa ejemplo
Descargar
GitHub

Referencias