Condividi tramite


Creazione di raccolta Stack e Code

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 allo stack, passano sopra lo stack. 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 elenco da una delle classi di elenco MFC esistenti e aggiungere altre funzioni membro per supportare la funzionalità delle operazioni stack.

    Nell'esempio seguente viene illustrato come aggiungere funzioni membro per eseguire il push degli elementi nello stack, visualizzare l'elemento superiore dello stack e visualizzare 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.

Code

Poiché la raccolta di elenchi standard ha sia una testa che una coda, è anche facile creare una raccolta di elenchi derivata che simula il comportamento di una coda first-in-first-out. 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();
       }
    };
    

Vedi anche

Raccolte