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 abgeleitet sind CList, sie können jedoch direkt verwendet CList werden, es sei denn, Sie müssen Funktionen 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 Schalen zum Stapel hinzugefügt werden, gehen sie über den Stapel. Die letzte hinzugefügte Taskleiste ist die erste, die entfernt werden soll. 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 Stapelauflistung

  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 an den Stapel zu übertragen, auf das oberste Element des Stapels zu schauen und das oberste Element aus dem Stapel aufzufüllen:

    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 eine beliebige CObList Memberfunktion aufrufen, unabhängig davon, ob es für einen Stapel sinnvoll ist.

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 zum Ende der Linie, um ihre Drehung zu warten. Die Memberfunktionen AddTail der Listensammlung und RemoveHead können verwendet werden, um Elemente speziell aus dem Kopf oder dem Tail der Liste hinzuzufügen und zu entfernen. Das zuletzt hinzugefügte Element ist daher immer der letzte, der entfernt werden soll.

So erstellen Sie eine Warteschlangensammlung

  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