/* * queue.h - Implementación básica de Cola (Queue) * * Inspirado en "Data Structures and Algorithms Made Easy" * por Narasimha Karumanchi. * * Define un TAD de cola (FIFO - First In, First Out) con * operaciones fundamentales y versiones recursivas * para fines didácticos. */ #ifndef QUEUE_H #define QUEUE_H #include "binary_tree.h" #include /* ===== ESTRUCTURA DE NODO ===== */ typedef struct _queue_node { TreeNode *data; struct _queue_node *next; } QueueNode; /* ===== CREACIÓN ===== */ /* Crea un nuevo nodo con el dato especificado */ QueueNode *create_queue_node(TreeNode *data); /* ===== INSERCIÓN ===== */ /* Inserta un elemento al final de la cola (enqueue, iterativo). * Retorna el nuevo front de la cola. */ QueueNode *enqueue(QueueNode *front, TreeNode *data); /* Inserta un elemento al final de la cola (enqueue, recursivo). * Retorna el nuevo front de la cola. */ QueueNode *enqueue_rec(QueueNode *front, TreeNode *data); /* ===== ELIMINACIÓN ===== */ /* Elimina el elemento del frente y lo guarda en *data (iterativo). * Retorna el nuevo front, o NULL si la cola estaba vacía. */ QueueNode *dequeue(QueueNode *front, TreeNode **data); /* ===== CONSULTA ===== */ /* Devuelve el valor del frente sin eliminarlo. * Retorna true si tuvo éxito, false si la cola está vacía. */ bool peek_queue(QueueNode *front, TreeNode **data); /* Verifica si la cola está vacía */ bool is_empty_queue(QueueNode *front); /* ===== TAMAÑO ===== */ /* Devuelve el número de elementos en la cola (iterativo) */ int size_queue(QueueNode *front); /* Devuelve el número de elementos en la cola (recursivo) */ int size_queue_rec(QueueNode *front); /* ===== DESTRUCCIÓN ===== */ /* Libera toda la memoria de la cola (iterativo) */ void destroy_queue(QueueNode *front); /* Libera toda la memoria de la cola (recursivo) */ void destroy_queue_rec(QueueNode *front); /* ===== IMPRESIÓN ===== */ /* Imprime los elementos de la cola de front a rear (iterativo) */ void print_queue(QueueNode *front); /* Imprime los elementos de la cola de front a rear (recursivo) */ void print_queue_rec(QueueNode *front); /* Imprime los elementos de la cola en orden inverso (rear a front, recursivo) */ void print_queue_inverso_rec(QueueNode *front); /* ===== OPERACIONES AVANZADAS ===== */ /* Invierte la cola (recursivo). * Retorna el nuevo front de la cola. */ QueueNode *invert_queue_rec(QueueNode *front); #endif // QUEUE_H