Compartir a través de


Crear colecciones de pila y de cola

En este artículo se explica cómo crear otras estructuras de datos, como pilas y colas, a partir de clases de lista de MFC. Los ejemplos usan clases derivadas de CList, pero puede usar CList directamente a menos que necesite agregar funcionalidad.

Pilas

Dado que la colección de listas estándar tiene un principio y un final, es fácil crear una colección de listas derivadas que imite el comportamiento de una pila en la que el último en entrar es el primero en salir. Una pila es como una pila de bandejas en una cafetería. A medida que se agregan bandejas a la pila, se ponen encima del todo. La última bandeja agregada es la primera que se va a quitar. Las funciones miembro de colección de lista AddHead y RemoveHead se pueden usar para agregar y quitar elementos específicamente desde el inicio de la lista; por lo tanto, el elemento agregado más recientemente es el primero en ser removido.

Creación de una colección de pila

  1. Derive una nueva clase de lista de una de las clases de lista de MFC existentes y agregue más funciones miembro para admitir la función de las operaciones de pila.

    En el ejemplo siguiente se muestra cómo agregar funciones miembro para insertar elementos en la pila, echar un vistazo al elemento superior de la pila y extraer el elemento superior de la pila:

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

Tenga en cuenta que este enfoque expone la clase subyacente CObList . El usuario puede llamar a cualquier función miembro CObList, tanto si tiene sentido para una pila o no.

Colas

Dado que la colección de listas estándar tiene un principio y un final, también es fácil crear una colección de listas derivadas que imite el comportamiento de una cola en la que el primero en entrar es el primero en salir. Una cola es como una línea de personas en una cafetería. La primera persona en la fila es la primera en ser atendida. A medida que llegan más personas, van al final de la línea para esperar su turno. Las funciones miembro de la colección de listas AddTail y RemoveHead se pueden usar para agregar y quitar elementos específicamente del inicio o del final de la lista; de este modo, el elemento agregado más recientemente siempre es el último en eliminarse.

Creación de una colección de colas

  1. Derive una clase de lista nueva de una de las clases de lista predefinidas proporcionadas con la biblioteca MFC y agregue más funciones miembro para admitir la semántica de las operaciones de cola.

    En el ejemplo siguiente se muestra cómo puede anexar funciones miembro para agregar un elemento al final de la cola y obtener el elemento desde el principio de la cola.

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

Consulte también

Colecciones