Поделиться через


Создание коллекций стеков и очередей

В этой статье описывается, как создать другие структуры данных, например стека и очереди, из списка классов MFC. Примеры используют классы, производные от CList, но можно использовать CList напрямую, если не требуется добавить функцию.

Стека

Поскольку обычная коллекция имеет списка и головки и заканчивается, легко создать производную коллекции списков, имитирует расширение функциональности, имеющую первой — out стека. Стека, стека компонентов в столовой. Как компоненты добавляются в стеке, их переходе на вершине стека. Последний добавленный первым компонент, который необходимо удалить. Функции-члены AddHead и RemoveHead коллекции списка можно использовать для добавления и удаления элементов из списка, в частности головки таким образом, самый последний добавленный первый элемент, который необходимо удалить.

Создание коллекции стека

  • Создание нового производного класса списка из одного из списка существующих классов MFC и добавить дополнительные функций-членов для поддержки функции операций стека.

    В следующем примере показано добавление функции-члены к элементам внедрения включен в стеке, взгляду украдкой в верхнем элементе стека и извлекает из верхний элемент стека:

    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, имеет ли он для стека или нет.

Очереди

Поскольку обычная коллекция имеет списка и головки и заканчивается, также легко создать производную коллекции списков, имитирует расширение функциональности перво-в- первой — в очереди. Очередь как линия человека в столовой. Первый пользователь в первый линии, чтобы обслуживать. Как только больше людей, они сохраняются в конец линии, их принимает. Функции-члены AddTail и RemoveHead коллекции списка можно использовать для добавления и удаления элементов из специально головки или конца списка; таким образом, самый последний добавленный элемент всегда является последним, который необходимо удалить.

Создание коллекции queue

  • Создание нового производного класса списка из одного из предварительно определенных классов, предоставляемых списка с помощью библиотеки 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(); }
    }; 
    

См. также

Основные понятия

Коллекции