Double-ended queue

Deque: operações nas duas extremidades

Um deque permite inserir e remover tanto no front quanto no back. O nome vem de double-ended queue e costuma ser pronunciado “deck”.

front ⇄ back

Contrato do deque

  • push_front insere no front.
  • append insere no final.
  • pop_front remove do front.
  • pop_back remove do back.

Relação com pilha e fila

Se inserirmos e removermos pela mesma ponta, usamos o deque como pilha. Se inserirmos no back e removermos no front, usamos o deque como fila.

Importante: deque define operações, não exige que a implementação seja uma lista duplamente encadeada.

Laboratório: uma implementação duplamente encadeada

Para tornar as duas direções visíveis, este laboratório escolhe nós com prev e next. Essa é uma implementação possível, não uma descrição do interior de std::deque.

Push e pop no front ou no back

Operação
Ordem do front ao back

    Deque em C++

    A API usa os nomes appendleft, append, popleft e pop. Todas atuam nas extremidades.

    C++17std::deque
    #include <deque>
    
    std::deque<int> dados{2, 3, 4};
    
    dados.push_front(1); // insere no início
    dados.push_back(5);  // insere no final
    dados.pop_front();   // remove do início
    dados.pop_back();    // remove do final

    Custos e acesso

    Operação em std::dequeCusto esperadoObservação
    append / appendleftaproximadamente O(1)Inserção nas extremidades.
    pop / popleftaproximadamente O(1)Remoção nas extremidades.
    Acesso nas extremidadesO(1)d[0] e d[-1].
    Acesso no meioO(n)Para acesso aleatório frequente, prefira list.

    Referências usadas