#include <iostream>
using namespace std;
// Definición de la estructura Nodo
struct Nodo {
int dato;
Nodo *siguiente;
};
// Función para determinar si la cola está vacía
bool colaVacia(Nodo *frente) {
return frente == nullptr;
}
// Función para insertar elementos en una cola
void insertarCola(Nodo *&frente, Nodo *&fin, int n) {
Nodo *nuevoNodo = new Nodo(); // Crear un nuevo nodo
nuevoNodo->dato = n;
nuevoNodo->siguiente = nullptr;
if (colaVacia(frente)) {
frente = nuevoNodo; // Si la cola está vacía, frente apunta al nuevo nodo
} else {
fin->siguiente = nuevoNodo; // Si no, el último nodo apunta al nuevo nodo
}
fin = nuevoNodo; // El fin siempre se actualiza al nuevo nodo
cout << "Elemento " << n << " insertado en la cola.\n";
}
// Función para eliminar elementos de la cola
void eliminarCola(Nodo *&frente, Nodo *&fin) {
if (colaVacia(frente)) {
cout << "La cola está vacía. No hay elementos para eliminar.\n";
return;
}
int eliminado = frente->dato; // Obtener el valor del nodo en el frente
Nodo *temp = frente; // Guardar el nodo que será eliminado
frente = frente->siguiente; // Avanzar el frente al siguiente nodo
if (frente == nullptr) {
fin = nullptr; // Si la cola queda vacía, fin también se pone en nullptr
}
delete temp; // Liberar la memoria del nodo eliminado
cout << "Elemento " << eliminado << " eliminado de la cola.\n";
}
// Función para mostrar todos los elementos de la cola
void mostrarCola(Nodo *frente) {
if (colaVacia(frente)) {
cout << "La cola está vacía.\n";
return;
}
cout << "Elementos en la cola: ";
while (frente != nullptr) {
cout << frente->dato << " ";
frente = frente->siguiente;
}
cout << endl;
}
int main() {
Nodo *frente = nullptr;
Nodo *fin = nullptr;
int opcion, dato;
while (true) {
// Menú sencillo
cout << "\n--- Menú de Cola ---\n";
cout << "1. Insertar elemento\n";
cout << "2. Eliminar elemento\n";
cout << "3. Mostrar cola\n";
cout << "4. Salir\n";
cout << "Seleccione una opción: ";
cin >> opcion;
if (opcion == 1) {
cout << "Ingrese un número para insertar: ";
cin >> dato;
insertarCola(frente, fin, dato);
} else if (opcion == 2) {
eliminarCola(frente, fin);
} else if (opcion == 3) {
mostrarCola(frente);
} else if (opcion == 4) {
cout << "Saliendo...\n";
break;
} else {
cout << "Opción no válida. Intente de nuevo.\n";
}
}
// Liberar memoria al finalizar el programa
while (!colaVacia(frente)) {
eliminarCola(frente, fin);
}
return 0;
}