Udostępnij za pośrednictwem


Tworzenie kolekcji stosów i kolejek

W tym artykule wyjaśniono, jak tworzyć inne struktury danych, takie jak stosy i kolejki, z klas list MFC. W przykładach użyto klas pochodnych z CListklasy , ale można ich używać CList bezpośrednio, chyba że musisz dodać funkcje.

Stosy

Ponieważ kolekcja listy standardowej ma zarówno głowę, jak i ogon, łatwo jest utworzyć kolekcję listy pochodnej, która naśladuje zachowanie stosu ostatniego w pierwszym miejscu. Stos jest jak stos tac w kawiarni. Gdy zasobniki są dodawane do stosu, przechodzą na stos. Ostatni dodany zasobnik jest pierwszym do usunięcia. Funkcje AddHead składowe kolekcji listy i RemoveHead mogą służyć do dodawania i usuwania elementów specjalnie z nagłówka listy. W związku z tym ostatnio dodany element jest pierwszym elementem do usunięcia.

Aby utworzyć kolekcję stosów

  1. Utwórz nową klasę listy z jednej z istniejących klas listy MFC i dodaj więcej funkcji składowych w celu obsługi funkcji operacji stosu.

    W poniższym przykładzie pokazano, jak dodać funkcje składowe, aby wypchnąć elementy do stosu, zajrzeć do górnego elementu stosu i wyświetlić górny element ze stosu:

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

Należy pamiętać, że takie podejście uwidacznia podstawową CObList klasę. Użytkownik może wywołać dowolną CObList funkcję składową, niezależnie od tego, czy ma to sens dla stosu, czy nie.

Kolejki

Ponieważ kolekcja listy standardowej ma zarówno nagłówek, jak i ogon, można również łatwo utworzyć kolekcję listy pochodnej, która naśladuje zachowanie kolejki pierwszej w pierwszej kolejności. Kolejka jest jak linia ludzi w kawiarni. Pierwsza osoba w kolejce jest pierwszą osobą, którą należy obsłużyć. W miarę jak przychodzą więcej ludzi, idą na koniec linii, aby czekać na kolei. Funkcje AddTail składowe kolekcji listy i RemoveHead mogą służyć do dodawania i usuwania elementów specjalnie z nagłówka lub końca listy. W związku z tym ostatnio dodany element jest zawsze ostatnim elementem do usunięcia.

Aby utworzyć kolekcję kolejek

  1. Utwórz nową klasę listy z jednej ze wstępnie zdefiniowanych klas list dostępnych w bibliotece klas programu Microsoft Foundation i dodaj więcej funkcji członkowskich do obsługi semantyki operacji kolejki.

    W poniższym przykładzie pokazano, jak można dołączać funkcje składowe, aby dodać element na końcu kolejki i pobrać element z przodu kolejki.

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

Zobacz też

Kolekcje