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


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

В этой статье описывается, как создать другие структуры данных, например стеки и очереди классов 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(); }
    }; 
    

См. также

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

Коллекции