File

Parcourez pas à pas une file C++ construite avec des nœuds.

Tout est simulé dans ce navigateur ; rien n'est envoyé à un serveur.

Valeurs

Créer le nouveau nœud

Créer le nouveau nœud

n_ = 0

La file est vide

  • Vient d'être ajouté
  • Sort maintenant

Étape 1 / 54

Code

#include <iostream>
using namespace std;
class Nodo { // Un nœud contient la donnée et un pointeur vers le suivant
private: // Attributs privés : seules les méthodes y touchent
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_ est le prochain à sortir et final_ le dernier arrivé
Nodo* frente_; // Premier nœud de la file
Nodo* final_; // Dernier nœud de la file
int n_; // Nombre de nœuds
public:
Cola() : frente_(nullptr), final_(nullptr), n_(0) {}
// Destructor (no se anima)
~Cola() {
while (frente_ != nullptr) desencolar();
}
void encolar(int valor) { // Enfiler à l'arrière : O(1)
Nodo* nuevo = new Nodo(valor); // Créer le nœud
if (final_ == nullptr) { // La file est-elle vide ?
frente_ = final_ = nuevo; // C'est le seul nœud : frente_ et final_ pointent vers lui
} else {
final_->setSiguiente(nuevo); // Le dernier nœud pointe vers le nouveau
final_ = nuevo; // final_ pointe maintenant vers le nouveau nœud
}
n_++;
}
void desencolar() { // Défiler l'avant : O(1)
if (frente_ == nullptr) return; // File vide : rien à retirer
Nodo* temp = frente_; // Conserver l'avant pour pouvoir le libérer
frente_ = frente_->getSiguiente(); // frente_ passe au nœud suivant
if (frente_ == nullptr) final_ = nullptr; // La file est vide : final_ ne pointe plus vers rien
delete temp; // Libérer la mémoire
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;
}

Ce visualiseur de file explique une structure FIFO, où le premier élément entré est le premier sorti. La file est construite avec des nœuds C++ et deux pointeurs : frente_, qui désigne le prochain élément à sortir, et final_, qui désigne le dernier inséré. Vous pouvez mélanger une séquence aléatoire ou ajouter vous-même des opérations enqueue et dequeue, jusqu'à 12. L'animation couvre le cas particulier de la file vide, la façon dont le dernier nœud se relie au nouveau et le moment où final_ devient nullptr après que la file s'est vidée. Chaque étape surligne sa ligne de code et tout est calculé dans votre navigateur.

Comment l'utiliser

  1. Choisissez la taille et appuyez sur Mélanger pour générer des opérations aléatoires, ou ajoutez les vôtres.
  2. Sélectionnez Enqueue ou Dequeue, saisissez la valeur pour un enqueue et appuyez sur Ajouter.
  3. Lancez l'animation ou avancez pas à pas avec les commandes de lecture.
  4. Suivez les pointeurs frente_ et final_, le compteur n_ et la ligne C++ surlignée.

Questions fréquentes

Que signifie FIFO ?
First In, First Out : les éléments sortent dans l'ordre où ils sont arrivés, comme des personnes dans une file d'attente.
En quoi est-ce différent d'une pile ?
Une file insère à l'arrière et retire à l'avant, tandis qu'une pile fait les deux au sommet.
Que se passe-t-il quand le dernier élément est retiré ?
La file devient vide et final_ est mis à nullptr, et la mémoire du nœud est libérée.

Outils associés