Pilha e Fila Estática
-
Upload
sergio-souza-costa -
Category
Documents
-
view
3.671 -
download
0
Transcript of Pilha e Fila Estática
![Page 1: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/1.jpg)
Pilha e Fila estáticaProf. Sérgio Souza Costa
InicioFim
Correia transporadora
![Page 2: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/2.jpg)
Sobre mim
Sérgio Souza CostaProfessor - UFMADoutor em Computação Aplicada (INPE)
https://sites.google.com/site/profsergiocosta/home
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
http://www.slideshare.net/skosta/presentations?order=popular
![Page 3: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/3.jpg)
Pilhas
Um dos conceitos mais úteis na ciência da computação é o de pilha. Nesta aula, examinaremos essa simples estrutura de dados e verificaremos por que ela desempenha esse proeminente papel nas áreas de programação e de linguagens de programação.
Disciplina| Professor
Esta aula pode ser vista também no vídeo abaixo:
![Page 4: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/4.jpg)
Pilhas
![Page 5: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/5.jpg)
Quais operações você pode fazer com pilhas ?
![Page 6: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/6.jpg)
Quais operações você pode fazer com pilhas ?
Empilhar
![Page 7: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/7.jpg)
Quais operações você pode fazer com pilhas ?
EmpilharNo topo
![Page 8: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/8.jpg)
Quais operações você pode fazer com pilhas ?
EmpilharNo topo
Desempilhar
![Page 9: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/9.jpg)
Quais operações você pode fazer com pilhas ?
EmpilharNo topo
DesempilharDo topo
![Page 10: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/10.jpg)
(1)
Pilha: Conceito básico
![Page 11: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/11.jpg)
(1) (2)
empilha
Pilha: Conceito básico
![Page 12: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/12.jpg)
(1) (2) (3)
empilha
empilha
Pilha: Conceito básico
![Page 13: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/13.jpg)
(1) (2) (3) (4)
empilha
empilha
empilha
Pilha: Conceito básico
![Page 14: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/14.jpg)
(1) (2) (3) (4)
(5)
empilha
empilha
empilha
Desempilha
Pilha: Conceito básico
![Page 15: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/15.jpg)
(1) (2) (3) (4)
(5) (6)
empilha
empilha
empilha
Desempilhaempilha
Pilha: Conceito básico
![Page 16: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/16.jpg)
(1) (2) (3) (4)
(5) (6) (7)
empilha
empilha
empilha
Desempilhaempilha
Desempilha
Pilha: Conceito básico
![Page 17: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/17.jpg)
(1) (2) (3) (4)
(5) (6) (7) (8)
empilha
empilha
empilha
Desempilhaempilha
Desempilha
Desempilha
Pilha: Conceito básico
![Page 18: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/18.jpg)
(1) (2) (3) (4)
(5) (6) (7) (8)
empilha
empilha
empilha
Desempilhaempilha
Desempilha
Desempilha
Pilha: Conceito básico
O primeiro que entra é o último que sai.LIFO (do inglês, Last In First Out).
![Page 19: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/19.jpg)
O Tipo Abstrato Pilha
![Page 20: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/20.jpg)
O Tipo Abstrato Pilha
Ou seja, as operações que descrevem o comportamento da Pilha.
![Page 21: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/21.jpg)
Quais seriam estas operações, vocês são
capazes de enumerá-las ?
![Page 22: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/22.jpg)
1. Empilhar
![Page 23: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/23.jpg)
2. Desempilhar
1. Empilhar
![Page 24: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/24.jpg)
2. Desempilhar
1. Empilhar
3. Verificar o valor do topo
![Page 25: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/25.jpg)
2. Desempilhar
1. Empilhar
3. Verificar o valor do topo
4. Verificar se a pilha está vazia
![Page 26: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/26.jpg)
2. Desempilhar
1. Empilhar
3. Verificar o valor do topo
4. Verificar se a pilha está vazia
5. Cria uma Pilha
![Page 27: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/27.jpg)
TAD: Pilha
Significado das operações (P sendo uma pilha e x um elemento)
1.cria_pilha () - Inicializa uma pilha, retornando uma dada pilha P
2.empilha(P,x) - Acrescenta o elemento x no topo da pilha P (o tamanho de P aumenta)
3.desempilha (P) - Remove e retorna o elemento no topo da pilha (o tamanho de P diminui)
4.pilha_vazia (P) - Verifica se a pilha está vazia (ou seja, não possui nenhum elemento)
5.topo (P) – Retorna o valor que está no topo da pilha
![Page 28: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/28.jpg)
Qual será o estado final da pilha após estas operações ?
p = cria_pilha()empilha (p, 10)empilha (p, 20)empilha (p, 30)desempilha (p)empilha (p,50)desempilha (p)desempilha (p)empilha (p,90)
![Page 29: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/29.jpg)
p = cria_pilha ()empilha (p, 10)empilha (p, 20)empilha (p, 30)desempilha (p)empilha (p,50)desempilha (p)desempilha (p)empilha (p,90)
p
![Page 30: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/30.jpg)
p = cria_pilha ()empilha (p, 10)empilha (p, 20)empilha (p, 30)desempilha (p)empilha (p,50)desempilha (p)desempilha (p)empilha (p,90)
p
10
p
![Page 31: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/31.jpg)
p = cria_pilha ()empilha (p, 10)empilha (p, 20)empilha (p, 30)desempilha (p)empilha (p,50)desempilha (p)desempilha (p)empilha (p,90)
p
10
p
10
20
p
![Page 32: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/32.jpg)
p = cria_pilha ()empilha (p, 10)empilha (p, 20)empilha (p, 30)desempilha (p)empilha (p,50)desempilha (p)desempilha (p)empilha (p,90)
p
10
p
10
20
p
10
20
30
p
![Page 33: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/33.jpg)
p = cria_pilha ()empilha (p, 10)empilha (p, 20)empilha (p, 30)desempilha (p)empilha (p,50)desempilha (p)desempilha (p)empilha (p,90)
p
10
p
10
20
p
10
20
30
p
10
20
p
![Page 34: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/34.jpg)
p = cria_pilha ()empilha (p, 10)empilha (p, 20)empilha (p, 30)desempilha (p)empilha (p,50)desempilha (p)desempilha (p)empilha (p,90)
p
10
p
10
20
p
10
20
30
p
10
20
p
10
20
50
p
![Page 35: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/35.jpg)
p = cria_pilha ()empilha (p, 10)empilha (p, 20)empilha (p, 30)desempilha (p)empilha (p,50)desempilha (p)desempilha (p)empilha (p,90)
p
10
p
10
20
p
10
20
30
p
10
20
p
10
20
50
p
10
20
p
![Page 36: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/36.jpg)
p = cria_pilha ()empilha (p, 10)empilha (p, 20)empilha (p, 30)desempilha (p)empilha (p,50)desempilha (p)desempilha (p)empilha (p,90)
p
10
p
10
20
p
10
20
30
p
10
20
p
10
20
50
p
10
20
p
10
p
![Page 37: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/37.jpg)
p = cria_pilha ()empilha (p, 10)empilha (p, 20)empilha (p, 30)desempilha (p)empilha (p,50)desempilha (p)desempilha (p)empilha (p,90)
p
10
p
10
20
p
10
20
30
p
10
20
p
10
20
50
p
10
20
p
10
p
10
90
p
![Page 38: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/38.jpg)
p = cria_pilha ()empilha (p, 10)empilha (p, 20)empilha (p, 30)desempilha (p)empilha (p,50)desempilha (p)desempilha (p)empilha (p,90)
p
10
p
10
20
p
10
20
30
p
10
20
p
10
20
50
p
10
20
p
10
p
10
90
p
![Page 39: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/39.jpg)
Entenderam o conceito da pilha ?
![Page 40: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/40.jpg)
Como podemos codificar esta estrutura ?
![Page 41: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/41.jpg)
Que elementos podemos usar ?
![Page 42: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/42.jpg)
Esta aula pode ser vista também no vídeo abaixo:
Vídeo Aula
![Page 43: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/43.jpg)
TAD: Pilha
Uma possibilidade é usar vetores, dados que estes permitem armazenar uma coleção de dados.
![Page 44: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/44.jpg)
TAD: Pilha
Uma possibilidade é usar vetores, dados que estes permitem armazenar uma coleção de dados.
Uma pilha que usa vetor como estrutura básica é chamada de pilha estática.
![Page 45: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/45.jpg)
TAD: Pilha
Uma possibilidade é usar vetores, dados que estes permitem armazenar uma coleção de dados.
Uma pilha que usa vetor como estrutura básica é chamada de pilha estática.
Na Unidade II, veremos como codificar uma pilha dinâmica usando listas encadeadas.
![Page 46: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/46.jpg)
Codificando o TAD Pilha
•Antes de prosseguir, pause a aula e tentem rascunhar em papel como seria as operações:
–Empilha e
–Desempilha
![Page 47: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/47.jpg)
Codificando o TAD Pilha
•Ao usar um vetor como estrutura para a nossa pilha precisamos:
–Saber em qual posição do vetor o elemento deve ser empilhado.
–Saber quando a pilha encheu, ou seja, precisaremos de uma operação que verifica se a pilha encheu.
![Page 48: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/48.jpg)
Codificando o TAD Pilha
•O que vamos precisar para codificar a nossa pilha?
![Page 49: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/49.jpg)
Codificando o TAD Pilha
•O que vamos precisar para codificar a nossa pilha?
Registros
![Page 50: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/50.jpg)
Codificando o TAD Pilha
•O que vamos precisar para codificar a nossa pilha?
Registros Funções
![Page 51: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/51.jpg)
Codificando o TAD Pilha
•O que vamos precisar para codificar a nossa pilha?
RegistrosFunções
Ponteiros
![Page 52: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/52.jpg)
Codificando o TAD Pilha
•O que vamos precisar para codificar a nossa pilha?
RegistrosFunções
Ponteiros
Alocação Dinâmica
![Page 53: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/53.jpg)
Codificando o TAD Pilha
Criando o tipo de dado Pilha ...
typedef struct {
} Pilha;
Esta é a sintaxe básica para criar qualquer tipo de dado. Mas o que uma pilha irá ter ?.
![Page 54: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/54.jpg)
Codificando o TAD Pilha
Criando o tipo de dado Pilha ...
typedef struct {int v[10];
} Pilha;
Um vetor v com um dado tamanho para armazenar os dados.
![Page 55: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/55.jpg)
Codificando o TAD Pilha
Criando o tipo de dado Pilha ...
#define MAX 10typedef struct {
int v[MAX];
} Pilha;
Porém, usamos uma constante para definir o tamanho do vetor. Por que ?
![Page 56: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/56.jpg)
Codificando o TAD Pilha
Criando o tipo de dado Pilha ...
#define MAX 10typedef struct { int v[MAX]; int topo;} Pilha;
Precisamos ainda saber em qual posicão inserir, para isso usamos o atributo topo
![Page 57: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/57.jpg)
Codificando o TAD Pilha
Codificando as operações:
Pilha* criaPilha (){ Pilha* p = (Pilha*) malloc (sizeof(Pilha)); p->topo = 0; return p;}
![Page 58: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/58.jpg)
Codificando o TAD Pilha
Codificando as operações:
// verifica se a pilha está cheiaint pilhaCheia (Pilha *p) { return (p->topo == MAX);}
// verifica se está vaziaint pilhaVazia (Pilha* p) { return p->topo == 0;}
![Page 59: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/59.jpg)
Codificando o TAD Pilha
Codificando as operações:
void empilha (Pilha *p, int x) {p->v[p->topo++] = x;
}
int desempilha (Pilha* p) {return p->v[--p->topo];
}// retorna o elemento do topo, sem desempilharint topo (Pilha* p) { return p->v[p->topo-1];}
![Page 60: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/60.jpg)
Codificando o TAD Pilha
Codificando as operações:
void empilha (Pilha *p, int x) {p->v[p->topo++] = x;
}
int desempilha (Pilha* p) {return p->v[--p->topo];
}// retorna o elemento do topo, sem desempilharint topo (Pilha* p) { return p->v[p->topo-1];}
![Page 61: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/61.jpg)
Codificando o TAD Pilha
Codificando as operações:
void empilha (Pilha *p, int x) {p->v[p->topo++] = x;
}
int desempilha (Pilha* p) {return p->v[--p->topo];
}// retorna o elemento do topo, sem desempilharint topo (Pilha* p) { return p->v[p->topo-1];}
void empilha (Pilha *p, int x) {p->v[p->topo] = x;
p->topo++;}
![Page 62: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/62.jpg)
Codificando o TAD Pilha
Codificando as operações:
void empilha (Pilha *p, int x) {p->v[p->topo++] = x;
}
int desempilha (Pilha* p) {return p->v[--p->topo];
}// retorna o elemento do topo, sem desempilharint topo (Pilha* p) { return p->v[p->topo-1];}
![Page 63: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/63.jpg)
Codificando o TAD Pilha
Codificando as operações:
void empilha (Pilha *p, int x) {p->v[p->topo++] = x;
}
int desempilha (Pilha* p) {return p->v[--p->topo];
}// retorna o elemento do topo, sem desempilharint topo (Pilha* p) { return p->v[p->topo-1];}
void desempilha (Pilha *) {p->topo--;return p->v[p->topo];
}
![Page 64: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/64.jpg)
Codificando o TAD Pilha
Codificando as operações:
void empilha (Pilha *p, int x) {p->v[p->topo++] = x;
}
int desempilha (Pilha* p) {return p->v[--p->topo];
}// retorna o elemento do topo, sem desempilharint topo (Pilha* p) { return p->v[p->topo-1];}
![Page 65: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/65.jpg)
Codificando o TAD Pilha
•Aplicação Cliente: Testando nossa pilha:– O que será impresso ?
int main () { Pilha* p = criaPilha (); empilha (p, 10); empilha (p, 30); empilha (p, 40); printf ("%d\n", desempilha (p));
printf ("%d\n", desempilha (p)); printf ("%d\n", desempilha (p));
}
![Page 67: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/67.jpg)
Aplicações
•Como o uso das pilhas é possivel simplificar diversos algoritmos.
–O próprio sistema operacional utiliza pilha para tratar as chamadas a funções.
–Uma outra aplicação comum é na avaliação de expressões e de parênteses.
![Page 68: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/68.jpg)
Identificando palíndromos• Palíndromos são palavras ou frases que são iguais
quando lidas de frente para trás
• Exemplos: ANA
ARARA
ROTOR
SOCORRAM ME SUBI NO ONIBUS EM MARROCOS (não considerando os espaços em branco)
![Page 69: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/69.jpg)
Identificando palíndromos• Algoritmo
1. Empilhe n/2 letras
2. Descarta letra central se houver
3. Repita
1. Compare o topo da pilha com a proxima letra
2. Se são iguais entao Desempilhe
3. Senao Não é um palíndromo
4. Se no final a pilha está vazia entao a palavra é um palíndromo
![Page 70: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/70.jpg)
Identificando palíndromos
ARARATopo =0
1 2 3 4 5 6 7 8
Base =1
![Page 71: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/71.jpg)
Identificando palíndromos
ARARATopo =1
A1 2 3 4 5 6 7 8
Base =1
Empilha letra 1
![Page 72: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/72.jpg)
Identificando palíndromos
ARARATopo =2
RA1 2 3 4 5 6 7 8
Base =1
Empilha letra 2
![Page 73: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/73.jpg)
Identificando palíndromos
ARARATopo =2
RA1 2 3 4 5 6 7 8
Base =1
Descarta letra central
![Page 74: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/74.jpg)
Identificando palíndromos
ARARATopo =2
RA1 2 3 4 5 6 7 8
Base =1
Comparar topo com próxima letra
![Page 75: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/75.jpg)
Identificando palíndromos
ARARATopo =1
A1 2 3 4 5 6 7 8
Base =1
Se são iguais então desempilhe
![Page 76: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/76.jpg)
Identificando palíndromos
ARARATopo =1
A1 2 3 4 5 6 7 8
Base =1
Comparar topo com próxima letra
![Page 77: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/77.jpg)
Identificando palíndromos
ARARATopo =1
1 2 3 4 5 6 7 8
Base =1
Se são iguais então desempilhe
![Page 78: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/78.jpg)
Identificando palíndromos
ARARATopo =1
1 2 3 4 5 6 7 8
Base =1
Se no final a pilha está vazia então é um palíndromo
![Page 79: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/79.jpg)
Outros exemplos
•Pilhas podem ser utilizadas para verificar se os parênteses em uma expressão está balanceado.
Exemplo:
((3+4 + (4*9) ERRO: Faltam dois parênteses fechando!
Como?
![Page 80: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/80.jpg)
Outros exemplos
•Pilhas podem ser utilizadas para verificar se os parênteses em uma expressão está balanceado.
Exemplo:
((3+4 + (4*9) ERRO: Faltam dois parênteses fechando!
Como? Para cada carácter da expressão faça
•Se encontrou um “(“ empilha•Se encontrou um “)” então
•Se a pilha estiver vazia: expressão invalida•Caso contrario desempilhe
• Se no final pilha estiver vazia, expressão válida.
![Page 81: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/81.jpg)
Notação Infixa - AvaliaçãoOperadores entre operandos.
4 + 6 * 8
Como decidir quais operadores são avaliados primeiros ?oAbordagem usual é usar as mesmas regras da
matemática.oCaso a precedênciaseja a mesma, avalia-se da
esquerda para direitaoParenteses tem precedência sobre todos
operadores.
![Page 82: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/82.jpg)
Notação PolonesaÉ fácil observar que devido a estas regras, o algoritmo para
avaliar expressões na notação infixa não é muito trivial.
O matemático polonês Jan Łukasiewicz criou uma notação em torno de 1920 que elimina a necessidade de regras.
Ficou sendo conhecida como notação polonesa.
Não é muito usado na matemática convencional, mas muito usado nas ciências da computação devido sua simplicidade.
![Page 83: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/83.jpg)
Avaliação de expressões - Notações
Infixa: A + (B*C) / D
Posfixa (polonesa reversa): A B C * + D /
Préfixa (polonesa): + A / * B C D
![Page 84: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/84.jpg)
Avaliação de expressões - Notações
Infixa: A + (B*C) / D
Posfixa (polonesa reversa): A B C * + D /
Préfixa (polonesa): + A / * B C D
![Page 85: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/85.jpg)
Exemplos de uso da notação polonesa
Linguagens:
Scheme e Lisp
![Page 86: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/86.jpg)
Algoritmo de avaliação de expressão na notação pos-fixa.
![Page 87: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/87.jpg)
Notação PosfixaA avaliação de expressões nesta notação é a mais simples.
Percorrendo uma expressão da esquerda para direita, sabemos que ele deve operar os dois últimos valores encontrados (considerando que os operadores são binários, por exemplo os aritméticos).
![Page 88: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/88.jpg)
Notação posfixaConsiderem a seguinte expressão 7 3 + 5 *
Expressão Elemento Ação Pilha
73+5* P:[]
3+5* 7 Empilhar P:[7]
+5* 3 Empilhar P:[3,7]
5* + Desempilha 3Desempilha 7Empilha 3+7
P:[7]P:[]P:[10]
* 5 Empilhar P:[5,10]
* Desempilha 5Desempilha 10Empilha 5*10
P:[10]P:[]P:[50]
Se a pilha tiver mais de um elemento, erro, caso contrário retorna o único valor da pilha.
![Page 89: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/89.jpg)
Referências Bibliográficas
•AARON, Tanenbaun. Estruturas de Dados usando C. São Paulo: Makron Books, 1995.
•PEREIRA, Silvio. Estruturas de Dados Fundamentais. São Paulo: Editora Erica, 1996.
•VELOSO, Paulo et al. Estruturas de Dados. Rio de Janeiro: Editora Campus, 1983.
![Page 90: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/90.jpg)
Vídeo Aula
Esta aula pode ser vista também no vídeo abaixo:
![Page 91: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/91.jpg)
Fila: Conceito
Conceito base: O primeiro a entrar é o primeiro a sair. Em Inglês (Fifo): First In Fist Out
•Fila de banco•Fila de pacientes•Fila do supermercado
![Page 92: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/92.jpg)
O Tipo Abstrato Fila
![Page 93: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/93.jpg)
O Tipo Abstrato Fila
Ou seja, as operações que descrevem o comportamento da Fila.
![Page 94: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/94.jpg)
Quais seriam estas operações, são capazes de
enumerá-las ?
![Page 95: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/95.jpg)
1. criarFila
![Page 96: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/96.jpg)
1. criarFila
2. enfileirar
![Page 97: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/97.jpg)
1. criarFila
2. enfileirar
3. desenfileirar
![Page 98: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/98.jpg)
Como podemos codificar esta estrutura ?
![Page 99: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/99.jpg)
Quais elementos podemos usar ?
![Page 100: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/100.jpg)
TAD: Fila
Novamente, uma possibilidade é usar vetores, dado que estes permitem armazenar uma coleção de dados.
Uma fila que usa vetor como estrutura básica é chamada de fila estática.
Na Unidade III, veremos como codificar uma fila dinâmica usando listas encadeadas.
![Page 101: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/101.jpg)
Estava pensando, e observei que na pilha a entrada e saída é pelo mesmo “lado”.
Porém na fila é diferente, quem chega vai para fim da fila e sai quem está no início da
fila.
![Page 102: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/102.jpg)
Imaginando, um trabalho em série, onde um conjunto de peças percorre uma
correia até ela ir para empacotamento teríamos algo assim:
![Page 103: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/103.jpg)
InicioFim
Empacotador
Correia transporadora
![Page 104: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/104.jpg)
InicioFim
Correia transporadora
Quando chega um novo produto, ele é colocado no fim da fila.
Empacotador
![Page 105: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/105.jpg)
InicioFim
Correia transporadora
Quando um produto chega ao fim do processo, a peça anterior passa a ser o inicio da fila.
Empacotador
![Page 106: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/106.jpg)
InicioFim
Correia transporadora
Quando um produto chega ao fim do processo, a peça anterior passa a ser o inicio da fila.
Empacotador
![Page 107: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/107.jpg)
InicioFim
Correia transporadora
Empacotador
Quando chega um novo produto, ele é colocado no fim da fila.
![Page 108: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/108.jpg)
CODIFICANDO ...
![Page 109: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/109.jpg)
TAD: Fila
Definindo o tipo de dados Fila. Observe, que tivemos que incluir os dois atributos, que marcam o inicio e o fim da fila.
typedef struct {int v[MAX];int inicio, fim;
}Fila;
![Page 110: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/110.jpg)
Codificando as operações:
Fila* criaFila () {Fila* q = (Fila*)
malloc (sizeof(Fila));q->inicio = 0;q->fim = 0;return q;
}
TAD: Fila
![Page 111: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/111.jpg)
Antes de codificar vou pensar um pouco. Eu sei que quando eu enfileiro estarei
incrementando o fim e quando eu desenfileiro eu incremento o inicio. Mas
vou simular antes de codificar.
![Page 112: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/112.jpg)
q Inicio
fim0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
![Page 113: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/113.jpg)
10
q Inicio
fim
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
![Page 114: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/114.jpg)
10
20
q Inicio
fim
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
![Page 115: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/115.jpg)
10
20
30
q Inicio
fim
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
![Page 116: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/116.jpg)
20
30
q
Inicio
fim
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
10
![Page 117: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/117.jpg)
30
q
Inicio
fim
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
1020
![Page 118: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/118.jpg)
30
q
Inicio
fim
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
1020
![Page 119: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/119.jpg)
30
q
Inicio
fim
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
Erro: Mesmo tendo áreas vagas, eu nao posso mais adicionar elemento.
![Page 120: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/120.jpg)
Solução, vetor circular:
Fonte:http://www2.dc.ufscar.br/~bsi/materiais/ed/u5.html
Depois do último elemento, temos o primeiro e antes do primeiro temos o último.
TAD: Fila
![Page 121: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/121.jpg)
Agora vou simular novamente, mas considerando meu vetor circular.
![Page 122: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/122.jpg)
q Inicio
fim0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
![Page 123: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/123.jpg)
10
q Inicio
fim
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
![Page 124: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/124.jpg)
10
20
q Inicio
fim
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
![Page 125: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/125.jpg)
10
20
30
q Inicio
fim
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
![Page 126: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/126.jpg)
20
30
q
Inicio
fim
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
10
![Page 127: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/127.jpg)
30
q
Inicio
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
fim
1020
![Page 128: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/128.jpg)
50
30
q
Inicio
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
fim
1020
![Page 129: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/129.jpg)
50
60
30
q
Inicio
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
fim
1020
![Page 130: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/130.jpg)
50
60
q Inicio
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
fim
102030
![Page 131: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/131.jpg)
60
q
Inicio 0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
fim
10203050
![Page 132: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/132.jpg)
q
Inicio
0
1
2
Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 50);enfileira (q, 60);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));
Considerando uma fila de no máximo 3 elementos:
fim
1020305060
![Page 133: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/133.jpg)
Codificando as operações:
void enfileira (Fila* q, int x) {q->v[q->fim++] = x;if (q->fim == MAX)
q->fim = 0;}
![Page 134: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/134.jpg)
Codificando as operações:
void enfileira (Fila* q, int x) {q->v[q->fim++] = x;if (q->fim == MAX)
q->fim = 0;}
Adicionamos ao fim da fila e incrementamos a variável fim.
TAD: Fila
![Page 135: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/135.jpg)
Codificando as operações:
void enfileira (Fila* q, int x) {q->v[q->fim++] = x;if (q->fim == MAX)
q->fim = 0;}
Aqui simula o vetor circular. Se chega a MAX, então fim passa ser 0.
TAD: Fila
![Page 136: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/136.jpg)
Codificando as operações:
int desenfileira(Fila* q) {int x = q->v[q->inicio++];if (q->inicio == MAX)
q->inicio = 0;return x;
}Similar ao enfileira, com a diferença que irei remover o elemento do inicio da fila.
TAD: Fila
![Page 137: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/137.jpg)
Testando nossa codificação:
int main () {Fila *q = criaFila ();enfileira (q, 10);enfileira (q, 20);enfileira (q, 30);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));enfileira (q, 40);printf ("%d\n", desenfileira(q));printf ("%d\n", desenfileira(q));return 0;
}
O que será impresso ?
TAD: Fila
![Page 138: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/138.jpg)
Exemplos de Aplicação
![Page 139: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/139.jpg)
Fila: Aplicações
•Em controle de processos no sistema operacional, fila de processos.
•Em algoritmo de busca em grafo (busca em largura).
•Algoritmo de caminho mínimo (Dijkstra).
•Algoritmo de ordenação.
![Page 140: Pilha e Fila Estática](https://reader036.fdocumentos.com/reader036/viewer/2022082222/5563a512d8b42a2b6a8b521c/html5/thumbnails/140.jpg)
Referências Bibliográficas
•AARON, Tanenbaun. Estruturas de Dados usando C. São Paulo: Makron Books, 1995.
•PEREIRA, Silvio. Estruturas de Dados Fundamentais. São Paulo: Editora Erica, 1996.
•VELOSO, Paulo et al. Estruturas de Dados. Rio de Janeiro: Editora Campus, 1983.