Cola
Recorre paso a paso una cola de C++ hecha con nodos.
Todo se simula en este navegador; no se envía nada a ningún servidor.
Valores
Crear el nodo nuevo
Crear el nodo nuevo
n_ = 0
La cola está vacía
- Recién añadido
- Saliendo ahora
Paso 1 / 54
Código
#include <iostream>
using namespace std;
class Nodo { // Un nodo guarda el dato y el puntero al siguiente
private: // Atributos privados: solo se tocan con los métodos
int dato;
Nodo* siguiente;
public:
Nodo(int d) : dato(d), siguiente(nullptr) {}
int getDato() const { return dato; }
Nodo* getSiguiente() const { return siguiente; }
void setDato(int d) { dato = d; }
void setSiguiente(Nodo* s) { siguiente = s; }
};
class Cola {
private: // frente_ es el primero en salir y final_ el último en llegar
Nodo* frente_; // Primer nodo de la cola
Nodo* final_; // Último nodo de la cola
int n_; // Número de nodos
public:
Cola() : frente_(nullptr), final_(nullptr), n_(0) {}
// Destructor (no se anima)
~Cola() {
while (frente_ != nullptr) desencolar();
}
void encolar(int valor) { // Encola por el final: O(1)
Nodo* nuevo = new Nodo(valor); // Crea el nodo
if (final_ == nullptr) { // ¿La cola está vacía?
frente_ = final_ = nuevo; // Es el único nodo: frente_ y final_ lo apuntan
} else {
final_->setSiguiente(nuevo); // El último nodo apunta al nuevo
final_ = nuevo; // final_ pasa a ser el nuevo
}
n_++;
}
void desencolar() { // Desencola el frente: O(1)
if (frente_ == nullptr) return; // Cola vacía: no hay nada que quitar
Nodo* temp = frente_; // Guarda el frente para liberarlo
frente_ = frente_->getSiguiente(); // frente_ avanza al siguiente nodo
if (frente_ == nullptr) final_ = nullptr; // Cola vacía: final_ ya no apunta a nada
delete temp; // Libera la memoria
n_--;
}
// Muestra la cola del frente al final
void imprimir() const {
cout << "frente ->";
for (Nodo* p = frente_; p != nullptr; p = p->getSiguiente())
cout << " " << p->getDato();
cout << endl;
}
};
int main() {
Cola cola;
cola.encolar(3);
cola.encolar(6);
cola.encolar(9);
cola.imprimir(); // frente -> 3 6 9
cola.desencolar();
cola.imprimir(); // frente -> 6 9
cola.encolar(1);
cola.imprimir(); // frente -> 6 9 1
return 0;
}