Pilhas e Filas
Prof. Francisco Glaubos
Deptº. de Informática, UFMA
francisco.glaubos@ufma.br
Prof. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados
Pilhas
● Coleção de elementos que segue o princípio last-in
first-out (LIFO)
○ Último a entrar, primeiro a sair
● Operações fundamentais: Insere e Remove
○ “inserir” e “remover”
○ Ambas são O(1)
● O termo “Pilha” é uma metáfora para pilha de livros
2
Prof. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados
Exemplos de utilização
● Navegadores de Internet e sites visitados
recentemente
● Editores de texto e o mecanismo “desfazer”
3
UFMA / Estrutura de dados
Exemplo de
operações
em uma
pilha
4
Operação Valor de
retorno
Conteúdo da
Pilha
S.Insere(5) - [5]
S.Insere(3) - [5, 3]
tam(S) 2 [5, 3]
S.vazia() False [5, 3]
S.topo() 3 [5, 3]
S.Remove() 3 [5]
S.Remove() 5 []
S.Remove() “erro” []
Prof. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados
O tipo abstrato de dados (TAD) Pilha
● Uma das mais simples Estruturas de dados (ED), e entre as mais importantes.
● Uma pilha é um tipo de dado abstrato, tal que uma instância sua S suporta os seguintes
métodos:
○ S.Insere (e): adiciona o elemento ‘e’ ao topo da pilha S
○ S.Remove (): Remove e retorna o elemento superior da pilha S
■ um erro ocorre se a pilha estiver vazia
5
Prof. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados
O tipo abstrato de dados (TAD) Pilha
● Métodos de acesso:
○ S.topo(): retorna uma referência ao elemento do topo da pilha S
■ um erro ocorre se a pilha estiver vazia
○ S.vazia(): Retorna True se a pilha S não possuir nenhum elemento; False, caso
contrário.
○ tam(S): retorna o número de elementos da pilha S
● Uma pilha recém-criada está vazia
● Pilha sem limite na capacidade
● Elemento da pilha podem ser de tipos variados
6
Prof. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados
Implementação baseada em Python List
● O python não tem um tipo abstrato Pilha
● Podemos implementar uma pilha utilizando uma lista de Python
○ método append(.)
○ método pop()
○ topo da pilha no final da lista
7
Prof. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados
Implementação baseada em Python List
8
Prof. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados
Implementação baseada em Python List
9
Prof. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados
Exemplo de execução
10
Prof. Francisco Glaubos UFMA / Estrutura de dados
Filas
● É uma estrutura de dados “prima” da Pilha
● Segue o princípio first-in, first-out (FIFO)
○ somente o elemento que está na fila por mais tempo, pode ser
removido.
● Metáfora para fila de pessoas
11
Prof. Francisco Glaubos UFMA / Estrutura de dados
Exemplos de utilização
● Gerenciar uma fila de chamadas em um call center
● Lista de espera em um restaurante
● Impressora em rede
● Servidor Web que responde a requisições
12
UFMA / Licenciatura em computação - Estrutura de dados
Exemplo: Escalonamento de processos
13
Exemplo: Escalonamento de processos
Prof. Francisco Glaubos UFMA / Estrutura de dados
O tipo de dado abstrato Fila
● Objetos em sequência
○ acesso e exclusão apenas do 1º elemento
○ inserção apenas no final
● Uma fila Q suporta os seguintes dois métodos fundamentais:
○ Q.insere(e): adiciona o elemento ‘e’ no final da fila Q
○ Q.remove(): remove e retorna o primeiro elemento da fila Q
● um erro ocorre se a fila estiver vazia
14
Prof. Francisco Glaubos UFMA / Estrutura de dados
O tipo de dado abstrato Fila
● Métodos de suporte:
○ Q.primeiro(): retorna uma referência ao elemento da frente da fila Q
○ Q.vazia(): Retorna True se a fila Q não contém nenhum elemento
○ tam(Q): retorna o número de elementos na fila Q
● Fila recém criada está vazia, e não há limite na sua capacidade
● Elemento inseridos podem ser de qualquer tipo
15
UFMA / Licenciatura em computação - Estrutura de dados
UFMA / Licenciatura em computação - Estrutura de dados
Exemplo de
operações
em uma Fila
16
Operação Valor de retorno Primeiro <- Q <-
Último
Q.insere(5) - [5]
Q.insere(3) - [5, 3]
tam(Q) 2 [5, 3]
Q.remove( ) 5 [3]
Q.vazia( ) False [3]
Q.remove( ) 3 [ ]
Q.vazia( ) True []
Q.remove( ) “erro” []
UFMA / Licenciatura em computação - Estrutura de dadosProf. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados
Implementação baseada em Python List
● O python não tem um tipo abstrato Pilha
● Implementação semelhante à Pilha
● Podemos implementar uma fila utilizando uma lista de Python
○ método append(e)
○ método pop(0)
17
UFMA / Licenciatura em computação - Estrutura de dadosProf. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados
Implementação baseada em Python List
18
UFMA / Licenciatura em computação - Estrutura de dadosProf. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados
Exemplo de execução
19

Slides pilhas e_filas

  • 1.
    Pilhas e Filas Prof.Francisco Glaubos Deptº. de Informática, UFMA francisco.glaubos@ufma.br
  • 2.
    Prof. Francisco GlaubosUFMA / Licenciatura em computação - Estrutura de dados Pilhas ● Coleção de elementos que segue o princípio last-in first-out (LIFO) ○ Último a entrar, primeiro a sair ● Operações fundamentais: Insere e Remove ○ “inserir” e “remover” ○ Ambas são O(1) ● O termo “Pilha” é uma metáfora para pilha de livros 2
  • 3.
    Prof. Francisco GlaubosUFMA / Licenciatura em computação - Estrutura de dados Exemplos de utilização ● Navegadores de Internet e sites visitados recentemente ● Editores de texto e o mecanismo “desfazer” 3
  • 4.
    UFMA / Estruturade dados Exemplo de operações em uma pilha 4 Operação Valor de retorno Conteúdo da Pilha S.Insere(5) - [5] S.Insere(3) - [5, 3] tam(S) 2 [5, 3] S.vazia() False [5, 3] S.topo() 3 [5, 3] S.Remove() 3 [5] S.Remove() 5 [] S.Remove() “erro” []
  • 5.
    Prof. Francisco GlaubosUFMA / Licenciatura em computação - Estrutura de dados O tipo abstrato de dados (TAD) Pilha ● Uma das mais simples Estruturas de dados (ED), e entre as mais importantes. ● Uma pilha é um tipo de dado abstrato, tal que uma instância sua S suporta os seguintes métodos: ○ S.Insere (e): adiciona o elemento ‘e’ ao topo da pilha S ○ S.Remove (): Remove e retorna o elemento superior da pilha S ■ um erro ocorre se a pilha estiver vazia 5
  • 6.
    Prof. Francisco GlaubosUFMA / Licenciatura em computação - Estrutura de dados O tipo abstrato de dados (TAD) Pilha ● Métodos de acesso: ○ S.topo(): retorna uma referência ao elemento do topo da pilha S ■ um erro ocorre se a pilha estiver vazia ○ S.vazia(): Retorna True se a pilha S não possuir nenhum elemento; False, caso contrário. ○ tam(S): retorna o número de elementos da pilha S ● Uma pilha recém-criada está vazia ● Pilha sem limite na capacidade ● Elemento da pilha podem ser de tipos variados 6
  • 7.
    Prof. Francisco GlaubosUFMA / Licenciatura em computação - Estrutura de dados Implementação baseada em Python List ● O python não tem um tipo abstrato Pilha ● Podemos implementar uma pilha utilizando uma lista de Python ○ método append(.) ○ método pop() ○ topo da pilha no final da lista 7
  • 8.
    Prof. Francisco GlaubosUFMA / Licenciatura em computação - Estrutura de dados Implementação baseada em Python List 8
  • 9.
    Prof. Francisco GlaubosUFMA / Licenciatura em computação - Estrutura de dados Implementação baseada em Python List 9
  • 10.
    Prof. Francisco GlaubosUFMA / Licenciatura em computação - Estrutura de dados Exemplo de execução 10
  • 11.
    Prof. Francisco GlaubosUFMA / Estrutura de dados Filas ● É uma estrutura de dados “prima” da Pilha ● Segue o princípio first-in, first-out (FIFO) ○ somente o elemento que está na fila por mais tempo, pode ser removido. ● Metáfora para fila de pessoas 11
  • 12.
    Prof. Francisco GlaubosUFMA / Estrutura de dados Exemplos de utilização ● Gerenciar uma fila de chamadas em um call center ● Lista de espera em um restaurante ● Impressora em rede ● Servidor Web que responde a requisições 12
  • 13.
    UFMA / Licenciaturaem computação - Estrutura de dados Exemplo: Escalonamento de processos 13 Exemplo: Escalonamento de processos
  • 14.
    Prof. Francisco GlaubosUFMA / Estrutura de dados O tipo de dado abstrato Fila ● Objetos em sequência ○ acesso e exclusão apenas do 1º elemento ○ inserção apenas no final ● Uma fila Q suporta os seguintes dois métodos fundamentais: ○ Q.insere(e): adiciona o elemento ‘e’ no final da fila Q ○ Q.remove(): remove e retorna o primeiro elemento da fila Q ● um erro ocorre se a fila estiver vazia 14
  • 15.
    Prof. Francisco GlaubosUFMA / Estrutura de dados O tipo de dado abstrato Fila ● Métodos de suporte: ○ Q.primeiro(): retorna uma referência ao elemento da frente da fila Q ○ Q.vazia(): Retorna True se a fila Q não contém nenhum elemento ○ tam(Q): retorna o número de elementos na fila Q ● Fila recém criada está vazia, e não há limite na sua capacidade ● Elemento inseridos podem ser de qualquer tipo 15
  • 16.
    UFMA / Licenciaturaem computação - Estrutura de dados UFMA / Licenciatura em computação - Estrutura de dados Exemplo de operações em uma Fila 16 Operação Valor de retorno Primeiro <- Q <- Último Q.insere(5) - [5] Q.insere(3) - [5, 3] tam(Q) 2 [5, 3] Q.remove( ) 5 [3] Q.vazia( ) False [3] Q.remove( ) 3 [ ] Q.vazia( ) True [] Q.remove( ) “erro” []
  • 17.
    UFMA / Licenciaturaem computação - Estrutura de dadosProf. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados Implementação baseada em Python List ● O python não tem um tipo abstrato Pilha ● Implementação semelhante à Pilha ● Podemos implementar uma fila utilizando uma lista de Python ○ método append(e) ○ método pop(0) 17
  • 18.
    UFMA / Licenciaturaem computação - Estrutura de dadosProf. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados Implementação baseada em Python List 18
  • 19.
    UFMA / Licenciaturaem computação - Estrutura de dadosProf. Francisco Glaubos UFMA / Licenciatura em computação - Estrutura de dados Exemplo de execução 19