Freigeben über


Erstellen von Stack- und Warteschlangenauflistungen

In diesem Artikel wird erläutert, wie Sie andere Datenstrukturen wie Stapel und Warteschlangen aus MFC-Listenklassen erstellen. In den Beispielen werden Klassen verwendet, die von CList abgeleitet sind; jedoch können Sie CList direkt verwenden, es sei denn, Sie müssen Funktionalität hinzufügen.

Stacks

Da die Standardlistenauflistung sowohl einen Kopf als auch einen Tail hat, ist es einfach, eine abgeleitete Listensammlung zu erstellen, die das Verhalten eines Last-in-first-out-Stapels nachahmt. Ein Stapel ist wie ein Stapel von Schalen in einer Kantine. Wenn Ablagen zum Stack hinzugefügt werden, kommen sie oben auf den Stack. Das zuletzt hinzugefügte Fach wird als erstes wieder entfernt. Die Elementfunktionen AddHead der Listensammlung und RemoveHead können verwendet werden, um Elemente speziell aus dem Kopf der Liste hinzuzufügen und zu entfernen. Daher ist das zuletzt hinzugefügte Element das erste, das entfernt werden soll.

So erstellen Sie eine Stack Collection

  1. Leiten Sie eine neue Listenklasse von einer der vorhandenen MFC-Listenklassen ab und fügen Sie weitere Memberfunktionen hinzu, um die Funktionalität von Stapelvorgängen zu unterstützen.

    Das folgende Beispiel zeigt, wie Sie Memberfunktionen hinzufügen, um Elemente auf den Stapel zu legen, das oberste Element des Stapels zu betrachten und das oberste Element vom Stapel zu entfernen:

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

Beachten Sie, dass dieser Ansatz die zugrunde liegende CObList Klasse verfügbar macht. Der Benutzer kann jede beliebige CObList-Mitgliedsfunktion aufrufen, unabhängig davon, ob sie für einen Stack sinnvoll ist oder nicht.

Warteschlangen

Da die Standardlistenauflistung sowohl einen Kopf als auch einen Tail hat, ist es auch einfach, eine abgeleitete Listensammlung zu erstellen, die das Verhalten einer First-in-First-Out-Warteschlange nachahmt. Eine Warteschlange ist wie eine Reihe von Personen in einer Kantine. Die erste Person in Zeile ist die erste, die bedient werden soll. Wenn mehr Menschen kommen, gehen sie ans Ende der Schlange, um zu warten, bis sie an der Reihe sind. Die Memberfunktionen AddTail und RemoveHead der Listensammlung können verwendet werden, um Elemente gezielt am Anfang oder Ende der Liste hinzuzufügen und zu entfernen; somit wird das zuletzt hinzugefügte Element immer als letztes entfernt.

So erstellen Sie eine Warteschlange Collection

  1. Leiten Sie eine neue Listenklasse von einer der vordefinierten Listenklassen ab, die mit der Microsoft Foundation Class Library bereitgestellt werden, und fügen Sie weitere Memberfunktionen hinzu, um die Semantik von Warteschlangenvorgängen zu unterstützen.

    Das folgende Beispiel zeigt, wie Sie Memberfunktionen anfügen können, um am Ende der Warteschlange ein Element hinzuzufügen und das Element von der Vorderseite der Warteschlange abzurufen.

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

Siehe auch

Sammlungen