qual é a diferença básica entre pilha e fila?


130

Qual é a diferença básica entre pilha e fila?

Por favor me ajude, sou incapaz de encontrar a diferença.

Como você diferencia uma pilha e uma fila?

Procurei a resposta em vários links e encontrei esta resposta ..

Na programação de alto nível,

uma pilha é definida como uma lista ou sequência de elementos que é alongada colocando novos elementos "em cima" dos elementos existentes e abreviada removendo elementos da parte superior dos elementos existentes. É um ADT [Abstract Data Type] com operações matemáticas de "push" e "pop".

Uma fila é uma sequência de elementos adicionados ao colocar o novo elemento na parte traseira do existente e abreviado, removendo elementos na frente da fila. É um ADT [Abstract Data Type]. Há mais desses termos entendidos na programação de Java, C ++, Python e assim por diante.

Posso ter uma resposta mais detalhada? Por favor me ajude.


12
Parece que você respondeu à sua própria pergunta - uma pilha é um contêiner LIFO (último a entrar, primeiro a sair) e uma fila é um contêiner FIFO (primeiro a entrar, primeiro a sair).
Iridium

Respostas:


151

Stack é uma estrutura de dados LIFO (último a entrar, primeiro a sair). O link associado à wikipedia contém descrição e exemplos detalhados.

Fila é uma estrutura de dados FIFO (primeiro a entrar, primeiro a sair). O link associado à wikipedia contém descrição e exemplos detalhados.


131

Imagine uma pilha de papel . A última peça colocada na pilha está no topo, então é a primeira a sair. Este é o LIFO . Adicionar um pedaço de papel é chamado "empurrar" e remover um pedaço de papel é chamado "estourar".

Imagine uma fila na loja . A primeira pessoa na fila é a primeira pessoa a sair da fila. Este é FIFO . Uma pessoa que entra na fila é "enfileirada" e uma pessoa que sai da fila é "enfileirada".


3
Uma das melhores analogias que consigo pensar.
Yeikel 03/02

83

Um modelo visual

Pilha de panquecas (LIFO)

A única maneira de adicionar e / ou remover um é de cima.

pilha de panqueca

Fila de linha (FIFO)

Quando alguém chega, chega ao final da fila e, quando sai, sai da frente da fila.

linha dmv

Curiosidade: os britânicos se referem a filas de pessoas como uma Fila


6
Jee, esta deve ser a resposta imo. Obrigado @Jacksonkr
Kulasangar

Haha, com certeza essa é uma descrição perfeita de Fila e Pilha, mas apenas por uma questão de argumento, e se eu quiser a primeira panqueca adicionada ao prato? Eu sei que isso pode ser concluído com um stack.size () vs. if (! Stack.isEmpty ()), mas ainda assim a primeira panqueca pode ser a melhor:) ... De qualquer maneira, uma boa resposta e eu concordo que isso é o mais claro ... parece interessante que os britânicos se refiram às linhas como Filas (se isso for preciso), em linguagem não programática eu ainda consideraria que uma linha em que a primeira entrada sai primeiro (depois de sair da linha / fila) )
ViaTech

Espere, eles não são chamados de filas em outro lugar?
excursão

37

Você pode pensar em ambos como uma lista ordenada de itens (ordenada pela hora em que foram adicionados à lista). A principal diferença entre os dois é como os novos elementos entram na lista e os elementos antigos deixam a lista.

Para uma pilha, se eu tenho uma lista a, b, c, e eu adiciono d, ela é pregada no final, então eu acabo com a,b,c,d. Se eu quiser exibir um elemento da lista, removo o último elemento que adicionei, que é d. Depois de um pop, minha lista está a,b,cnovamente

Para uma fila, adiciono novos elementos da mesma maneira. a,b,ctorna-se a,b,c,dapós a adição d. Mas agora, quando eu pop, tenho que pegar um elemento da frente da lista, para que ele se torne b,c,d.

É muito simples!


14

Fila

Fila é uma coleção ordenada de itens.

Os itens são excluídos em uma extremidade chamada extremidade frontal da fila.

Os itens são inseridos na outra extremidade, chamados de "parte traseira" da fila.

O primeiro item inserido é o primeiro a ser removido (FIFO).

Pilha

Pilha é uma coleção de itens.

Permite acessar apenas um item de dados: o último item inserido.

Os itens são inseridos e excluídos em uma extremidade chamada 'Topo da pilha'.

É um objeto dinâmico e em constante mudança.

Todos os itens de dados são colocados no topo da pilha e retirados do topo

Essa estrutura de acesso é conhecida como estrutura Last in First Out (LIFO)


Então, basicamente, uma 'fila' é um "FIFO" - o primeiro a entrar na primeira fila. Enquanto uma 'pilha' é um "LIFO" - o último a entrar na primeira fila. Estou correcto?
Sebastian Nielsen

@SebastianNielsen Sim, corrija como mencionado na resposta.
Dissanayake

Mas qual é a diferença entre uma lista vinculada e uma pilha? Não é o mesmo?
Sebastian Nielsen

@SebastianNielsen A pilha é um ADT, o que significa que expõe uma interface, que é a operação push e pop, mas o mecanismo subjacente (implementação) está oculto no usuário final. Uma pilha pode ser implementada com uma matriz ou com uma lista vinculada.
Gdyrrahitis

13

PILHA:

  1. Pilha é definida como uma lista de elementos na qual podemos inserir ou excluir elementos apenas na parte superior da pilha.
  2. O comportamento de uma pilha é como um sistema LIFO (Last-In First-Out).
  3. Pilha é usada para passar parâmetros entre funções. Em uma chamada para uma função, os parâmetros e variáveis ​​locais são armazenados em uma pilha.
  4. Linguagens de programação de alto nível, como Pascal, c, etc. que fornecem suporte para recursão, usam a pilha para contabilidade. Lembre-se de que em cada chamada recursiva, é necessário salvar o valor atual dos parâmetros, variáveis ​​locais e o endereço de retorno (o endereço para o qual o controle deve retornar após a chamada).

FILA:

  1. Fila é uma coleção do mesmo tipo de elemento. É uma lista linear na qual as inserções podem ocorrer em uma extremidade da lista, denominada parte traseira da lista, e as exclusões podem ocorrer somente na outra extremidade, denominada parte frontal da lista
  2. O comportamento de uma fila é como um sistema FIFO (primeiro a entrar, primeiro a sair).

Eu tenho certeza que você pode inserir no final ou início de uma pilha também, eu acho que a coisa importante a notar aqui é o FIFO vs. LIFO
Mike

6

Uma pilha é uma coleção de elementos, que podem ser armazenados e recuperados um de cada vez. Os elementos são recuperados na ordem inversa do tempo de armazenamento, ou seja, o último elemento armazenado é o próximo a ser recuperado. Às vezes, uma pilha é chamada de estrutura Last-In-First-Out (LIFO) ou First-In-Last-Out (FILO). Os elementos armazenados anteriormente não podem ser recuperados até que o elemento mais recente (geralmente chamado de elemento 'top') tenha sido recuperado.

Uma fila é uma coleção de elementos, que podem ser armazenados e recuperados um de cada vez. Os elementos são recuperados na ordem do tempo de armazenamento, ou seja, o primeiro elemento armazenado é o próximo elemento a ser recuperado. Às vezes, uma fila é chamada de estrutura First-In-First-Out (FIFO) ou Last-In-Last-Out (LILO). Os elementos armazenados posteriormente não podem ser recuperados até que o primeiro elemento (geralmente chamado de elemento 'front') tenha sido recuperado.


2

PILHA: A pilha é definida como uma lista de elementos nos quais podemos inserir ou excluir elementos apenas na parte superior da pilha.

Pilha é usada para passar parâmetros entre funções. Em uma chamada para uma função, os parâmetros e variáveis ​​locais são armazenados em uma pilha.

Uma pilha é uma coleção de elementos, que podem ser armazenados e recuperados um de cada vez. Os elementos são recuperados na ordem inversa do tempo de armazenamento, ou seja, o último elemento armazenado é o próximo a ser recuperado. Às vezes, uma pilha é chamada de estrutura Last-In-First-Out (LIFO) ou First-In-Last-Out (FILO). Os elementos armazenados anteriormente não podem ser recuperados até que o elemento mais recente (geralmente chamado de elemento 'top') tenha sido recuperado.

FILA:

Fila é uma coleção do mesmo tipo de elemento. É uma lista linear na qual as inserções podem ocorrer em uma extremidade da lista, denominada parte traseira da lista, e as exclusões podem ocorrer apenas na outra extremidade, denominada parte frontal da lista

Uma fila é uma coleção de elementos, que podem ser armazenados e recuperados um de cada vez. Os elementos são recuperados na ordem do tempo de armazenamento, ou seja, o primeiro elemento armazenado é o próximo elemento a ser recuperado. Às vezes, uma fila é chamada de estrutura First-In-First-Out (FIFO) ou Last-In-Last-Out (LILO). Os elementos armazenados posteriormente não podem ser recuperados até que o primeiro elemento (geralmente chamado de elemento 'front') tenha sido recuperado.


2

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!


Não use formatação de código para texto que não seja código.
Marquês de Lorne

1

STACK é uma lista do LIFO (último a entrar, primeiro a sair). significa suponha que 3 elementos sejam inseridos na pilha, isto é, 10,20,30. 10 são inseridos primeiro e 30 são inseridos por último; portanto, 30 são excluídos da pilha e 10 são excluídos pela última vez da pilha.

QUEUE é a lista FIFO (primeiro a entrar, primeiro a sair). Significa que um elemento é inserido primeiro, o qual deve ser excluído primeiro.


1

Empilha uma coleção considerada vertical. Primeiro, entenda que uma coleção é um OBJETO que reúne e organiza outros OBJETOS menores. Esses OBJETOS menores são comumente referidos como Elementos. Esses elementos são "Empurrados" na pilha em uma ordem ABC em que A é o primeiro e C é o último. verticalmente ficaria assim: 3º elemento adicionado) C 2º elemento adicionado) B 1º elemento adicionado) A

Observe que o "A" que foi adicionado primeiro à pilha está na parte inferior. Se você deseja remover o "A" da pilha, primeiro você precisa remover "C", depois "B" e, finalmente, o elemento de destino "A". A pilha requer uma abordagem LIFO ao lidar com as complexidades de uma pilha. (Last In First Out) Ao remover um elemento de uma pilha, a sintaxe correta é pop. nós não removemos um elemento de uma pilha, nós o "destacamos".

Lembre-se de que "A" foi o primeiro elemento pressionado na pilha e "C" foi o último item pressionado na pilha. Se você decidir que gostaria de ver o que está no fundo da pilha, sendo os 3 elementos na pilha ordenados A sendo o primeiro B sendo o segundo e C sendo o terceiro elemento, o topo teria que ser disparado e depois o segundo elemento adicionado para visualizar a parte inferior da pilha.


Formate sua pergunta para torná-la melhor e mais legível.
Neeku
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.