Condividi tramite


Creazione di raccolte di Stack e Queue

Questo articolo illustra come creare altre strutture di dati, ad esempio stack e code, da classi di elenco MFC. Gli esempi usano classi derivate da CList, ma è possibile usare CList direttamente, a meno che non sia necessario aggiungere funzionalità.

Stack

Poiché la raccolta di elenchi standard ha sia una testa che una coda, è facile creare una raccolta di elenchi derivata che simula il comportamento di uno stack last-in-first-out. Una pila è come una pila di vassoi in una caffetteria. Man mano che i vassoi vengono aggiunti all'impilamento, vengono posti in cima all'impilamento. L'ultimo vassoio aggiunto è il primo da rimuovere. Le funzioni AddHead membro della raccolta di elenchi e RemoveHead possono essere utilizzate per aggiungere e rimuovere elementi in modo specifico dall'inizio dell'elenco, pertanto l'elemento aggiunto più di recente è il primo da rimuovere.

Per creare una raccolta di stack

  1. Derivare una nuova classe lista da una delle classi lista esistenti di MFC e aggiungere ulteriori funzioni membro per supportare la funzionalità delle operazioni di pila.

    Nell'esempio seguente viene illustrato come aggiungere funzioni membro per inserire elementi nello stack, visualizzare l'elemento superiore dello stack e rimuovere l'elemento superiore dallo stack.

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

Si noti che questo approccio espone la classe sottostante CObList . L'utente può chiamare qualsiasi CObList funzione membro, indipendentemente dal fatto che abbia senso per uno stack o meno.

N/A

Poiché la collezione di liste standard ha una testa e una coda, è anche facile creare una collezione di liste derivata che simula il comportamento di una coda primo entrato-primo uscito. Una coda è come una linea di persone in una caffetteria. La prima persona in linea è la prima a essere servita. Man mano che arrivano più persone, vanno alla fine della linea per aspettare il loro turno. Le funzioni AddTail membro della raccolta di elenchi e RemoveHead possono essere usate per aggiungere e rimuovere elementi in modo specifico dalla testa o dalla parte finale dell'elenco. L'ultimo elemento aggiunto è quindi sempre l'ultimo elemento da rimuovere.

Per creare una raccolta di code

  1. Derivare una nuova classe di elenco da una delle classi di elenco predefinite fornite con la libreria di classi di Microsoft Foundation e aggiungere altre funzioni membro per supportare la semantica delle operazioni di accodamento.

    Nell'esempio seguente viene illustrato come aggiungere funzioni membro per aggiungere un elemento alla fine della coda e ottenere l'elemento dalla parte anteriore della coda.

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

Vedere anche

raccolte