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

Documentos relacionados
Pilhas Acesso. Pilha. Fila. Listas lineares especiais. Pilhas e Filas. Listas lineares especiais mais usuais. Disciplina restrita

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

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

Estruturas de Dados Filas

Instituto de C. Filas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

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

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

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Estruturas Compostas Parte II

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP

Introdução a Programação. Tipos Abstratos de Dados Implementando Pilha e Fila

Filas. Prof. Túlio Toffolo BCC202 Aula 12 Algoritmos e Estruturas de Dados I

Estruturas de Dados Aula 11: TAD Pilha

PCC104 - Projeto e Análise de Algoritmos

Algoritmos e Estruturas de Dados I

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

ASSOCIAÇÃO PARAIBANA DE ENSINO RENOVADO FACULDADE PARAIBANA DE PROCESSAMENTO DE DADOS ESTRUTURA DE DADOS

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

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

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

Estrutura de Dados II. Prof. Sérgio Portari

Carlos Eduardo Batista. Centro de Informática - UFPB

Filas Exemplo de Aplicação

Algoritmos e Estruturas de Dados II IEC013

Instituto de C. Linguagem C: Listas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

ESTRUTURA DE DADOS (TCC )

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

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

GRAFOS E DIGRAFOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

1. Listas sequenciais versus listas ligadas. Lista sequencial

Listas (Parte 1) Túlio Toffolo BCC202 Aula 09 Algoritmos e Estruturas de Dados I

Programação Orientada a Objetos II JAVA Décima Aula. Prof. Rogério Albuquerque de Almeida

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

Programação II. Filas (Queues) Bruno Feijó Dept. de Informática, PUC-Rio

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

LP II Estrutura de Dados

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

INF1007 Programação 2 9 Pilhas. (c) Dept. Informática - PUC-Rio 1

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

Métodos Computacionais. Listas Encadeadas

BCC202 - Estrutura de Dados I

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

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

Revisão de TDA, Pilhas e Filas

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

EAD PILHA - DEFINIÇÃO

Fila e Deque. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Alocação Seqüencial VAL MAX TOPO

Atividade de laboratório listas encadeadas simples

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).

//Declaração do TAD pilha. // As operações definidas para esse tipo são criar() push() pop() destroi() // typedef struct pilha TPilha;

AULA 13 ESTRUTURA DE DADOS

INF 1007 Programação II

LP II Estrutura de Dados

Aula 05: Listas Encadeadas. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

BCC202 - Estrutura de Dados I

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

FILAS. As coisas de que uma fila é feita serão chamadas itens. Os itens podem ser números, strings, structs, etc., etc.

Universidade Federal do Ma Curso de Ciência da Computação

12. Filas Interface do tipo fila

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

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

LISTAS LINEARES. Estrutura de Dados

struct Nodo { int struct Nodo typedef struct Nodo *PNodo; PNodo ConstruirPilha () { int PNodo Criar printf scanf while Push printf scanf return

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

Algoritmos e Estruturas de dados

S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas

Listas: a última das 3 estruturas lineares (Pilhas, Filas e Listas)... árvores e grafos são não lineares!

AULA 12 ESTRUTURA DE DADOS

Estruturas de Dados Encadeadas

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1

ÁRVORE B. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Estrutura de Dados: Aula 3 - Linguagem C

programas = estrutura de dados + algoritmos

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

UNIVERSIDADE DA BEIRA INTERIOR

Lista: conceito, representação e algoritmos

SCC Algoritmos e Estruturas de Dados I

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 4: Listas Estáticas e Dinâmicas

L I C R P * * V O * * A * A F * * * * *

Prof. Jesus José de Oliveira Neto

Capítulo 8: Abstrações de dados

SCC 202 Prova 1. 28/9/2010 Resolução e Comentários

- Estruturas e aplicações

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas

Melhores momentos AULA 14

Filas. Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing,

Filas. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1

DAINF - Departamento de Informática

Instituto Luterano de Ensino Superior de Ji-Paraná Curso Bacharelado em Informática Estrutura de Dados I Prof.: José Luiz A.

# Estrutura de Dados # Aula 06 Pilhas Estáticas. Prof. Leinylson Fontinele Pereira

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

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

Estrutura de dados - Listas Encadeadas

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

Aula 2 Listas Lineares Sequenciais. prof Leticia Winkler

Transcrição:

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

PILHAS E FILAS São tipos especiais de listas com disciplina restrita de acesso Acesso Consulta Inserção Remoção Disciplina Restrita Acesso permitido a apenas alguns nós

PILHAS

PILHAS Todas as operações são executadas na mesma extremidade da pilha: o último componente inserido é o primeiro a ser retirado LIFO: Last In, First Out inserções exclusões consultas INSTITUTO DE COMPUTAÇÃO - UFF 4

EXEMPLO DE APLICAÇÃO: RECURSÃO void recursivefunction(int num) { if (num < 5) { recursivefunction(num + 1); printf("%d\n", num); int main() { recursivefunction(0);

RECURSÃO void recursivefunction(int num) { if (num < 5) { recursivefunction(num + 1); printf("%d\n", num); int main() { recursivefunction(0);

OPERAÇÕES SOBRE PILHAS Operações válidas: Criar uma pilha vazia Inserir um nó no topo da pilha Excluir o nó do topo da pilha Consultar/Modificar o nó do topo da pilha Destruir a pilha inserções exclusões consultas topo base

ALTERNATIVAS DE IMPLEMENTAÇÃO Vetores Listas Encadeadas INSTITUTO DE COMPUTAÇÃO - UFF 8

IMPLEMENTAÇÃO DE PILHAS COM VETORES INSTITUTO DE COMPUTAÇÃO - UFF 9

EXEMPLO DE MANIPULAÇÃO DE PILHA COM VETOR 1. Inicializar pilha de inteiros com máximo de 10 nós lim base topo 9 8 7 6 5 4 3 2 1 0

EXEMPLO DE MANIPULAÇÃO DE PILHA COM VETOR 1. Inicializar pilha de inteiros com máximo de 10 nós 2. Inserir nó com valor 3 lim topo base 9 8 7 6 5 4 3 2 1 3 0

EXEMPLO DE MANIPULAÇÃO DE PILHA COM VETOR 1. Inicializar pilha de inteiros com máximo de 10 nós 2. Inserir nó com valor 3 3. Inserir nó com valor 7 lim topo base 9 8 7 6 5 4 3 2 7 1 3 0

EXEMPLO DE MANIPULAÇÃO DE PILHA COM VETOR 1. Inicializar pilha de inteiros com máximo de 10 nós 2. Inserir nó com valor 3 3. Inserir nó com valor 7 4. Inserir nó com valor 5 lim topo base 9 8 7 6 5 4 3 5 2 7 1 3 0

EXEMPLO DE MANIPULAÇÃO DE PILHA COM VETOR 1. Inicializar pilha de inteiros com máximo de 10 nós 2. Inserir nó com valor 3 3. Inserir nó com valor 7 4. Inserir nó com valor 5 5. Remover nó (nó removido é sempre o nó do topo) lim topo base 9 8 7 6 5 4 3 2 7 1 3 0

EXEMPLO DE MANIPULAÇÃO DE PILHA COM VETOR 1. Inicializar pilha de inteiros com máximo de 10 nós 2. Inserir nó com valor 3 3. Inserir nó com valor 7 4. Inserir nó com valor 5 5. Remover nó (nó removido é sempre o nó do topo) 6. Consultar pilha (Retorna 7) lim topo base 9 8 7 6 5 4 3 2 7 1 3 0

DECLARAÇÃO EM C typedef struct pilha { int info; TPilha; int base, lim, topo; INSTITUTO DE COMPUTAÇÃO - UFF 16

CRIAÇÃO DO VETOR NA FUNÇÃO MAIN E INICIALIZAÇÃO void inicializa(int *base, int *lim, int *topo) { *base = 0; *lim = 9; *topo = -1; int main() { TPilha pilha[10]; inicializa(&base, &lim, &topo);... lim base topo 9 8 7 6 5 4 3 2 1 0 INSTITUTO DE COMPUTAÇÃO - UFF 17

CRIAÇÃO DO VETOR NA FUNÇÃO MAIN E INICIALIZAÇÃO void inicializa(int *base, int *lim, int *topo) { *base = 0; *lim = 9; *topo = -1; int main() { TPilha pilha[10]; inicializa(&base, &lim, &topo);... Note o uso de ponteiros para permitir alteração das variáveis base, lim e topo. INSTITUTO DE COMPUTAÇÃO - UFF 18

INSERÇÃO DE ELEMENTO: PUSH int push(tpilha *pilha, int lim, int *topo, int info) { if (pilha_cheia(lim, *topo)) { return -1; //pilha está cheia, inserção inválida else { //faz a inserção *topo = *topo + 1; pilha[*topo].info = info; return info; //retorna elemento inserido INSTITUTO DE COMPUTAÇÃO - UFF 19

INSERÇÃO DE ELEMENTO: PUSH int push(tpilha *pilha, int lim, int *topo, int info) { if (pilha_cheia(lim, *topo)) { return -1; //pilha está cheia, inserção inválida else { //faz a inserção *topo = *topo + 1; pilha[*topo].info = info; return info; //retorna elemento inserido Variáveis lim e info não serão alteradas (então não são ponteiros). Variável topo será alterada, então é ponteiro. Variável p é vetor, então é ponteiro. INSTITUTO DE COMPUTAÇÃO - UFF 20

CHECAR SE PILHA ESTÁ CHEIA int pilha_cheia(int lim, int topo) { if (topo == lim) return 1; else return 0; topo lim base 2 9 3 8 10 7 8 6 1 5 3 4 5 3 7 2 4 1 5 0 INSTITUTO DE COMPUTAÇÃO - UFF 21

REMOÇÃO DE ELEMENTO: POP int pop(tpilha *pilha, int base, int *topo) { if (pilha_vazia(base, *topo)) { return -1; //pilha vazia, remoção inválida else { //faz a remoção int info = pilha[*topo].info; *topo = *topo - 1; return info; //retorna elemento removido INSTITUTO DE COMPUTAÇÃO - UFF 22

CHECAR SE PILHA ESTÁ VAZIA int pilha_vazia(int base, int topo) { if (topo < base) return 1; //pilha vazia else return 0; //pilha não vazia lim base topo 9 8 7 6 5 4 3 2 1 0 INSTITUTO DE COMPUTAÇÃO - UFF 23

CONSULTAR TOPO DA PILHA: PEEK int peek(tpilha *pilha, int base, int *topo) { if (pilha_vazia(base, *topo)) return -1; //pilha vazia else { //faz consulta return pilha[*topo].info; lim topo base 9 8 7 6 5 4 3 7 2 4 1 5 0 INSTITUTO DE COMPUTAÇÃO - UFF 24

IMPLEMENTAÇÃO COMPLETA A implementação completa está no site da disciplina INSTITUTO DE COMPUTAÇÃO - UFF 25

IMPLEMENTAÇÃO DE PILHAS COM LISTAS ENCADEADAS INSTITUTO DE COMPUTAÇÃO - UFF 26

pilha PILHA COM LISTA ENCADEADA topo info 5 prox #include "lista-encadeada.h" 7 typedef struct pilha{ TLista *topo; TPilha; 2 4 8 1 λ

INICIALIZA pilha topo λ TPilha *inicializa() { TPilha *pilha = (TPilha *)malloc(sizeof(tpilha)); pilha->topo = NULL; return pilha; int main() { TPilha *pilha = inicializa();... INSTITUTO DE COMPUTAÇÃO - UFF 28

novo info 2 prox PUSH pilha topo 4 /* * * Insere elem no topo da pilha * */ void push(tpilha *pilha, int elem) { TLista *novo = (TLista*) malloc(sizeof(tlista)); novo->info = elem; novo->prox = pilha->topo; pilha->topo = novo; 8 1 λ INSTITUTO DE COMPUTAÇÃO - UFF 29

CHAMADA DO PUSH NA FUNÇÃO MAIN pilha int main() { TPilha *pilha = inicializa(); push(pilha, 5);... topo info 5 prox λ INSTITUTO DE COMPUTAÇÃO - UFF 30

EXERCÍCIO: IMPLEMENTAR O POP /* * * Exclui o elemento do topo da pilha * retorna o info do elemento excluído */ int pop(tpilha *pilha) { //TODO INSTITUTO DE COMPUTAÇÃO - UFF 31

EXERCÍCIO: IMPLEMENTAR O PEEK /* * * Consulta o elemento do topo da pilha * retorna info do elemento do topo */ int peek(tpilha *pilha) { //TODO INSTITUTO DE COMPUTAÇÃO - UFF 32

FILAS

FILAS Inserções são executadas em uma extremidade, e exclusões na outra: o primeiro componente inserido é o primeiro a ser retirado FIFO: First In, First Out inserções exclusões consultas INSTITUTO DE COMPUTAÇÃO - UFF 34

DECLARAÇÃO #include "lista-encadeada.h" typedef struct fila { TLista *inicio; TLista *fim; TFila; inicio fim 5 3 2 INSTITUTO DE COMPUTAÇÃO - UFF 35

novo INSERÇÃO (SEMPRE NO FIM) inicio fim 5 3 2 4 void insere(tfila *f, int elem){ TLista *novo = (TLista *)malloc(sizeof(tlista)); novo->info = elem; novo->prox = NULL; //inserção no fim da fila if (!fila_vazia(f)){ f->fim->prox = novo; else{ f->inicio = novo; f->fim = novo; //elt. novo é o novo fim da fila INSTITUTO DE COMPUTAÇÃO - UFF 36

FILA VAZIA int fila_vazia(tfila *f){ if (f->inicio == NULL) { return 1; else return 0; INSTITUTO DE COMPUTAÇÃO - UFF 37

RETIRAR ELEMENTO DA FILA (SEMPRE DO INÍCIO) inicio fim 5 3 2 int retira(tfila *f){ if (fila_vazia(f)){ exit(1); int info = f->inicio->info; TLista *aux = f->inicio; f->inicio=f->inicio->prox; //se elemento removido era o único da fila //faz fim apontar para NULL também if (f->inicio == NULL) { f->fim = NULL; free(aux); return info; INSTITUTO DE COMPUTAÇÃO - UFF 38

EXERCÍCIOS 1. Faça uma função que imprime o conteúdo da fila, usando as funções de inserção e remoção (ver especificação no Google Classroom) 2. Faça uma função que altera o elemento do início da fila (ver especificação no Google Classroom) 3. Faça uma função que altera o elemento do topo da pilha (ver especificação no Google Classroom) INSTITUTO DE COMPUTAÇÃO - UFF 39

AGRADECIMENTOS Material baseado nos slides de Renata Galante Instituto de Informática, UFRGS Agradecimento a Isabel Rosseti pela implementação INSTITUTO DE COMPUTAÇÃO - UFF 40