Создание коллекций стека и очереди
В этой статье описывается, как создать другие структуры данных, например стеки и очереди классов MFC из списка.Примеры используют классы, производные от CList, но можно использовать непосредственно CList если не нужно добавить функции.
Стеки
Так как стандартная коллекция списка есть и головку и tail, легко создания производной коллекции списка, который имитирует поведение последн-в-первого-вне стека.Стек как стек подносов в кафетерии.По мере того, как допустимые при работе с принтером добавляются в стек, они поступают в верхней части стека.Последний добавленный лоток первое для удаления.Функции-члены AddHead и RemoveHead коллекциями списков можно использовать для добавления и удаления элементов из списка; в частности head таким образом, последний добавленный элемент первое для удаления.
Создание коллекции стека
Создайте новый класс списка из одного из списка существующих классов MFC и добавьте несколько функции-члены для поддержки функциональность операций стека.
В следующем примере показано, как добавлять функции-члены к элементам push в стек, взгляду украдкой верхнего элемента стека и извлекает верхний элемент стека:
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(); } };
Обратите внимание, что этот подход предоставляет базовый класс CObList.Пользователь может вызывать любой функции-члена CObList, выполняет ли он смысла для стека или нет.
Очереди
Так как стандартная коллекция списка имеет головку и tail, а также легко создания производной коллекции списка, который имитирует поведение перв-в-первой-вне очереди.Очередь как линия продаж в кафетерии.Первая person в линии первое, который будет служить.По мере добавления все новых продаж получены, они поступают на конец линии ожидать их поворачивают.Функции-члены AddTail и RemoveHead коллекциями списков можно использовать для добавления и удаления элементов в частности из списка head или метода с префиксом tail; таким образом, последний добавленный элемент всегда является последним, который необходимо удалить.
Создать коллекцию очередей
Создайте новый класс списка из одного из списка предопределенных классов, предоставляемых с библиотеки Microsoft Foundation Class и добавление нескольких функций-членов, чтобы поддерживать семантику операций очереди.
Следующий пример показывает, как можно добавить функции элементов, чтобы добавить элемент в конец очереди и получить элемент из начала очереди.
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(); } };