Algoritmos e Estruturas de Dados I

Documentos relacionados
Algoritmos e Estruturas de Dados I

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

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

Tipos abstratos de dados; pilhas e filas

Estruturas de Dados Aula 11: TAD Pilha

Algoritmos e Estruturas de Dados I

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

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

void push(int i){ if (num<max) vet[num++]=i; else { printf(">>> Erro: overflow na pilha!!!\n"); printf("%d nao foi empilhado!!!

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

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

Estruturas Compostas Parte II

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

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

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

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

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

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

SCC Algoritmos e Estruturas de Dados I

Lista 02: Pilhas & Filas

Filas Exemplo de Aplicação

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

Listas ligadas/listas encadeadas

Estruturas de Dados Aula 11: TAD Pilha 09/05/2011

As duas soluções a seguir são exemplos da variedade de soluções admissíveis.

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

Algoritmos e Estruturas de Dados: Lista Duplamente Encadeada

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

Estruturas de Dados Filas

Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP

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

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

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

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

SCC Algoritmos e Estruturas de Dados I

Carlos Eduardo Batista. Centro de Informática - UFPB

Departamento de Informática - PUC-Rio INF 1007 Programação 2 P3 23/06/2010

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

Algoritmos e Estruturas de Dados II IEC013

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

LP II Estrutura de Dados

Avaliação de expressões. Prof: Sérgio Souza Costa

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

AULA 13 ESTRUTURA DE DADOS

Estruturas de Dados Encadeadas

1. Listas sequenciais versus listas ligadas. Lista sequencial

Filas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Revisão: Tipo Abstrato de Dados Recursividade

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

Módulo 10 Listas Encadeadas

ESTRUTURA DE DADOS (TCC )

UNIVERSIDADE DA BEIRA INTERIOR

Filas Implementação Sequencial

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

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

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

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

Pilhas Filas e Listas

Biblioteca STL aplicada à Maratona de

Transcrição:

Algoritmos e Estruturas de Dados I Prof. Daniel M. Martin (daniel.martin@ufabc.edu.br) Aula 8

Aplicação de Fila Calcular a distância entre pessoas no Facebook

Aplicação de Fila Calcular a distância entre pessoas no Facebook Amanda Paul

Aplicação de Fila Algorítmo para achar distância entre a e b:

Aplicação de Fila Algorítmo para achar distância entre a e b: a

Aplicação de Fila Algorítmo para achar distância entre a e b: d a f p g

Aplicação de Fila Algorítmo para achar distância entre a e b: a d f p g k s e j

Aplicação de Fila Algorítmo para achar distância entre a e b: d k a f p s t r g e c j

Aplicação de Fila Algorítmo para achar distância entre a e b: d k h a f p g s e t r c m b j

Onde está a fila neste algoritmo? BUSCA_EM_LARGURA(a, b) visitados Ø F fila vazia distância[a] 0 enfileira a em F enquanto F Ø faça x desenfileira elemento de F para cada amigo y de x faça se y = b então imprime dist de a até b é + distância[y] se y visitados então visitados visitados { y } distância[y] distância[ x] + 1 enfileira y em F

Simulação da busca em largura FILA: a d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t, r d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t, r, c d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t, r, c d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t, r, c d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t, r, c, h d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t, r, c, h d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t, r, c, h d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t, r, c, h d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t, r, c, h d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t, r, c, h, m d k h a f p g s e t r c m b j

Simulação da busca em largura FILA: a, d, f, p, g, k, s, e, j, t, r, c, h, m, b d k h a f p g s e t r c m b j

Algoritmo de Busca em Largura BUSCA_EM_LARGURA(a, b) visitados Ø F fila vazia distância[a] 0 enfileira a em F enquanto F Ø faça x desenfileira elemento de F para cada amigo y de x faça se y = b então imprime dist de a até b é + distância[y] se y visitados então visitados visitados { y } distância[y] distância[ x] + 1 enfileira y em F

Pilha (Stack)

Pilha Lista dinâmica de objetos Todos os objetos são do mesmo tipo (assim como nos vetores, listas ligadas e filas)

Pilha Lista dinâmica de objetos Todos os objetos são do mesmo tipo (assim como nos vetores, listas ligadas e filas) O que caracteriza uma pilha é a ordem de remoção dos elementos

Pilha Lista dinâmica de objetos Todos os objetos são do mesmo tipo (assim como nos vetores, listas ligadas e filas) O que caracteriza uma pilha é a ordem de remoção dos elementos Elementos são removidos na ordem contrária em que são inseridos

Pilha Lista dinâmica de objetos Todos os objetos são do mesmo tipo (assim como nos vetores, listas ligadas e filas) O que caracteriza uma pilha é a ordem de remoção dos elementos Elementos são removidos na ordem contrária em que são inseridos LIFO = last in first out

Pilha Operações de inserção e remoção têm nomes especiais em inglês: push e pop

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() pop()

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() 12 pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() 12 pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() 29 12 pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() 29 12 pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() 34 29 12 pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() 34 29 12 pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() devolve 34 push(17) pop() 29 12 pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() 29 12 pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() 17 29 12 pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() 17 29 12 pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() devolve 17 29 12 pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() 29 12 pop() 10

Simulação de Pilha push(10) push(12) push(29) push(34) pop() push(17) pop() 12 pop() devolve 29 10

Pilha Para armazenar os elementos de uma pilha, a implementação pode usar: Um vetor Uma lista ligada Veremos em sala apenas a implementação usando vetor

Implementação (não modular) Podemos utilizar um vetor v e variáveis N capacidade da pilha (tamanho do vetor) n numero de elementos na pilha

Implementação (não modular) Podemos utilizar um vetor v e variáveis N capacidade da pilha (tamanho do vetor) n numero de elementos na pilha A operação push(x) pode ser feita pelo código v[n ++] = x; A operação x = pop() é feita pelo código x = v[-- n];

Codigo da Simulação Anterior int v[8], N = 8, n = 0, x; v[n ++] = 10; // push(10) v[n ++] = 12; // push(12) v[n ++] = 29; // push(29) v[n ++] = 34; // push(34) x = v[-- n]; // pop() faz x = 34 v[n ++] = 17; // push(17) x = v[-- n]; // pop() faz x = 17 x = v[-- n]; // pop() faz x = 29

Interface: pilha.h #include "item.h" #ifndef ARQUIVO_PILHA_H #define ARQUIVO_PILHA_H typedef void *pilha; // retorna pilha com espaço p/ N itens pilha nova_pilha(int N); // quando a pilha não for mais ser usada: void libera_pilha(pilha P);

Interface: pilha.h (cont.) // retorna 0 se a pilha P estiver vazia int pilha_vazia(pilha P); // insere item x na pilha P void push(pilha P, item x); // devolve último elemento da pilha P, // e o remove da pilha item pop(pilha P); // devolve último elemento sem removê-lo item topo_pilha(pilha P); #endif

Implementação: pilha.c #include <stdio.h> #include <stdlib.h> #include "item.h" #include "pilha.h" typedef struct s_pilha *p_pilha; struct s_pilha { // vetor que armazena os itens da pilha item *v; // guarda o número de itens na pilha int n; };

Implementação: pilha.c (cont.) pilha nova_pilha(int N) { p_pilha mp = (p_pilha) malloc(sizeof( struct s_pilha)); if (mp == NULL) { /* testa falha */ } mp->v = malloc(n * sizeof(item)); mp->n = 0; } if (mp->v == NULL) { /*... */ } return (pilha) mp;

Implementação: pilha.c (cont.) void libera_pilha(pilha P) { p_pilha mp = (p_pilha) P; } free(mp->v); free(mp); int pilha_vazia(pilha P) { p_pilha mp = (p_pilha) P; } return mp->n == 0;

Implementação: pilha.c (cont.) void push(pilha P, item x) { p_pilha mp = (p_pilha) P; } // v[n ++] = x; mp->v[mp->n ++] = x; item pop(pilha P) { p_pilha mp = (p_pilha) P; } // return v[-- n]; return mp->v[-- mp->n];

Aplicação de Pilha Verificar se expressões contendo os seis símbolos ( [ { ) ] } são bem formadas Exemplo: (())[()] é bem formada, ([(){}]) é bem formada, ([{(})]) não é bem formada.

Aplicação de Pilha int bem_formada(char *s, int n) { int i; pilha P = nova_pilha(n); for (i = 0; i < n; i ++) switch (s[i]) { case ')': case ']': case '}': if (pilha_vazia(p) topo_pilha(p)!= s[i]) return 0; else pop(p); break;

Aplicação de Pilha } case '(': push(p, ')'); break; case '[': push(p, ']'); break; case '{': push(p, '}'); break; default: return 0; // símbolo inválido } return pilha_vazia(p);

Aplicação de Pilha Simular na lousa o algoritmo com entrada [ ( { ( ( ) { } ] } ) ] Simular na lousa o algoritmo com entrada [ ( ) ] { }

Outra Aplicação Calculadora de notação pósfixa Exemplo: 2 1 * 3 * 8 7 5 + + + (na lousa)