Filas Exemplo de Aplicação

Documentos relacionados
Estruturas de Dados Aula 11: TAD Pilha

REVISÃO DE PILHAS E FILAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Algoritmos e Estruturas de Dados II IEC013

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

ESTRUTURA DE DADOS (TCC )

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Estruturas de Dados Filas

Fila e Deque. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Pilhas e Filas. Nádia Félix e Hebert Coelho

Conceitos. Pilhas e Filas. Conceitos e Implementação em linguagem C. Maria Adriana Vidigal de Lima. Março

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

LP II Estrutura de Dados

Filas Implementação Sequencial

Algoritmos e Estrutura de Dados II

08/08/2011. Pilha. SCC0202 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo. Pilha. O que é? Para que serve?

INF 1620 P2-01/11/03 Questão 1 Nome:

Estruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

LISTAS LINEARES. Estrutura de Dados

Estruturas Compostas Parte II

SCC Algoritmos e Estruturas de Dados I

Estrutura de dados - Listas Encadeadas

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Arvores, Percursos não recursivos, Arvores heterogêneas. Aula 19

CES-11. Pilhas Definição Operações Filas. Operações Deques. Definição. Operações

Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio

Notações: in, pré e posfixada

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

BCC202 - Estrutura de Dados I

Algoritmos e Estruturas de Dados I

Fila. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Pilha. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Carlos Eduardo Batista. Centro de Informática - UFPB

Pilhas. ser acessada somente por uma de suas extremidades. pelo topo. S Uma pilha é uma estrutura linear de dados que pode

Tipos abstratos de dados; pilhas e filas

Revisão: Tipo Abstrato de Dados Recursividade

22/08/2011. Fila. SCC0202 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo. Fila. O que é? Para que serve?

Aula 7 e 8 Filas e suas Aplicações. Prof. Leticia Winkler

A regra de acesso aos dados de uma fila é a seguinte: O primeiro elemento que entra (na fila) é o primeiro que sai (FIFO first in, first out).

Fila. SCC0502 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)

Aula 2 Listas Lineares Sequenciais. prof Leticia Winkler

Pilhas e Filas. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.2 e 3.3

Aula 3 Alocação Dinâmica

Fila. 26 e 31/8/2008 Representação/Implementação: Seqüencial estática Encadeada dinâmica Exercícios/Aplicações

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Aula 5 e 6 Pilhas e suas Aplicações. prof Leticia Winkler

12. Filas Interface do tipo fila

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

Listas Lineares. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1

Pilhas e Filas. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Pilha. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Gustavo Batista

UNIVERSIDADE DA BEIRA INTERIOR

Fila. Algoritmos e Estruturas de Dados I. Baseado no material de Thiago A. S. Pardo. Debora Medeiros

ESTRUTURAS DE DADOS E ALGORITMOS II ANTONIO RAMOS DE CARVALHO JÚNIOR PILHAS

Algoritmos e Estruturas de Dados II IEC013. TAD, Pilhas e Filas. Prof. César Melo

Estruturas de Dados Encadeadas

16/11/2015 Lista Tipo de dado Lista - Implementação Lista - Implementação Lista - Implementação 3

AULA 13 ESTRUTURA DE DADOS

INF 1620 P2-23/10/04 Questão 1 Nome:

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Transcrição:

Filas Exemplo de Aplicação Uma aplicação interessante para filas é a ordenação por distribuição, descrita a seguir. Seja uma lista l composta de n chaves, cada qual representada por um inteiro numa base b > 1. O problema consiste em ordenar essa lista. O algoritmo utiliza b filas, denotadas por f i, 0 i b-1. Seja d o comprimento máximo da representação das chaves na base b. O algoritmo efetua d iterações, em cada uma das quais a tabela é percorrida. 331

Filas Exemplo de Aplicação A primeira iteração destaca, em cada nó, o dígito menos significativo da representação b- ária de cada chave. Se este for igual a k, a chave correspondente será inserida na fila f k. Ao terminar o percurso da tabela, esta se encontra distribuída pelas filas, que devem então ser concatenadas em sequência, isto é, f 0, depois f 1, f 2, etc. Para essa tabela, já disposta numa ordem diferente da original, o processo deve ser repetido levando-se em consideração o segundo dígito da representação,... 332

Filas Exemplo de Aplicação e assim sucessivamente até que tenham sido feitas tantas distribuições quantos são os dígitos na chave de ordenação. Observaremos agora um exemplo dessa ordenação, onde b=10 e d=2. lista: 19 13 05 27 01 26 31 16 02 09 11 21 60 07 Interação 1: 1ª distribuição (unidades simples) 333

lista: 19 13 05 27 01 26 31 16 02 09 11 21 60 07 fila 0 : 60 fila 1 : 01, 31, 11, 21 fila 2 : 02 fila 3 : 13 fila 4 : fila 5 : 05 fila 6 : 26, 16 fila 7 : 27, 07 fila 8 : fila 9 : 19, 09 lista: 60 01 31 11 21 02 13 05 26 16 27 07 19 09 334

Interação 2: 2ª distribuição (dezenas simples) lista: 60 01 31 11 21 02 13 05 26 16 27 07 19 09 fila 0 : 01, 02, 05, 07, 09 fila 1 : 11, 13, 16, 19 fila 2 : 21, 26, 27 fila 3 : 31 fila 4: fila 5 : fila 6 : 60 fila 7 : fila 8 : fila 9 : lista: 01 02 05 07 09 11 13 16 19 21 26 27 31 60 335

Filas Exemplo de Aplicação Exercício Utilizando-se dos TAD s LISTA_ENC e FILA_ENC, implemente a operação ord_por_dist a qual recebe como entrada uma referência para uma lista encadeada de inteiros e a ordena através do processo de ordenação por distribuição. OBS: b=10 e d=4. 336

Filas Como vimos, uma fila nada mais é do que uma lista com uma disciplina de acesso. Logo, podemos nos utilizar de todos os conceitos vistos em listas para implementarmos filas. Por exemplo, podemos utilizar uma lista circular para armazenar uma fila. Como exercício de fixação, implemente um TAD FILA, armazenado a mesma em uma lista circular. 338

339 Pilhas

Caracterização Uma pilha é uma lista com restrições de acesso, onde todas as operações só podem ser aplicadas sobre uma das extremidades da lista, denominada topo da pilha. Com isso estabelece-se o critério LIFO (Last In, First Out), que indica que o último item que entra é o primeiro a sair. O modelo intuitivo para isto é o de uma pilha de pratos, ou livros, etc, na qual só se pode visualizar (consultar) o último empilhado e este é o único que pode ser retirado; E, também, qualquer novo empilhamento (inserção) se fará sobre o último da pilha. 340

341 Caracterização

P 342 Alocação Sequencial Uma forma de se implementar uma pilha é armazená-la num vetor VAL de MAX valores associado com um cursor inteiro TOPO que indica onde está o topo da pilha, como se vê abaixo: VAL TOPO MAX A Implementação das operações é trivial: - a pilha cresce do começo para o fim do vetor;

343 Alocação Sequencial - uma pilha vazia tem o cursor TOPO igual a -1; - a cada inserção, o cursor topo é incrementado para apontar para a próxima posição livre do vetor, onde é armazenado o novo elemento; - uma retirada decrementa o cursor; - uma consulta devolve o valor do elemento indexado por TOPO. De posse destas informações definiremos e implementaremos agora o TAD PILHA_SEQ.

344 /*Definição do TAD PILHA_SEQ*/ typedef struct int TOPO; /*índice do topo da pilha*/ int VAL[MAX]; /*vetor de elementos*/ }PILHA_SEQ; void cria_pilha (PILHA_SEQ *); int eh_vazia (PILHA_SEQ *); void push (PILHA_SEQ *, int); int top (PILHA_SEQ *); void pop (PILHA_SEQ *); int top_pop (PILHA_SEQ *);

Pilha - Alocação Sequencial Com base no que foi visto implemente a operação cria_pilha() que compõem o TAD PILHA_SEQ. typedef struct int TOPO; /*índice do topo da pilha*/ int VAL[MAX]; /*vetor de elementos*/ }PILHA_SEQ; void cria_pilha (PILHA_SEQ *); int eh_vazia (PILHA_SEQ *); void push (PILHA_SEQ *, int); int top (PILHA_SEQ *); void pop (PILHA_SEQ *); int top_pop (PILHA_SEQ *); 345

void cria_pilha (PILHA_SEQ *p) p->topo = -1; } 346

Pilha - Alocação Sequencial Com base no que foi visto implemente a operação eh_vazia() que compõem o TAD PILHA_SEQ. typedef struct int TOPO; /*índice do topo da pilha*/ int VAL[MAX]; /*vetor de elementos*/ }PILHA_SEQ; void cria_pilha (PILHA_SEQ *); int eh_vazia (PILHA_SEQ *); void push (PILHA_SEQ *, int); int top (PILHA_SEQ *); void pop (PILHA_SEQ *); int top_pop (PILHA_SEQ *); 347

int eh_vazia (PILHA_SEQ *p) return (p->topo == -1); } 348

Pilha - Alocação Sequencial Com base no que foi visto implemente a operação push() que compõem o TAD PILHA_SEQ. typedef struct int TOPO; /*índice do topo da pilha*/ int VAL[MAX]; /*vetor de elementos*/ }PILHA_SEQ; void cria_pilha (PILHA_SEQ *); int eh_vazia (PILHA_SEQ *); void push (PILHA_SEQ *, int); int top (PILHA_SEQ *); void pop (PILHA_SEQ *); int top_pop (PILHA_SEQ *); 349

void push (PILHA_SEQ *p, int v) if (p->topo == MAX-1) printf ("\nerro! Estouro na pilha.\n"); exit (1); } p->val[++(p->topo)]=v; } 350

Pilha - Alocação Sequencial Com base no que foi visto implemente a operação top() que compõem o TAD PILHA_SEQ. typedef struct int TOPO; /*índice do topo da pilha*/ int VAL[MAX]; /*vetor de elementos*/ }PILHA_SEQ; void cria_pilha (PILHA_SEQ *); int eh_vazia (PILHA_SEQ *); void push (PILHA_SEQ *, int); int top (PILHA_SEQ *); void pop (PILHA_SEQ *); int top_pop (PILHA_SEQ *); 351

int top (PILHA_SEQ *p) if (eh_vazia(p)) } printf ("\nerro! Consulta na pilha vazia.\n"); exit (2); } else return (p->val[p->topo]); 352

Pilha - Alocação Sequencial Com base no que foi visto implemente a operação pop() que compõem o TAD PILHA_SEQ. typedef struct int TOPO; /*índice do topo da pilha*/ int VAL[MAX]; /*vetor de elementos*/ }PILHA_SEQ; void cria_pilha (PILHA_SEQ *); int eh_vazia (PILHA_SEQ *); void push (PILHA_SEQ *, int); int top (PILHA_SEQ *); void pop (PILHA_SEQ *); int top_pop (PILHA_SEQ *); 353