Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Aula 06: Pilhas

Documentos relacionados
Pilha. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Pilhas. Prof. Túlio Toffolo BCC202 Aula 11 Algoritmos e Estruturas de Dados I

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

BCC202 - Estrutura de Dados I

PCC104 - Projeto e Análise de Algoritmos

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Aula 07: Filas

Estruturas de Dados Básicas

Estruturas de Dados Básicas

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

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

Estruturas de Dados Aula 11: TAD Pilha

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

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

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP

Estruturas de Dados Básicas

Estruturas de Dados Básicas

Estrutura de Dados II. Prof. Sérgio Portari

Estrutura de dados - Listas Encadeadas

Estruturas de Dados Básicas

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I

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

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

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

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

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

Aula 16: Pesquisa em Memória Primária - Árvores de Busca. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Carlos Eduardo Batista. Centro de Informática - UFPB

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

ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas

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

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

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

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

INF 1007 Programação II

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Pesquisa em Memória Primária Árvores de Busca. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Tabelas Hash. Prof. Túlio Toffolo BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I

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

Árvores de Pesquisa (Parte I)

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

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

LISTAS LINEARES. Estrutura de Dados

Matrizes Esparsas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

SCC Algoritmos e Estruturas de Dados I

Aula 15: Pesquisa em Memória Primária. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

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

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Aula 08: Árvores

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

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

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

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

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

Estruturas de Dados Aula 10: Listas (parte 2) 19/04/2011

Algoritmos e Estruturas de Dados II IEC013

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

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

Tipos abstratos de dados; pilhas e filas

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

Prof. Jesus José de Oliveira Neto

Aula T13 BCC202 Árvores. Túlio Toffolo

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

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

Árvores. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Pesquisa em memória primária: hashing. Algoritmos e Estruturas de Dados II

- Estruturas e aplicações

Listas ligadas/listas encadeadas

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

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

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas

1. Listas sequenciais versus listas ligadas. Lista sequencial

UNIVERSIDADE DA BEIRA INTERIOR

Algoritmos e Estruturas de dados

Exemplos. Alocação Dinâmica de Pilhas. Pilhas. Pilhas. Implementação Seqüencial X Encadeada. SCE 182 Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de Dados I

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Filas Exemplo de Aplicação

Estruturas de Dados Filas

Estruturas de Dados com Jogos. Capítulo 2 Pilhas - Alocação Sequencial e Estática

Árvores de Pesquisa (Parte I)

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

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

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

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória

LP II Estrutura de Dados

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

Carlos Eduardo Batista. Centro de Informática - UFPB

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

Revisão: Tipo Abstrato de Dados Recursividade

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

Árvores Binárias de Busca

UNIVERSIDADE DA BEIRA INTERIOR

Estruturas Compostas Parte II

Pilhas. Algoritmos e Estruturas de Dados I. José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP

Aula 16: Pesquisa em Memória Primária - Árvores AVL. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Transcrição:

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Aula 06: Pilhas

O que é uma pilha? Pilha 4 4 3 3 2 1 2 1

O que é uma pilha? Pilha 4 4 3 3 2 1 2 1

TAD Pilha Tipo Abstrato de dados com a seguinte característica: O último elemento a ser inserido é o primeiro a ser retirado/removido (LIFO Last In Frist Out) Analogia: pilha de pratos, livros, etc. Usos: Chamadas de subprogramas, avaliação de expressões aritméticas, etc.

TAD Pilha Operações: FPVazia(Pilha). Faz a pilha ficar vazia. PVazia(Pilha). Retorna true se a pilha está vazia; caso contrário, retorna false. Empilha(Pilha, x). Insere o item x no topo da pilha. Desempilha(Pilha, x). Retorna o item x no topo da pilha, retirando-o da pilha. Tamanho(Pilha). Esta função retorna o número de itens da pilha Existem várias opções de estruturas de dados que podem ser usadas para representar pilhas. As duas representações mais utilizadas são as implementações por meio de arranjos e de apontadores

Implementação de Pilhas através de Arranjos Os itens da pilha são armazenados em posições contíguas de memória. Como as inserções e as retiradas ocorrem no topo da pilha, um campo chamado Topo é utilizado para controlar a posição do item no topo da pilha.

Estrutura de Dados de Pilha através de Arranjos #define MaxTam 1000 typedef int Tchave; typedef struct { TChave Chave; /* outros componentes */ TItem; typedef struct { TItem vitem[maxtam]; int itopo; TPilha;

Operações sobre Pilhas usando Arranjos void FPVazia(TPilha* ppilha){ ppilha->itopo = 0; int PVazia(TPilha* ppilha){ return (ppilha->itopo == 0); int PTamanho(TipoPilha* ppilha){ return (ppilha->itopo);

Operações sobre Pilhas usando Arranjos int Empilha(TPilha* ppilha, TItem* pitem){ if(ppilha->itopo == MAXTAM) return 0; ppilha->vitem[ppilha->itopo] = *pitem; ppilha->itopo++; return 1; int Desempilha(TPilha* ppilha, TItem* pitem){ if(pvazia(ppilha)) return 0; ppilha->itopo--; *pitem = ppilha->vitem[ppilha->itopo]; return 1;

Implementação de Pilhas por meio de Apontadores Há uma célula cabeça no topo para facilitar a implementação das operações empilha e desempilha quando a pilha está vazia. Para desempilhar o item xn basta desligar a célula cabeça da lista e a célula que contém x n passa a ser a célula cabeça. Para empilhar um novo item, basta fazer a operação contrária, criando uma nova célula cabeça e colocando o novo item na antiga.

Estrutura da Pilha Usando Apontadores O campo tamanho evita a contagem do número de itens na função Tamanho. Cada célula de uma pilha contém um item da pilha e um apontador para outra célula. O registro TPilha contém um apontador para o topo da pilha (célula cabeça) e um apontador para o fundo da pilha.

Estrutura da Pilha Usando Apontadores typedef int Tchave; typedef struct{ TChave Chave; /* --- outros componentes --- */ Titem; typedef struct Celula{ TItem item; struct Celula* pprox; TCelula; typedef struct{ TCelula* pfundo; TCelula* ptopo; int tamanho; TPilha;

Operações sobre Pilhas usando Apontadores (com cabeça) void FPVazia(TPilha* ppilha){ ppilha->ptopo = (TCelula*)malloc(sizeof(TCelula)); ppilha->pfundo = ppilha->ptopo; ppilha->ptopo->pprox = NULL; ppilha->tamanho = 0; int PVazia(TPilha* ppilha){ return (ppilha->ptopo == ppilha->pfundo);

Operações sobre Pilhas usando Apontadores (sem cabeça) void FPVazia(TPilha* ppilha){ ppilha->ptopo = NULL; ppilha->pfundo = NULL; ppilha->tamanho = 0; int PVazia(TPilha* ppilha){ return (ppilha->ptopo == NULL);

Operações sobre Pilhas usando Apontadores (com cabeça) int Empilha(TPilha* ppilha, TItem* pitem){ TCelula* pnovo; pnovo = (TCelula*) malloc(sizeof(tcelula)); ppilha->ptopo->item = *pitem; pnovo ->pprox = ppilha->ptopo; ppilha->ptopo = pnovo; ppilha->tamanho++; return 1;

Operações sobre Pilhas usando Apontadores (sem cabeça) int Empilha(TPilha* ppilha, TItem* pitem){ TCelula* pnovo; pnovo = (TCelula*) malloc(sizeof(tcelula)); pnovo ->item = *pitem; pnovo ->pprox = ppilha->ptopo; ppilha->ptopo = pnovo; ppilha->tamanho++; return 1;

Operações sobre Pilhas usando Apontadores (com cabeça) int Desempilha(TPilha* ppilha, TItem* pitem){ TCelula* paux; /* celula a ser removida */ if (PVazia(pPilha)) return 0; paux = ppilha->ptopo; ppilha->ptopo = paux->pprox; *pitem = paux->pprox->item; free(paux); ppilha->tamanho--; return 1;

Operações sobre Pilhas usando Apontadores (sem cabeça) int Desempilha(TPilha* ppilha, TItem* pitem){ TCelula* paux; /* celula a ser removida */ if (PVazia(pPilha)) return 0; paux = ppilha->ptopo; ppilha->ptopo = paux->pprox; *pitem = paux->item; free(paux); ppilha->tamanho--; return 1;

Operações sobre Pilhas usando Apontadores (sem e com cabeça) int PTamanho(TipoPilha* ppilha){ return (ppilha->tamanho); /* PTamanho */

Exemplo de Uso Pilhas: Editor de Textos (ET) Vamos escrever um Editor de Texto (ET) que aceite os comandos: Cancela caracter Cancela linha Imprime linha O ET deverá ler um caractere de cada vez do texto de entrada e produzir a impressão linha a linha, cada linha contendo no máximo 70 caracteres de impressão. O ET deverá utilizar o tipo abstrato de dados Pilha definido anteriormente, implementado por meio de arranjo.

Exemplo de Uso Pilhas: Editor de Textos (ET) # : cancelar caractere anterior na linha sendo editada. Ex.: UFM#OB#P DCC##ECSI! \ : cancela todos os caracteres anteriores na linha sendo editada. * : salta a linha.! : Imprime os caracteres que pertencem à linha sendo editada, iniciando uma nova linha de impressão a partir do caractere imediatamente seguinte ao caractere salta-linha. Ex: DECSI*UFOP*! DECSI UFOP

Sugestão de Texto para Testar o ET Este et# um teste para o ET, o extraterrestre em C.*Acabamos de testar a capacidade de o ET saltar de linha, utilizando seus poderes extras (cuidado, pois agora vamos estourar a capacidade máxima da linha de impressão, que é de 70 caracteres.)*o k#cut#rso dh#e Estruturas de Dados et# h#um cuu#rsh#o #x# x?*!#?!#+.* Como et# bom n#nt#ao### r#ess#tt#ar mb#aa#triz#cull#ado nn#x#ele!\ Sera que este funciona\\\? O sinal? não### deve ficar! ~

ET - Implementação Este programa utiliza um tipo abstrato de dados sem conhecer detalhes de sua implementação. A implementação do TAD Pilha que utiliza arranjo pode ser substituída pela implementação que utiliza apontadores sem causar impacto no programa

ET - Implementação int main(int argc, char* argv[]){ TipoPilha Pilha; TipoItem x; FPVazia(&Pilha); x.chave = getchar(); while (x.chave!= ~ ){ if(x.chave == # ) if(!pvazia(&pilha)) Desempilha(&Pilha, &x); else if(x.chave == \ ) FPVazia(&Pilha); else if(x.chave == * ) PImprime(&Pilha); else{if(ptamanho(pilha) == MaxTam) PImprime(&Pilha); Empilha(&Pilha, &x); x.chave = getchar(); if (!PVazia(&Pilha)) PImprime(&Pilha); return 0;

ET - Implementação void PImprime(TipoPilha* ppilha){ TPilha Pilhaux; TItem x; FPVazia(&Pilhaux); while(!pvazia(ppilha)){ Desempilha(pPilha, &x); Empilha(&Pilhaux,&x); while (!PehVazia(&Pilhaux)){ Desempilha(&Pilhaux, &x); putchar(x.chave); putchar('\n');