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