Sdílet prostřednictvím


Vytváření sbírek zásobníků a front

Tento článek vysvětluje, jak vytvořit další datové struktury, jako jsou zásobníky a fronty, ze tříd seznamů MFC. Příklady používají třídy odvozené z CList, ale můžete použít CList přímo, pokud nepotřebujete přidat funkce.

Zásobníky

Vzhledem k tomu, že standardní seznamová kolekce má hlavu i ocas, je snadné vytvořit odvozenou kolekci, která se chová jako zásobník typu last-in-first-out. Zásobník je jako hromada táců v jídelně. Jak jsou tácy přidávány do hromady, umisťují se na vrch. Poslední přidaný zásobník je první, který bude odebrán. Členské funkce AddHead kolekce seznamů a RemoveHead lze použít konkrétně k přidání a odebrání prvků z hlavy seznamu, takže naposledy přidaný prvek je první, který se odstraní.

Chcete-li vytvořit kolekci zásobníku

  1. Odvoďte novou třídu seznamu z jedné z existujících tříd seznamů MFC a přidejte další členské funkce pro podporu zásobníkových operací.

    Následující příklad ukazuje, jak přidat členské funkce pro vložení prvků do zásobníku, podívat se na horní prvek zásobníku a odebrat horní prvek ze zásobníku.

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

Všimněte si, že tento přístup zveřejňuje podkladovou CObList třídu. Uživatel může spustit libovolnou CObList členovou funkci, ať už dává smysl pro zásobník, nebo ne.

Fronty/Řady

Vzhledem k tomu, že standardní kolekce seznamů má hlavu i ocas, je snadné vytvořit odvozenou kolekci seznamů, která napodobuje chování fronty typu FIFO (First-In-First-Out). Fronta je jako řada lidí v kavárně. První osoba v řadě je první, která je obsloužena. Když přijde víc lidí, půjdou na konec linky, aby čekali na svoji řadu. Členské funkce AddTail a RemoveHead kolekce seznamů lze použít k přidání a odebrání prvků konkrétně ze začátku nebo konce seznamu; tím pádem je naposledy přidaný prvek vždy ten poslední, který se odebere.

Chcete-li vytvořit kolekci front

  1. Odvoďte novou seznamovou třídu z jedné z předdefinovaných tříd poskytovaných knihovnou Microsoft Foundation Class Library a přidejte další metody pro podporu sémantiky operací fronty.

    Následující příklad ukazuje, jak můžete připojit členské funkce k přidání elementu na konec fronty a získat prvek z přední části fronty.

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

Viz také

kolekce