Delen via


Stack- en wachtrijverzamelingen maken

In dit artikel wordt uitgelegd hoe u andere gegevensstructuren, zoals stacks en wachtrijen, maakt vanuit MFC-lijstklassen. In de voorbeelden worden klassen gebruikt die zijn afgeleid van CList, maar u kunt deze rechtstreeks gebruiken CList , tenzij u functionaliteit moet toevoegen.

Stapels

Omdat de standaardlijstverzameling zowel een kop als een staart heeft, is het eenvoudig om een afgeleide lijstverzameling te maken die het gedrag van een last-in-first-out stack nabootst. Een stapel is als een stapel dienbladen in een cafetaria. Naarmate er trays aan de stapel worden toegevoegd, gaan ze boven aan de stapel. De laatste extra lade is de eerste die moet worden verwijderd. De functies AddHead van leden van de lijstverzameling en RemoveHead kunnen worden gebruikt om elementen specifiek toe te voegen aan en te verwijderen uit het hoofd van de lijst. Het meest recent toegevoegde element is dus de eerste die moet worden verwijderd.

Een stapelverzameling maken

  1. Leid een nieuwe lijstklasse af van een van de bestaande MFC-lijstklassen en voeg meer lidfuncties toe ter ondersteuning van de functionaliteit van stackbewerkingen.

    In het volgende voorbeeld ziet u hoe u lidfuncties toevoegt om elementen naar de stack te pushen, het bovenste element van de stack te bekijken en het bovenste element uit de stack te plaatsen:

    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();
       }
    };
    

Houd er rekening mee dat deze benadering de onderliggende CObList klasse beschikbaar maakt. De gebruiker kan elke CObList lidfunctie aanroepen, ongeacht of deze zinvol is voor een stack of niet.

Wachtrijen

Omdat de standaardlijstverzameling zowel een kop als een staart heeft, is het ook eenvoudig om een afgeleide lijstverzameling te maken die het gedrag van een first-in-first-out wachtrij nabootst. Een wachtrij is als een lijn van mensen in een cafetaria. De eerste persoon in de rij wordt als eerste geholpen. Naarmate er meer mensen komen, gaan ze naar het einde van de lijn om te wachten op hun beurt. De functies AddTail van het lid van de lijstverzameling en RemoveHead kunnen worden gebruikt om elementen specifiek toe te voegen aan en te verwijderen uit het hoofd of de staart van de lijst. Het meest recent toegevoegde element is dus altijd de laatste die moet worden verwijderd.

Een wachtrijverzameling maken

  1. Leid een nieuwe lijstklasse af van een van de vooraf gedefinieerde lijstklassen die worden geleverd met de Microsoft Foundation-klassenbibliotheek en voeg meer lidfuncties toe ter ondersteuning van de semantiek van wachtrijbewerkingen.

    In het volgende voorbeeld ziet u hoe u lidfuncties kunt toevoegen om een element toe te voegen aan het einde van de wachtrij en het element aan de voorzijde van de wachtrij op te halen.

    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();
       }
    };
    

Zie ook

Verzamelingen