Criação de pilha e coleções de fila
Este artigo explica sistema autônomo criar outras estruturas de dados, sistema autônomo pilhas and filas, de classes do MFC lista.Os exemplos usam classes derivadas de CList, mas você pode usar CList diretamente a menos que você precise adicionar funcionalidade.
Pilhas
Como a coleção de listagem padrão tem um cabeçalho e uma cauda, é fácil criar uma coleção de lista derivado que imita o comportamento de uma pilha de última-in-first-out.Uma pilha é como uma pilha de bandejas em uma lanchonete.À medida que sistema autônomo bandejas são adicionadas à pilha, eles estão no topo da pilha.Bandeja do última adicionada é o primeiro a ser removido.O membro da coleção lista funções AddHead e RemoveHead pode ser usado para adicionar e remover elementos especificamente de cabeça da lista; portanto, o elemento adicionado mais recentemente é a primeira a ser removido.
Para criar uma coleção de pilha
Derivar uma nova classe de lista de uma das classes lista MFC existentes e adicionar mais funções de membro para dar suporte à funcionalidade de operações de pilha.
O exemplo a seguir mostra como adicionar funções de membro para colocar elementos para a pilha, espiada no elemento superior da pilha e pop do elemento superior da pilha:
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(); } };
Observe que essa abordagem expõe o subjacente CObList classe. O usuário pode telefonar qualquer CObList membro funcionar se faz sentido para uma pilha ou não.
Filas
Como a coleção de listagem padrão tem uma ponta e um laço, também é fácil criar uma coleção de lista derivado que imita o comportamento de uma fila first-in-first-out.Uma fila é como uma linha de pessoas em uma lanchonete.A primeira pessoa na linha é o primeiro sejam atendidos.À medida que mais pessoas passam, eles ir para o participante da linha para esperar sua vez.O membro da coleção lista funções AddTail e RemoveHead pode ser usado para adicionar e remover elementos especificamente de cabeçalho ou parte final da lista; portanto, o elemento adicionado mais recentemente é sempre a última a ser removido.
Para criar uma coleção de fila
Derive uma nova classe de lista de uma das classes de lista predefinidos fornecidas com a biblioteca Microsoft Foundation Class e adicionar mais funções de membro para oferecer suporte à semântica de operações de fila.
O exemplo a seguir mostra como você pode acrescentar funções de membro, adicione um elemento no participante da fila e obter o elemento do início da fila.
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(); } };