Partager via


La création de collections de pile et de file d'attente

Cet article explique comment créer d'autres structures de données, telles que des piles et files d'attente, les classes de liste de MFC. Les exemples utilisent des classes dérivées de CList, mais vous pouvez utiliser CList directement à moins que vous deviez ajouter des fonctionnalités.

Piles

Étant donné que la collection de listes standard a un début et une fin, il est facile de créer une collection de listes dérivée qui reproduit le comportement d'une pile de type " dernier entré - premier sortie ". Une pile est similaire à un empilement de plateaux dans un cafétéria. Lorsque les plateaux sont ajoutés à la pile, elles sont sur le dessus de la pile. Le dernier plateau ajouté est le premier à être enlevé. Les méthodes AddHead et RemoveHead de collection de listes peuvent être utilisées pour ajouter et supprimer des éléments spécifiquement de la tête de la liste ; ainsi, l'élément le plus récemment ajouté est le premier à être supprimé.

Pour créer une collection de piles

  • Dérivez une nouvelle classe de liste de l'une des classes existantes de la liste de MFC et ajoutez des méthodes pour prendre en charge les fonctionnalités des opérations de pile.

    L'exemple suivant montre comment ajouter des méthodes pour empiler des éléments, jeter un coup d'œil sur l'élément supérieur de la pile, et dépiler l'élément supérieur de la pile :

    class CTray : public CObject { };
    
    class CStack : public CTypedPtrList< CObList, CTray* >
    {
    public:
        // Add element to top of stack
        void Push( CTray* newTray )
            { AddHead( newTray ); }
    
        // Peek at top element of stack
        CTray* Peek()
            { return IsEmpty() ? NULL : GetHead(); }
    
        // Pop top element off stack
        CTray* Pop()
            { return RemoveHead(); }
    };
    

Notez que cette approche présente la classe sous-jacente CObList. L'utilisateur peut appeler toute méthode de CObList, que ce soit logique pour une pile ou non.

Files d'attente

Étant donné que la collection de listes standard a un début et une fin, il est facile de créer une collection de listes dérivée qui reproduit le comportement d'une file de type "premier entré-premier sorti". Une file est similaire à une ligne de personnes dans une cafétéria. La première personne dans la file de est la première à être servie. Lorsque plusieurs personnes viennent, elles arrivent à la fin de la file pour attendre leur tour. Les méthodes AddTail et RemoveHead des collections de listes peuvent être utilisées pour ajouter et supprimer des éléments spécifiquement de la tête ou de la queue de la liste ; ainsi, l'élément le plus récemment ajouté est toujours le dernier à être supprimé.

Pour créer une file

  • Dérivez une classe de liste de l'une des classes de liste prédéfinie fournies dans la bibliothèque MFC et ajoutez des méthodes pour prendre en charge la sémantique des opérations de file.

    L'exemple suivant montre comment ajouter des méthodes pour ajouter un élément à la fin de la file et obtenir l'élément situé au début de la file.

    class CQueue : public CTypedPtrList< CObList, CPerson* >
    { 
    public:
        // Go to the end of the line
        void AddToEnd( CPerson* newPerson )
            { AddTail( newPerson ); }        // End of the queue
    
        // Get first element in line
        CPerson* GetFromFront()
            { return IsEmpty() ? NULL : RemoveHead(); }
    }; 
    

Voir aussi

Concepts

Collections