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 función.
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 un montón 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 la colección de listas AddHead
y RemoveHead
se pueden usar para agregar y quitar elementos específicamente del principio de la lista; por lo tanto, el elemento agregado más recientemente es el primero que se va a quitar.
Creación de una colección de pila
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 sacar 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 CObList
subyacente. 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 fila de personas en una cafetería. La primera persona en la fila es la primera a la que se va a atender. A medida que vienen más personas, se ponen al final de la fila para esperar su turno. Las funciones miembro de la colección de lista AddTail
y RemoveHead
se pueden usar para agregar y quitar elementos específicamente del principio o final de la lista; por lo tanto, el elemento agregado más recientemente siempre será el último que se va a quitar.
Creación de una colección de colas
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(); } };