sejam bem-vindos a maus uma aula do curso
hoje falaremos sobre duas sequencias muito utilizadas no dia a a dia de um programador: stacks e queues.
a parte boa dessas sequencias é que podem ser facilmente implementadas, nao necessariamete da forma mais eficiente, com arrays.
em aulas futuras veremos outras estruturas que podem servir como base para stacks e queues, como linked lists - que para stacks é uma implementação mais eficiente garantindo que a operação de push e pop sejam O(1).
para queues podemos usar uma lista duplamente ligada com um augmentation mantendo tracking da head e da tail
Stacks
Stacks são uma strutura de sequência de elementos que segue a regra LIFO (Last In, First Out). Isso significa que o último elemento a ser inserido é o primeiro a ser removido.
ADT de uma Stack
- push - adiciona um elemento no topo da stack;
- pop - remove o elemento do topo da stack;
- peek - retorna o elemento do topo da stack;
- isEmpty - retorna se a stack está vazia ou não;
Casos de uso
- Chamar funções - quando você chama uma função, o endereço de retorno é colocado em uma stack. Quando a função termina, o endereço é retirado da stack;
- Implementação de máquinas virtuais - quando você executa um programa, as instruções são colocadas em uma stack. Quando uma instrução é executada, ela é retirada da stack (uma VM famose que aplica esse conceito é a máquina virtual do Java);
- Desfazer (undo) - quando você desfaz uma ação, a ação é colocada em uma stack. Quando você refaz, a ação é retirada da
stack;
- Navegação - quando você navega em um site, cada página visitada é colocada em uma stack. Quando você clica no botão de voltar, a página é retirada da stack;
Queues
Queues são uma estrutura de sequência de elementos que segue a regra FIFO (First In, First Out). Isso significa que o primeiro elemento a ser inserido é o primeiro a ser removido.
ADT de uma Queue
- enqueue - adiciona um elemento no final da queue;
- dequeue - remove o elemento do início da queue;
- peek - retorna o elemento do início da queue;
- isEmpty - retorna se a queue está vazia ou não;
Casos de uso
- Filas de impressão - quando você manda um documento para a impressora, ele é colocado em uma queue. A impressora então imprime o documento que está no início da queue;
- Sistemas de arquivos - quando você salva um arquivo, ele é colocado em uma queue. O sistema operacional então salva o arquivo que está no início da queue;
- Eventos - quando você clica em um botão, um evento é colocado em uma queue. O navegador então executa o evento que está no início da queue (React, por exemplo, usa essa técnica para atualizar o DOM);