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.
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); }
- Chio Code. [@ChioCode] (Octubre, 23, 2024). Aprende a usar Pilas y Colas | Estructuras de Datos. https://www.youtube.com/watch?v=x8pLMgtRXY0&t=237s