Pilha David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP.

Slides:



Advertisements
Apresentações semelhantes
Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de.
Advertisements

LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Aula T10 – BCC202 Listas – Parte 2 Túlio Toffolo www. decom. ufop
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Listas encadeadas Prof. Rosana Palazon.
Algoritmos de manipulação de estruturas elementares de dados
Programação II Estruturas de Dados
Programação II Estruturas de Dados
ESTRUTURAS DO TIPO FILA
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Filas David Menotti Estruturas de Dados I DECOM – UFOP.
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária - Hashing
Pesquisa em Memória Primária – Árvores de Busca
Aula T11 – BCC202 Pilhas Túlio Toffolo
David Menotti Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Aula T12 – BCC202 Listas Túlio Toffolo
David Menotti Estruturas de Dados I DECOM – UFOP
Listas com Ponteiros Listas encadeadas Listas circulares.
Slides: Prof. João Fabro UTFPR - Curitiba
Listas Encadeadas.
ALGORITMOS E ESTRUTURAS DE DADOS
Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Algoritmos e Estruturas de Dados
LISTAS DUPLAMENTE ENCADEADAS
Pesquisa em Memória Primária
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
INTELIGÊNCIA ARTIFICIAL
Tipos Abstratos de Dados
1 Tipos Abstratos de Dados Pilhas e Filas TPA – 2008 –1 Prof. Mateus Costa.
Árvores Binárias de Pesquisa
TAD Pilha com Alocação Dinâmica de Memória
Implementação de FILAS com Alocação Dinâmica
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Denise Guliato Faculdade de Computação – UFU
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Listas, Filas e Pilhas Katia Guimarães.
Aula 3 Listas, pilhas, filas.
Estruturas de Dados Aula 9: Listas (parte 1)
Pilhas Profa. Nádia Félix.
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Estruturas de Dados Aula 11: TAD Pilha
Árvore Binária de Busca
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aula 15: Árvores
Prof. Alessandro Gonçalves
Estruturas de Dados Aula 9 -2: Listas simplesmente encadeadas sem sentinela e sem cabeçalho 19/06/2013.
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
UNIVERSIDADE FEDERAL DO AMAZONAS- UFAM INSTITUTO DE CIÊNCIAS EXATAS E TECNOLOGIA- ICET SISTEMAS DE INFORMAÇÃO ALGORITMOS E ESTRUTURAS DE DADOS II PILHAS.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Pilha dinâmica Prof.° Jean Daniel Henri Merlin Andreazza
Estrutura de Dados Prof. André Cypriano M. Costa
UNIVERSIDADE FEDERAL DE MINAS GERAIS Pilhas e Filas Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

Pilha David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP

© David Menotti Algoritmos e Estrutura de Dados I O que é uma pilha? Pilha

© David Menotti Algoritmos e Estrutura de Dados I O que é uma pilha? Pilha

© David Menotti Algoritmos e Estrutura de Dados I 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 First Out) Analogia: pilha de pratos, livros, etc. Usos: Chamada de subprogrmas, avalição de expressões aritméticas, etc.

© David Menotti Algoritmos e Estrutura de Dados I TAD Pilha Operações: 1. FPVazia(Pilha). Faz a pilha ficar vazia. 2. PEhVazia(Pilha). Retorna true se a pilha está vazia; caso contrário, retorna false. 3. PEmpilha(Pilha, x ). Insere o item x no topo da pilha. 4. PDesempilha(Pilha, x). Retorna o item x no topo da pilha, retirando-o da pilha. 5. PTamanho(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

© David Menotti Algoritmos e Estrutura de Dados I 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.

© David Menotti Algoritmos e Estrutura de Dados I Estrutura de Dados de Pilha através de Arranjos #define MaxTam 1000 typedef int Apontador; typedef int TipoChave; typedef struct { TipoChave Chave; /* outros componentes */ } TipoItem; typedef struct { TipoItem vItem[MaxTam]; Apontador iTopo; } TipoPilha;

© David Menotti Algoritmos e Estrutura de Dados I Operações sobre Pilhas usando Arranjos void FPVazia(TipoPilha* pPilha) { pPilha->iTopo = 0; } /* FPVazia */ int PEhVazia(TipoPilha* pPilha) { return (pPilha->iTopo == 0); } /* Vazia */

© David Menotti Algoritmos e Estrutura de Dados I Operações sobre Pilhas usando Arranjos int PEmpilha(TipoPilha* pPilha, TipoItem* pItem) { if (pPilha->pTopo == MaxTam) return 0; pPilha->vItem[pPilha->pTopo] = *pItem; pPilha->iTopo++; return 1; } /* PEmpilha */

© David Menotti Algoritmos e Estrutura de Dados I Operações sobre Pilhas usando Arranjos int PDesempilha(TipoPilha* pPilha, TipoItem* pItem) { if (PEhVazia(pPilha)) return 0; pPilha->iTopo--; *pItem = pPilha->vItem[pPilha->iTopo]; return 1; } /* PDesempilha */

© David Menotti Algoritmos e Estrutura de Dados I Operações sobre Pilhas usando Arranjos int PTamanho(TipoPilha* pPilha) { return (pPilha->iTopo); } /* Tamanho *

© David Menotti Algoritmos e Estrutura de Dados I 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 x n 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.

© David Menotti Algoritmos e Estrutura de Dados I 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 TipoPilha contém um apontador para o topo da pilha (célula cabeça) e um apontador para o fundo da pilha.

© David Menotti Algoritmos e Estrutura de Dados I Estrutura da Pilha Usando Apontadores #define max 10 typedef int TipoChave; typedef struct { int Chave; /* --- outros componentes --- */ } TipoItem; typedef struct Celula* Apontador; typedef struct Celula { TipoItem Item; struct Celula* pProx; } Celula; typedef struct { Apontador pFundo; Apontador pTopo; int iTamanho; } TipoPilha;

© David Menotti Algoritmos e Estrutura de Dados I Operações sobre Pilhas usando Apontadores void FPVazia(TipoPilha* pPilha) { pPilha->pTopo = (Apontador) malloc(sizeof(Celula)); pPilha->pFundo = pPilha->pTopo; pPilha->pTopo->pProx = NULL; pPilha->iTamanho = 0; } /* FPVazia */ int PEhVazia(TipoPilha* pPilha) { return (pPilha->pTopo == pPilha->pFundo); } /* Vazia */

© David Menotti Algoritmos e Estrutura de Dados I Operações sobre Pilhas usando Apontadores int PEmpilha(TipoPilha* pPilha, TipoItem* pItem) { Apontador pAux; pAux = (Apontador) malloc(sizeof(Celula)); if (pAux == NULL) return 0; pPilha->pTopo->Item = *pItem; pAux->pProx = pPilha->pTopo; pPilha->pTopo = pAux; pPilha->iTamanho++; return 1; } /* PEmpilha */

© David Menotti Algoritmos e Estrutura de Dados I Operações sobre Pilhas usando Apontadores int PDesempilha(TipoPilha* pPilha, TipoItem* pItem) { Apontador pAux; if (PEhVazia(pPilha)) return 0; pAux = pPilha->pTopo; pPilha->pTopo = pAux->pProx; *pItem = pAux->pProx->Item; free(pAux); pPilha->iTamanho--; return 1; } /* PDesempilha */

© David Menotti Algoritmos e Estrutura de Dados I Operações sobre Pilhas usando Apontadores int PTamanho(TipoPilha* pPilha) { return (pPilha->iTamanho); } /* PTamanho */

© David Menotti Algoritmos e Estrutura de Dados I 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.

© David Menotti Algoritmos e Estrutura de Dados I Exemplo de Uso Pilhas Editor de Textos (ET) #: cancelar caractere anterior na linha sendo editada. Ex.: UFM##FOB#P DCC##ECOM! \: 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: DECOM*UFOP*! DECOM UFOP.

© David Menotti Algoritmos e Estrutura de Dados I 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! ~

© David Menotti Algoritmos e Estrutura de Dados I 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

© David Menotti Algoritmos e Estrutura de Dados I ET - Implementação void FPVazia(TipoPilha* pPilha) { pPilha->iTopo = 0; } /* FPVazia */ int PEhVazia(TipoPilha* pPilha) { return (pPilha->iTopo == 0); } /* PEhVazia */ int PEmpilha(TipoPilha* pPilha,TipoItem* pItem) { if (pPilha->iTopo == MaxTam) return 0; else { pPilha->iTopo++; pPilha->Item[Pilha->iTopo - 1] = *pItem; } return 1; } /* PEmpilha */

© David Menotti Algoritmos e Estrutura de Dados I ET - Implementação int PDesempilha(TipoPilha* pPilha, TipoItem* pItem) { if (PEhVazia(pPilha)) return 0 else { *pItem = pPilha->Item[pPilha->iTopo - 1]; pPilha->iTopo--; } return 1; } /* PDesempilha */ int PTamanho(TipoPilha* pPilha) { return (pPilha->iTopo); } /* Tamanho */

© David Menotti Algoritmos e Estrutura de Dados I ET - Implementação int main(int argc, char* argv[]) { TipoPilha Pilha; TipoItem x; FPVazia(&Pilha); x.Chave = getchar(); while (x.Chave != MarcaEof) { if (x.Chave == CancelaCarater) { if (!PEhVazia(&Pilha)) PDesempilha(&Pilha, &x);} else if (x.Chave == CancelaLinha) FPVazia(&Pilha); else if (x.Chave == SaltaLinha) PImprime(&Pilha); else { if (PTamanho(Pilha) == MaxTam) PImprime(&Pilha); PEmpilha(&Pilha, &x); } x.Chave = getchar(); } if (!PEhVazia(&Pilha)) PImprime(&Pilha); return 0; } /* ET */

© David Menotti Algoritmos e Estrutura de Dados I ET - Implementação void PImprime(TipoPilha* pPilha) { TipoPilha Pilhaux; TipoItem x; FPVazia(&Pilhaux); while (!PEhVazia(pPilha)) { PDesempilha(pPilha, &x); PEmpilha(&Pilhaux,&x); } while (!PEhVazia(&Pilhaux)) { PDesempilha(&Pilhaux, &x); putchar(x.Chave); } putchar('\n'); } /* Imprime */