SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
Pilha e Fila Dinâmica
Prof: Sergio Souza Costa
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com

https://sites.google.com/site/profsergiocosta/home
http://www.slideshare.net/skosta/presentations?order=popular
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
Pilha Dinâmica
• A pilha que codificamos anteriormente era estática,
dado que utilizava vetores.
• Agora que já codificamos a lista encadeada,
podemos utiliza-la para codificar nossa pilha
dinâmica.
• Antes de prosseguir, pense como seria este código.
Pilha Dinâmica
• A estrutura da pilha é bem simples, precisando
apenas de uma lista para armazenar os elementos.
Como a lista é dinâmica, a pilha também é dinâmica.
typedef struct {
Lista* l;
} Pilha;
Pilha dinâmica
• Agora precisamos codificar o tipo abstrato lista,
codificando as mesmas operações que foram
codificadas para a pilha estática.
–
–
–
–
–
–

Pilha* criaPilha ();
int pilhaVazia();
void empilha (Pilha *p, int x);
int desempilha();
int topo();
int pilhaCheia (Pilha *p);

Não é necessária. Por que ?
Operações da Pilha
1.
2.
3.

Alocamos a área de memória da pilha.
Inicializamos a lista da pilha com lista vazia.
Retornamos a pilha.

Pilha* criaPilha (){
1.
Pilha* p =
(Pilha*)malloc (sizeof(Pilha));
2.
p->l = Vazia();
return p;
3.
}
Operações da pilha
• Verificar se a pilha esta vazia é verificar se a lista esta
vazia.
int pilhaVazia (Pilha* p) {
return p->l == Vazia();
}
Operações da pilha
• Empilhar um elemento X na pilha é adicioná-lo na
lista.
void empilha (Pilha *p, int x) {
p->l = Cons (x, p->l);
}
Operações da pilha
• Retornar o elemento do topo é retornar o elemento
que está na cabeça da lista, ou seja, o último
adicionado.
int topo (Pilha* p) {
return primeiro(p->l);
}
Operações da pilha
• A operação desempilha, além de retornar o
elemento do topo da pilha, precisa removê-lo.
int desempilha (Pilha* p) {
int x = topo (p);
p->l = resto(p->l);
return x;
}

Remove o
elemento da
cabeça da pilha
Será que posso codificar uma fila dinâmica usando a lista
encadeada que já tenho pronta? O que vocês acham ?
A fila difere da pilha pelo fato de que na pilha inserimos e
removemos de uma mesma extremidade. Na fila eu insiro
em uma extremidade e remove em outra.
Então, preciso criar mais uma operação para a lista.
Qual seria ?
Então, preciso criar mais uma operação para a lista.
Qual seria ?
InsereFim, que irá inserir o elemento no fim da lista.
Codificando
• Adicionando a operação que insere um elemento no
fim da lista.
Lista* insereFim (int x, Lista* l) {
Lista* aux;
if (l == Vazia()) return Cons (x, l);
aux = l;
while (aux ->resto != Vazia())
aux = aux ->resto;
aux->resto = Cons (x, Vazia());
return l;
}
Codificando
• Adicionando a operação que insere um elemento no
fim da lista.
Lista* insereFim (int x, Lista* l) {
Lista* aux;
if (l == Vazia()) return Cons (x, l);
aux = l;
while (aux ->resto)
aux = aux ->resto;
aux->cauda = Cons (x, Vazia());
return l;
}

Se minha lista é
vazia, então já estou
no fim da lista.
Codificando
• Adicionando a operação que insere um elemento no
fim da lista.
Lista* insereFim (int x, Lista* l) {
Lista* aux;
if (l == Vazia()) return Cons (x, l);
aux = l;
while (aux ->resto)
aux = aux ->resto;
aux->cauda = Cons (x, Vazia());
return l;
}

Ou preciso percorrer
a lista até o fim.
Codificando
• Adicionando a operação que insere um elemento no
fim da lista.
Lista* insereFim (int x, Lista* l) {
Lista* aux;
if (l == Vazia()) return Cons (x, l);
aux = l;
while (aux ->resto)
aux = aux ->resto;
aux->resto = Cons (x, Vazia());
return l;
}

Então posso
adicioná-lo ao fim da
lista.
Não entendi muito bem, este código, ele é iterativo, os
que tinha feito até então era todos recursivo.
Vou agora usar uma
representação gráfica
comum para lista. Ela pode
te ajudar a entender este
código
L
L

5
L

5

6
L

5

6

7
L

5

6

7
L

5

6

7

Ponteiro nulo,
representa lista
vazia.
L

5

6

7

resto, é referido também como
próximo

Ponteiro nulo,
representa lista
vazia.
L

5

6

7

cauda, é eferido também como
próximo

Adicionar no fim é
adicionar um novo nó
neste ponto

Ponteiro nulo,
representa lista
vazia.
L

5

6

7

resto, referido também como
próximo

Adicionar no fim é
adicionar um novo nó
neste ponto

Ponteiro nulo,
representa lista
vazia.

Então, percorremos a lista até que o
resto seja nula, ou seja, não tenha
mais nó. Então adicionamos um novo
nó neste ponto.
L

5

6

7
Volte ao código e releiao buscando entender
melhor o seu
funcionamento antes de
prosseguir.
.
Ponteiro nulo,
representa lista
cauda, referido também como
vazia.
próximo

Adicionar no fim é
adicionar um novo nó
neste ponto

Então, percorremos a lista até que a
cauda seja nula, ou seja, não tenha
mais nó. Então adicionamos um novo
nó neste ponto.
Acho que agora já sei como codificar a fila dinâmica.
Codificando
• A estrutura vai ser similar a da pilha, apenas com um
atributo que é a lista:
typedef struct {
Lista* l;
}Fila;
Codificando
• O construtor também é similar ao da pilha.

Fila* criaFila () {
Fila* f =
(Fila*) malloc (sizeof(Fila));
f->l = Vazia();
return f;
}
Codificando
• A desenfileira é similar a desempilha.
int desenfileira (Fila* f) {
int x = primeiro (f->l);
f->l = resto (f->l);
return x;
}
Codificando
• Na enfileira chamamos a operação que insere um
elemento no fim da lista.
void enfileira (Fila* f, int x) {
f->l = insereFim(x,f->l);
}
Experimentem todos os
códigos feitos nesta aula e
as atividades postadas no
site.
Até logo !

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Searching and sorting
Searching  and sortingSearching  and sorting
Searching and sorting
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
The Sieve of Eratosthenes - Part 1
The Sieve of Eratosthenes - Part 1The Sieve of Eratosthenes - Part 1
The Sieve of Eratosthenes - Part 1
 
Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
 
Trigonometria
TrigonometriaTrigonometria
Trigonometria
 
Pirâmides
PirâmidesPirâmides
Pirâmides
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Scratch - Desafio Digital
Scratch - Desafio DigitalScratch - Desafio Digital
Scratch - Desafio Digital
 
14.3 derivadas parciais [pt. 1]
14.3 derivadas parciais [pt. 1]14.3 derivadas parciais [pt. 1]
14.3 derivadas parciais [pt. 1]
 
Funcoes Trigonometricas Bom
Funcoes Trigonometricas BomFuncoes Trigonometricas Bom
Funcoes Trigonometricas Bom
 
www.aulasapoio.com - Matemática - Semelhança de Triângulos
www.aulasapoio.com  - Matemática -  Semelhança de Triânguloswww.aulasapoio.com  - Matemática -  Semelhança de Triângulos
www.aulasapoio.com - Matemática - Semelhança de Triângulos
 
stack presentation
stack presentationstack presentation
stack presentation
 
Distribuição de frequencia
Distribuição de frequenciaDistribuição de frequencia
Distribuição de frequencia
 
Sistemas de numeração
Sistemas de numeraçãoSistemas de numeração
Sistemas de numeração
 
Stacks & Queues By Ms. Niti Arora
Stacks & Queues By Ms. Niti AroraStacks & Queues By Ms. Niti Arora
Stacks & Queues By Ms. Niti Arora
 
Sistemas lineares
Sistemas linearesSistemas lineares
Sistemas lineares
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 

Destaque

Liderança - SENAI
Liderança - SENAILiderança - SENAI
Liderança - SENAIegasmuniz
 
Aula01 - estrutura de dados
Aula01 - estrutura de dadosAula01 - estrutura de dados
Aula01 - estrutura de dadosAbner Lima
 
Apostila – Curso LiderançA
Apostila – Curso LiderançAApostila – Curso LiderançA
Apostila – Curso LiderançADavid Campos
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoGustavo Carvalho
 
JavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em DesenvolvimentoJavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em DesenvolvimentoEduardo Bregaida
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeRafael Ponte
 
Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)Rafael Ponte
 
Estrutura de Dados Aula 05 - Filas Estáticas
Estrutura de Dados  Aula 05 - Filas EstáticasEstrutura de Dados  Aula 05 - Filas Estáticas
Estrutura de Dados Aula 05 - Filas EstáticasLeinylson Fontinele
 

Destaque (20)

Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estruturas de dados
Estruturas de dadosEstruturas de dados
Estruturas de dados
 
Carlos Henrique Pereira [monografia]
Carlos Henrique Pereira [monografia]Carlos Henrique Pereira [monografia]
Carlos Henrique Pereira [monografia]
 
Liderança - SENAI
Liderança - SENAILiderança - SENAI
Liderança - SENAI
 
Pged 06
Pged 06Pged 06
Pged 06
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Aula03 Filas
Aula03   FilasAula03   Filas
Aula03 Filas
 
Aula02 Pilhas
Aula02   PilhasAula02   Pilhas
Aula02 Pilhas
 
Ed1
Ed1Ed1
Ed1
 
Aula01 - estrutura de dados
Aula01 - estrutura de dadosAula01 - estrutura de dados
Aula01 - estrutura de dados
 
Apostila – Curso LiderançA
Apostila – Curso LiderançAApostila – Curso LiderançA
Apostila – Curso LiderançA
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenação
 
Apostila jsf
Apostila jsfApostila jsf
Apostila jsf
 
JavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em DesenvolvimentoJavaServer Faces Produtividade em Desenvolvimento
JavaServer Faces Produtividade em Desenvolvimento
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividade
 
Introdução a jsf
Introdução a jsfIntrodução a jsf
Introdução a jsf
 
Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)
 
Estrutura de Dados Aula 05 - Filas Estáticas
Estrutura de Dados  Aula 05 - Filas EstáticasEstrutura de Dados  Aula 05 - Filas Estáticas
Estrutura de Dados Aula 05 - Filas Estáticas
 
Teoria das Filas
Teoria das FilasTeoria das Filas
Teoria das Filas
 

Semelhante a Pilha e Fila Dinamica

Semelhante a Pilha e Fila Dinamica (20)

Usar explicação 01
Usar explicação 01Usar explicação 01
Usar explicação 01
 
Usar explicação 01
Usar explicação 01Usar explicação 01
Usar explicação 01
 
Top0
Top0Top0
Top0
 
Top0
Top0Top0
Top0
 
Lpiii dp-apostila
Lpiii dp-apostilaLpiii dp-apostila
Lpiii dp-apostila
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Lista de inteiros
Lista de inteirosLista de inteiros
Lista de inteiros
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.ppt
 
Programação-Aula004
Programação-Aula004Programação-Aula004
Programação-Aula004
 
Listas Estáticas Encadeadas usando linguagem C
Listas Estáticas Encadeadas usando linguagem CListas Estáticas Encadeadas usando linguagem C
Listas Estáticas Encadeadas usando linguagem C
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteiros
 
Haskell
HaskellHaskell
Haskell
 
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
Fugindo para as colinas com Python - Julio Biason - Tchelinux Bento Gonçalves...
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Pged 04
Pged 04Pged 04
Pged 04
 
Aula 07 - lista linear
Aula 07 - lista linearAula 07 - lista linear
Aula 07 - lista linear
 
Skip List
Skip ListSkip List
Skip List
 
Listas em C
Listas em CListas em C
Listas em C
 
Linguagem lua
Linguagem luaLinguagem lua
Linguagem lua
 
6 alocacao sequencial - pilhas
6   alocacao sequencial - pilhas6   alocacao sequencial - pilhas
6 alocacao sequencial - pilhas
 

Mais de Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasSérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computadorSérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosSérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoSérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemSérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaSérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoSérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theoremsSérgio Souza Costa
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsSérgio Souza Costa
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosSérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Sérgio Souza Costa
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)Sérgio Souza Costa
 

Mais de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 

Pilha e Fila Dinamica

  • 1. Pilha e Fila Dinâmica Prof: Sergio Souza Costa
  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home http://www.slideshare.net/skosta/presentations?order=popular https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta
  • 3. Pilha Dinâmica • A pilha que codificamos anteriormente era estática, dado que utilizava vetores. • Agora que já codificamos a lista encadeada, podemos utiliza-la para codificar nossa pilha dinâmica. • Antes de prosseguir, pense como seria este código.
  • 4. Pilha Dinâmica • A estrutura da pilha é bem simples, precisando apenas de uma lista para armazenar os elementos. Como a lista é dinâmica, a pilha também é dinâmica. typedef struct { Lista* l; } Pilha;
  • 5. Pilha dinâmica • Agora precisamos codificar o tipo abstrato lista, codificando as mesmas operações que foram codificadas para a pilha estática. – – – – – – Pilha* criaPilha (); int pilhaVazia(); void empilha (Pilha *p, int x); int desempilha(); int topo(); int pilhaCheia (Pilha *p); Não é necessária. Por que ?
  • 6. Operações da Pilha 1. 2. 3. Alocamos a área de memória da pilha. Inicializamos a lista da pilha com lista vazia. Retornamos a pilha. Pilha* criaPilha (){ 1. Pilha* p = (Pilha*)malloc (sizeof(Pilha)); 2. p->l = Vazia(); return p; 3. }
  • 7. Operações da pilha • Verificar se a pilha esta vazia é verificar se a lista esta vazia. int pilhaVazia (Pilha* p) { return p->l == Vazia(); }
  • 8. Operações da pilha • Empilhar um elemento X na pilha é adicioná-lo na lista. void empilha (Pilha *p, int x) { p->l = Cons (x, p->l); }
  • 9. Operações da pilha • Retornar o elemento do topo é retornar o elemento que está na cabeça da lista, ou seja, o último adicionado. int topo (Pilha* p) { return primeiro(p->l); }
  • 10. Operações da pilha • A operação desempilha, além de retornar o elemento do topo da pilha, precisa removê-lo. int desempilha (Pilha* p) { int x = topo (p); p->l = resto(p->l); return x; } Remove o elemento da cabeça da pilha
  • 11. Será que posso codificar uma fila dinâmica usando a lista encadeada que já tenho pronta? O que vocês acham ?
  • 12. A fila difere da pilha pelo fato de que na pilha inserimos e removemos de uma mesma extremidade. Na fila eu insiro em uma extremidade e remove em outra.
  • 13. Então, preciso criar mais uma operação para a lista. Qual seria ?
  • 14. Então, preciso criar mais uma operação para a lista. Qual seria ? InsereFim, que irá inserir o elemento no fim da lista.
  • 15. Codificando • Adicionando a operação que insere um elemento no fim da lista. Lista* insereFim (int x, Lista* l) { Lista* aux; if (l == Vazia()) return Cons (x, l); aux = l; while (aux ->resto != Vazia()) aux = aux ->resto; aux->resto = Cons (x, Vazia()); return l; }
  • 16. Codificando • Adicionando a operação que insere um elemento no fim da lista. Lista* insereFim (int x, Lista* l) { Lista* aux; if (l == Vazia()) return Cons (x, l); aux = l; while (aux ->resto) aux = aux ->resto; aux->cauda = Cons (x, Vazia()); return l; } Se minha lista é vazia, então já estou no fim da lista.
  • 17. Codificando • Adicionando a operação que insere um elemento no fim da lista. Lista* insereFim (int x, Lista* l) { Lista* aux; if (l == Vazia()) return Cons (x, l); aux = l; while (aux ->resto) aux = aux ->resto; aux->cauda = Cons (x, Vazia()); return l; } Ou preciso percorrer a lista até o fim.
  • 18. Codificando • Adicionando a operação que insere um elemento no fim da lista. Lista* insereFim (int x, Lista* l) { Lista* aux; if (l == Vazia()) return Cons (x, l); aux = l; while (aux ->resto) aux = aux ->resto; aux->resto = Cons (x, Vazia()); return l; } Então posso adicioná-lo ao fim da lista.
  • 19. Não entendi muito bem, este código, ele é iterativo, os que tinha feito até então era todos recursivo.
  • 20. Vou agora usar uma representação gráfica comum para lista. Ela pode te ajudar a entender este código
  • 21. L
  • 22. L 5
  • 23. L 5 6
  • 27. L 5 6 7 resto, é referido também como próximo Ponteiro nulo, representa lista vazia.
  • 28. L 5 6 7 cauda, é eferido também como próximo Adicionar no fim é adicionar um novo nó neste ponto Ponteiro nulo, representa lista vazia.
  • 29. L 5 6 7 resto, referido também como próximo Adicionar no fim é adicionar um novo nó neste ponto Ponteiro nulo, representa lista vazia. Então, percorremos a lista até que o resto seja nula, ou seja, não tenha mais nó. Então adicionamos um novo nó neste ponto.
  • 30. L 5 6 7 Volte ao código e releiao buscando entender melhor o seu funcionamento antes de prosseguir. . Ponteiro nulo, representa lista cauda, referido também como vazia. próximo Adicionar no fim é adicionar um novo nó neste ponto Então, percorremos a lista até que a cauda seja nula, ou seja, não tenha mais nó. Então adicionamos um novo nó neste ponto.
  • 31. Acho que agora já sei como codificar a fila dinâmica.
  • 32. Codificando • A estrutura vai ser similar a da pilha, apenas com um atributo que é a lista: typedef struct { Lista* l; }Fila;
  • 33. Codificando • O construtor também é similar ao da pilha. Fila* criaFila () { Fila* f = (Fila*) malloc (sizeof(Fila)); f->l = Vazia(); return f; }
  • 34. Codificando • A desenfileira é similar a desempilha. int desenfileira (Fila* f) { int x = primeiro (f->l); f->l = resto (f->l); return x; }
  • 35. Codificando • Na enfileira chamamos a operação que insere um elemento no fim da lista. void enfileira (Fila* f, int x) { f->l = insereFim(x,f->l); }
  • 36. Experimentem todos os códigos feitos nesta aula e as atividades postadas no site. Até logo !