Para tentar simplificar demais a descrição de uma pilha e uma fila, os dois são cadeias dinâmicas de elementos de informação que podem ser acessados de uma extremidade da cadeia e a única diferença real entre eles é o fato de:
ao trabalhar com uma pilha
- você insere elementos em uma extremidade da cadeia e
- você recupera e / ou remove elementos da mesma extremidade da cadeia
enquanto com uma fila
- você insere elementos em uma extremidade da cadeia e
- você os recupera / remove da outra extremidade
NOTA : Estou usando a redação abstrata de recuperar / remover nesse contexto, porque há casos em que você apenas recupera o elemento da cadeia ou, de certa forma, apenas o lê ou acessa seu valor, mas também há casos em que você remove o elemento de a cadeia e, finalmente, há casos em que você executa as duas ações com a mesma chamada.
Além disso, o elemento word é usado propositadamente para abstrair a cadeia imaginária o máximo possível e separá-la de termos específicos da linguagem de programação. Essa entidade de informação abstrata chamada elemento pode ser qualquer coisa, de um ponteiro, um valor, uma string ou caracteres, um objeto, ... dependendo do idioma.
Na maioria dos casos, embora seja realmente um valor ou um local de memória (ou seja, um ponteiro). E o resto está apenas escondendo esse fato por trás do jargão da linguagem <
Uma fila pode ser útil quando a ordem dos elementos é importante e precisa ser exatamente a mesma de quando os elementos entraram no seu programa. Por exemplo, quando você processa um fluxo de áudio ou quando você armazena em buffer os dados da rede. Ou quando você faz qualquer tipo de processamento de armazenamento e encaminhamento. Em todos esses casos, é necessário que a sequência dos elementos seja impressa na mesma ordem em que foram inseridos no programa, caso contrário, as informações podem parar de fazer sentido. Portanto, você pode interromper seu programa em uma parte que lê dados de alguma entrada, faz algum processamento e os grava em uma fila e uma parte que recupera dados da fila os processa e os armazena em outra fila para processamento ou transmissão de dados .
Uma pilha pode ser útil quando você precisar armazenar temporariamente um elemento que será usado nas etapas imediatas do seu programa. Por exemplo, linguagens de programação geralmente usam uma estrutura de pilha para passar variáveis para funções. O que eles realmente fazem é armazenar (ou enviar) os argumentos da função na pilha e, em seguida, pular para a função na qual eles removem e recuperam (ou pop) o mesmo número de elementos da pilha. Dessa forma, o tamanho da pilha depende do número de chamadas de funções aninhadas. Além disso, depois que uma função é chamada e finalizada o que estava fazendo, ela deixa a pilha exatamente na mesma condição de antes de ser chamada! Dessa forma, qualquer função pode operar com a pilha ignorando como outras funções operam com ela.
Por fim, você deve saber que existem outros termos usados lá fora, para o mesmo conceito semelhante. Por exemplo, uma pilha pode ser chamada de heap. Também existem versões híbridas desses conceitos, por exemplo, uma fila de extremidade dupla pode se comportar ao mesmo tempo que uma pilha e uma fila, porque pode ser acessada pelas duas extremidades simultaneamente. Além disso, o fato de uma estrutura de dados ser fornecida a você como uma pilha ou uma fila, não significa necessariamente que ela seja implementada como tal, há casos em que uma estrutura de dados pode ser implementada como qualquer coisa e fornecida como um específico estrutura de dados simplesmente porque pode ser feita para se comportar como tal. Em outras palavras, se você fornecer um método push e pop para qualquer estrutura de dados, eles magicamente se tornam pilhas!