Dela via


Skapa stack- och kösamlingar

Den här artikeln beskriver hur du skapar andra datastrukturer, till exempel staplar och köer, från MFC-listklasser. Exemplen använder klasser som härletts från CList, men du kan använda CList direkt om du inte behöver lägga till funktioner.

Stackar

Eftersom den vanliga listan har både ett huvud och en svans är det enkelt att skapa en härledd lista som efterliknar en sista-in-först-ut stack. En stack är som en hög med brickor i en kafeteria. När brickor läggs till i stacken hamnar de ovanpå stacken. Det sista facket som läggs till är det första som tas bort. Listsamlingens medlemsfunktioner AddHead och RemoveHead kan användas för att lägga till och ta bort element specifikt från listans huvud. Därför är det senast tillagda elementet det första som tas bort.

Skapa en stacksamling

  1. Härled en ny listklass från en av de befintliga MFC-listklasserna och lägg till fler medlemsfunktioner för att stödja funktionerna i stackåtgärder.

    I följande exempel visas hur du lägger till medlemsfunktioner för att skjuta element till stacken, titta på det översta elementet i stacken och ta bort det översta elementet från stacken.

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

Observera att den här metoden exponerar den underliggande CObList klassen. Användaren kan anropa vilken CObList medlemsfunktion som helst, oavsett om det är meningsfullt för en stack eller inte.

Köer

Eftersom standardlistesamlingen har både ett huvud och en svans är det också enkelt att skapa en samling med härledda listor som efterliknar beteendet för en första-in-först-ut-kö. En kö är som en rad människor i en kafeteria. Den första personen i kön är den första som serveras. När fler människor kommer, går de till slutet av linjen för att vänta på sin tur. Listsamlingens medlemsfunktioner AddTail och RemoveHead kan användas för att lägga till och ta bort element specifikt från huvud eller svans i listan. Därför är det senast tillagda elementet alltid det sista som ska tas bort.

Skapa en kösamling

  1. Härled en ny listklass från en av de fördefinierade listklasserna som tillhandahålls med Microsoft Foundation-klassbiblioteket och lägg till fler medlemsfunktioner för att stödja semantiken för köåtgärder.

    I följande exempel visas hur du kan använda medlemsfunktioner för att lägga till ett element i slutet av kön och hämta elementet från början av kön.

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

Se även

samlingar