Pilhas. Profa Morganna Diniz



Documentos relacionados
Universidade Federal de Uberlândia Faculdade de Computação

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

Aula 3 Alocação Dinâmica

Estruturas de Dados. Parte dos slides a seguir são adaptações, extensões e traduções para C dos originais:

Estruturas de Dados Pilhas, Filas e Deques

Pilhas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++

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

Fundamentos de Programação II. Introdução à linguagem de programação C++

Componentes da linguagem C++

ESTRUTURA DE DADOS PILHA

Programas operam sobre dados. Dados são relacionados e possuem estrutura. Como representar e manipular dados em um computador

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Templates e Pilhas. 1. Introdução

ITENS FUNDAMENTAIS. Profª Angélica da Silva Nunes

DAS5102 Fundamentos da Estrutura da Informação

Tipo de Dados Abstractos: Pilha (stack)

Aula 1 Tipo Abstrato de Dados

Programação Básica em Arduino Aula 2

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Estrutura de Dados Básica

1 Resumo: Strings e vetores de caracteres. Departamento de Ciência da Computação IME/USP

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

PROGRAMAÇÃO II 3. PILHA DINÂMICA

Pesquisa em Memória Primária. Prof. Jonas Potros

STL significa Standard Template Library. É uma biblioteca que contém algumas estruturas de dados, como árvore binária e lista encadeada.

Curso : Tecnologia em Desenvolvimento de Sistemas - AEMS

Listas Duplamente Encadeadas

OO Engenharia Eletrônica

7. ESTRUTURAS DE DADOS ESTÁTICAS E DINÂMICAS

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

Computação e Programação Aula prática nº 5. Enunciados dos problemas

A Pilha. Aula 02. DPEE 1038 Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria

INF 1620 P1-10/04/02 Questão 1 Nome:

FACULDADE DE TECNOLOGIA SENAC GOIÁS ADELTON HENRIQUE ABISHAI LEMES BORGES NETO HENRIQUE FERREIRA DA SILVA

Linguagem de Programação III

3/19/2014. Compilador DEV C++ ENGENHARIAS LÓGICA DE PROGRAMAÇÃO Henry Lubanco/ Joelio Piraciaba

Aula 1. // exemplo1.cpp /* Incluímos a biblioteca C++ padrão de entrada e saída */ #include <iostream>

José Romildo Malaquias

Estruturas de Dados Aula 15: Árvores 17/05/2011

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

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

CIÊNCIA DA COMPUTAÇÃO PROVA PARA TRANSFERÊNCIA

PROGRAMAÇÃO II 3. FILA DINÂMICA

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Algoritmos e Programação

MC-102 Aula 17 Strings e Matrizes

Esta apresentação ensinará os conceitos de Orientação a Objetos com C++, do mais básico para o mais avançado. É suposto que o aluno já tenha

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

Métodos Computacionais. Árvores

2ª Lista de Exercícios

Nível da Arquitetura do Conjunto das Instruções

Filas. A ordem de saída corresponde diretamente à ordem de entrada dos elementos. Fila de caixa bancário

Técnicas de Programação:

insfcanceof new public switch transient while byte continue extends for int null

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

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

I Semana de Software Livre da USP Dojo C

Curso de Linguagem C

Figura 13.1: Um exemplo de árvore de diretório.

struct LISTA item quant

Manipulação de Arquivos

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Busca. Pesquisa sequencial

Introdução a POO. Introdução a Linguagem C++ e POO

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

PYTHON LISTAS. Introdução à Programação SI2

Computação L2. Arquivos. Observação: Material da Disciplina Computação Eletrônica CIN/UFPE.

Programando em C++ Histórico da Linguagem C

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

Edwar Saliba Júnior Novembro de Estruturas de Dados. Notas de Aula. Faculdade de Tecnologia INED Belo Horizonte - MG

Prof. Jhonatan Fernando

Aula 8- Standard Template Library. Arthur Ribacki Gabriel Portal Leonardo Chatain Luiz Fernando Scheidegger Rosália Schneider

Prof. Marco Antonio M. Carvalho

Algoritmos de pesquisa. Tabelas de dispersão/hash

Algoritmos e Estrutura de Dados. Prof. Tiago A. E. Ferreira

Módulo 2. Acesso a Arquivos. Métodos e Algoritmos Computacionais C++ (Rone Ilídio)

Fundamentos de Programação Linguagem C++ Entrada e saída com arquivos

Trabalho 3: Agenda de Tarefas

Estrutura de Dados Pilha (Stack)

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À PROGRAMAÇÃO COM C/C++ Prof. Dr. Daniel Caetano

Fundamentos de Programação

Resumo da Matéria de Linguagem de Programação. Linguagem C

Engenharia de Software

Módulo 4. Instruções for, while e do/while. Algoritmos e Estruturas de Dados I C++ (Rone Ilídio)

Métodos de Pesquisa em Memória Primária

Transcrição:

Pilhas Profa Morganna Diniz

Pilhas Geralmente pilhas são úteis em situações em que dados devem ser recuperados em ordem inversa a do armazenamento É uma estrutura de dados linear que permite acesso por uma das suas extremidades Exemplo Pilha de pratos 2

Pilhas As principais características de uma pilha são o acesso aos elementos é realizado em uma única ponta, o topo da pilha elementos são adicionados ou removidos do topo da pilha a ação de adicionar um elemento na pilha é chamada de empilhar ou, em inglês, to push a ação de remover um elemento da pilha é chamada de desempilhar ou, em inglês, to pop Pilhas utilizam o critério de acesso critério LIFO (último a entrar é o primeiro a sair) 3

Pilhas O exemplo de utilização de pilha mais próximo é a própria pilha de execução da linguagem C As variáveis locais das funções são dispostas numa pilha e uma função só tem acesso às variáveis que estão no topo não é possível acessar as variáveis da função locais às outras funções 4

Pilhas Alternativas de implementação usando um vetor usando uma lista encadeada 5

Pilhas Independente da estratégia de implementação, podemos definir as operações que estarão disponibilizadas para manipular e acessar as informações da pilha 1. criar uma pilha; 2. inserir um elemento no topo (push); 3. remover o elemento do topo (pop); 4. verificar se a pilha está vazia; 5. liberar a estrutura de pilha 6

Implementação de pilhas com vetor Implementação de pilha com vetor vetor (vet) armazena os elementos da pilha elementos inseridos ocupam as primeiras posições do vetor variável topo indica o índice do elemento corrente elemento vet[ topo ] representa o elemento do topo 7

Implementação de pilhas com vetor Algoritmo para empilhar elementos se a pilha não está cheia então incrementa de 1 variável topo coloca elemento na posição vet[ topo ] se a pilha está cheia então exibe mensagem Algoritmo para desempilhar elementos se a pilha não está vazia então recupera elemento do vetor da posição topo decrementa índice topo de uma unidade se a pilha está vazia então exibe mensagem 8

Implementação de pilhas com vetor Em um vetor com n elementos tamanho máximo indicado no início Os elementos são indexados da posição zero até a posição n -1 Como verificar se a pilha está cheia? topo = n 1 Como verificar se a pilha está vazia? Qual o valor para inicializar a variável topo? topo = -1 9

Implementação de pilhas com vetor Classe pilhachar para pilha de caracteres Atributos tamanho n índice elemento corrente topo os elementos do vetor pilha vet Ações empilhar (push) / desempilhar (pop) verificar se está cheia / verificar se está vazia Para permitir tamanho variável vetor alocado dinamicamente no construtor pode ter um tamanho default 10

Primeiro exemplo de pilhas Algoritmo para inverter uma cadeia de caracteres se caracteres estão armazenados em um vetor, uma solução simples poderia ser localizar o fim do vetor listar os caracteres daquele ponto até o início do vetor utilizando um laço (comando for) entretanto, suponha que você desconheça, de ante mão, o tamanho da cadeia de caracteres por exemplo, quando você lê os caracteres, um a um, via teclado ou de um arquivo a seguir, um algoritmo simples para inverter tal cadeia 11

Primeiro exemplo de pilhas Algoritmo para inverter uma cadeia de caracteres 1. leia um caractere 2. coloque o caractere no topo de qualquer outro caractere lido 3. repita os passos 1 e 2 até não existirem mais caracteres a serem lidos 4. remova o caractere do topo da pilha que foi criada na primeira parte do algoritmo 5. imprima o caractere a direita de qualquer outro caractere previamente impresso 6. repita os passos 4 e 5 até não existirem mais caracteres na pilha 12

Pilhas #ifndef PILHACHAR_H #define PILHACHAR_H #include <iostream> #include <cstdlib> class pilhachar{ protected: int n; char *vet; int topo; public: bool vazia() const; bool cheia() const; pilhachar(int tamanho = 10); ~pilhachar(); bool pop(char& elemento); bool push(const char& elemento); bool pilha_topo (char& elemento); ; #endif 13

main.cpp (1/2) #include "pilhachar.h" using namespace std; int main() { pilhachar Pilha(20); char c; cout << "Entre com uma frase: "; cin.get(c); while ( c!= '\n') { Pilha.push(c); cin.get(c); 14

main.cpp (2/2) cout << "Frase invertida: "; while (!Pilha.vazia()) { Pilha.pop(c); cout << c; cout << endl; system("pause"); return 0; 15

Referências Este material foi produzido baseado no material do curso de ED1 oferecido pelo Prof. Ângelo Ciarlini e disponível em http://www.uniriotec.br/~angelo.ciarlini/edd1/material_di datico.htm 16

pilhachar.cpp (1/5) #include "pilhachar.h" using namespace std; pilhachar::pilhachar(int tamanho) : n(tamanho), vet(new char[tamanho]), topo(-1) { pilhachar::~pilhachar() { delete [] vet; 17

pilhachar.cpp (2/5) bool pilhachar::vazia() const { return topo == -1? true : false; bool pilhachar::cheia() const { return topo == n - 1? true: false; 18

pilhachar.cpp (3/5) bool pilhachar::pop(char& elemento) { if (!vazia()) { elemento = vet[topo--]; return true; else { cout << "Pilha vazia: pop nao funcionou.\n"; return false; 19

pilhachar.cpp (4/5) bool pilhachar::push(const char& elemento) { if (!cheia()) { vet[++topo] = elemento; return true; else { cout << "Pilha cheia: push nao funcionou.\n"; return false; 20

pilhachar.cpp (5/5) bool pilhachar::pilha_topo(char& elemento) { if(!vazia()){ elemento = vet[topo]; return true; else return false; 21