INF1007 – Programação 2 9 – Pilhas

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

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
Aula T11 – BCC202 Pilhas Túlio Toffolo
Pilha 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
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1.
Estrutura de dados Busca
Lista Encadeada Circular Lista Duplamente Encadeada
Listas Encadeadas.
ALGORITMOS E ESTRUTURAS DE DADOS
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Algoritmos e Estruturas de Dados
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.
TAD Pilha com Alocação Dinâmica de Memória
Implementação de FILAS com Alocação Dinâmica
Lista Encadeada Circular Lista Duplamente Encadeada
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.
Denise Guliato Faculdade de Computação – UFU
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
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aula 17: Estruturas Genéricas
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aula 15: Árvores
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.
Estrutura de Dados Prof. André Cypriano M. Costa
UNIVERSIDADE FEDERAL DE MINAS GERAIS Pilhas e Filas Cristiano Arbex Valle Vinicius Fernandes dos Santos
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Estrutura de Dados (DPADF 0056) Aula 5 – Estr. Clássicas - Fila Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
Estrutura de Dados (DPADF 0056) Aula 7 – Encadeamento de Memória Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
Disciplina: Estrutura de Dados Professor: Jeovane Reges Caxias – MA 2015 ACULDADE DE CIÊNCIAS E TECNOLOGIA DO MARANHÃO.
INF1007: Programação 2 8 – Listas Encadeadas
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2016
INF1007: Programação 2 2 – Alocação Dinâmica
INF1007: Programação 2 5 – Tipos Estruturados
INF1007: Programação 2 1 – Ponteiros
Fundamentos de Programação 1
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
INF1007: Programação 2 9 – Tipos Abstratos de Dados
INF1007: Programação 2 6 – Ordenação de Vetores
INF1007: Programação Funções Recursivas
Estrutura de dados Pilhas e filas
Capítulo IV – Árvores Gerais
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
Árvores.
UNIDADE 7 Tipos estruturados
Programação de Computadores I – Ponteiros
Listas Encadeadas.
Função de buscar elemento na lista simplesmente encadeada
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS
Prof. Rafael Mesquita Pilha Prof. Rafael Mesquita
Programação de Computadores I – Ponteiros
Continuação.
Prof. Rafael Mesquita Fila Prof. Rafael Mesquita
Filas.
Prof. Rafael Mesquita Listas Encadeadas Prof. Rafael Mesquita
Transcrição da apresentação:

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

(c) Dept. Informática - PUC-Rio Tópicos Principais Introdução Interface do tipo pilha Exemplo de uso: verificação de expressões Implementação de pilha com lista encadeada Implementação de pilha com vetor (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Introdução Pilha novo elemento é inserido no topo e acesso é apenas ao topo o primeiro que sai é o último que entrou (LIFO – last in, first out ) operações básicas: empilhar (push) um novo elemento, inserindo-o no topo desempilhar (pop) um elemento, removendo-o do topo (c) Dept. Informática - PUC-Rio

Interface do tipo pilha Implementações: - usando um vetor - usando uma lista encadeada - simplificação: pilha armazena valores reais (c) Dept. Informática - PUC-Rio

Interface do tipo pilha Interface do tipo abstrato Pilha: pilha.h função pilha_cria aloca dinamicamente a estrutura da pilha inicializa seus campos e retorna seu ponteiro funções pilha_push e pilha_pop inserem e retiram, respectivamente, um valor real na pilha função pilha_vazia informa se a pilha está ou não vazia função pilha_libera destrói a pilha, liberando toda a memória usada pela estrutura. (c) Dept. Informática - PUC-Rio

Interface do tipo pilha /* TAD: pilha de valores reais (float) */ typedef struct pilha Pilha; /* Tipo Pilha, definido na interface, depende da implementação do struct pilha */ Pilha* pilha_cria (void); void pilha_push (Pilha* p, float v); float pilha_pop (Pilha* p); int pilha_vazia (Pilha* p); void pilha_libera (Pilha* p); (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Exemplo de uso Verificação de expressões matemáticas Considerando cadeias de caracteres com expressões matemáticas que podem conter termos entre parênteses, colchetes ou chaves, ou seja, entre os caracteres '(' e ')', ou '[' e ']', ou '{' e '}'; função que retorna 1, se os parênteses, colchetes e chaves de uma expressão aritmética exp são abertos e fechados corretamente, ou 0 caso contrário; Para a expressão “2*{3+4*(2+5*[2+3])}” retornaria 1; Para a expressão “2*(3+4+{5*[2+3}])” retornaria 0; Protótipo da função: int verifica(char* exp); (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Exemplo de uso Verificação de expressões matemáticas A estratégia é percorrer a expressão da esquerda para a direita: Se encontra '(', '[' ou '{', empilha; Se encontra ')', ']' ou '}', desempilha e verifica o elemento no topo da pilha, que deve ser o caractere correspondente; Ao final, a pilha deve estar vazia. (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Exemplo de uso char fecho(char c) { if(c=='}') return '{'; if(c==']') return '['; if(c==')') return '('; } int verifica(char* exp) { Pilha* p=pilha_cria(); int i; for(i=0; exp[i]!='\0'; i++) { if(exp[i]=='{'||exp[i]=='['||exp[i]=='(') pilha_push(p,exp[i]); else if(exp[i]=='}'||exp[i]==']'||exp[i]==')') if(pilha_vazia(p)) return 0; if(pilha_pop(p)!=fecho(exp[i])) return 0; if(!pilha_vazia(p)) return 0; pilha_libera(p); return 1; (c) Dept. Informática - PUC-Rio

Implementação de pilha com vetor vetor (vet) armazena os elementos da pilha elementos inseridos ocupam as primeiras posições do vetor elemento vet[n-1] representa o elemento do topo #define N 50 /* número máximo de elementos */ struct pilha { int n; /* vet[n]: primeira posição livre do vetor */ float vet[N]; /* vet[n-1]: topo da pilha */ /* vet[0] a vet[N-1]: posições ocupáveis */ }; (c) Dept. Informática - PUC-Rio

Implementação de pilha com vetor função pilha_cria aloca dinamicamente um vetor inicializa a pilha como sendo vazia, isto é, com o número de elementos igual a zero tipo Pilha: definido na interface struct pilha: determina a implementação Pilha* pilha_cria (void) { Pilha* p = (Pilha*) malloc(sizeof(Pilha)); if (p==NULL) exit (1); p->n = 0; /* inicializa com zero elementos */ return p; } (c) Dept. Informática - PUC-Rio

Implementação de pilha com vetor função pilha_push insere um elemento na pilha usa a próxima posição livre do vetor, se houver void pilha_push (Pilha* p, float v) { if (p->n == N) { /* capacidade esgotada */ printf("Capacidade da pilha estourou.\n"); exit(1); /* aborta programa */ } /* insere elemento na próxima posição livre */ p->vet[p->n] = v; p->n++; /* equivalente a: p->n = p->n + 1 */ (c) Dept. Informática - PUC-Rio

Implementação de pilha com vetor função pilha_pop retira o elemento do topo da pilha, retornando o seu valor verificar se a pilha está ou não vazia float pilha_pop (Pilha* p) { float v; if (pilha_vazia(p)) { printf("Pilha vazia.\n"); exit(1); } /* aborta programa */ /* retira elemento do topo */ v = p->vet[p->n-1]; p->n--; return v; } (c) Dept. Informática - PUC-Rio

Implementação de pilha com lista elementos da pilha armazenados na lista pilha representada por um ponteiro para o primeiro nó da lista /* nó da lista para armazenar valores reais */ struct elemento { int info; struct elemento *prox }; typedef struct elemento Elemento; /* estrutura da pilha */ struct pilha { Elemento* prim; /* aponta para o topo da pilha */ (c) Dept. Informática - PUC-Rio

Implementação de pilha com lista função pilha_cria cria aloca a estrutura da pilha inicializa a lista como sendo vazia Pilha* pilha_cria (void) { Pilha* p = (Pilha*) malloc(sizeof(Pilha)); if (p==NULL) exit(1); p->prim = NULL; return p; } (c) Dept. Informática - PUC-Rio

Implementação de pilha com lista função pilha_push insere novo elemento n no início da lista void pilha_push (Pilha* p, float v) { Elemento* n = (Elemento*) malloc(sizeof(Elemento)); if (n==NULL) exit(1); n->info = v; n->prox = p->prim; p->prim = n; } (c) Dept. Informática - PUC-Rio

Implementação de pilha com lista função pilha_pop retira o elemento do início da lista float pilha_pop (Pilha* p) { Elemento* t; float v; if (pilha_vazia(p)) exit(1); /* aborta programa */ t = p->prim; v = t->info; p->prim = t->prox; free(t); return v; } (c) Dept. Informática - PUC-Rio

Implementação de pilha com lista função pilha_libera libera todos os elementos da lista e depois libera a pilha void pilha_libera (Pilha* p) { Elemento *t, *q = p->prim; while (q!=NULL) t = q->prox; free(q); q = t; } free(p); (c) Dept. Informática - PUC-Rio

Implementação de pilha com lista função pilha_vazia Retorna 1, se a pilha está vazia, ou 0, caso contrário int pilha_vazia (Pilha* p) { if(p->prim == NULL) return 1; return 0; } (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Resumo Pilha push - insere novo elemento no topo da pilha pop - remove o elemento do topo da pilha (c) Dept. Informática - PUC-Rio

(c) Dept. Informática - PUC-Rio Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (2004)‏ Capítulo 11 – Pilhas (c) Dept. Informática - PUC-Rio