EAD PILHA - DEFINIÇÃO

Documentos relacionados
- o primeiro elemento a entrar na fila é o primeiro a sair (FIFO First In First Out ).

EAD ARVORE BINÁRIA - ARMAZENAMENTO NÃO SEQUENCIAL COM VETORES

EAD ARVORE BINÁRIA - ARMAZENAMENTO NÃO SEQUENCIAL COM VETORES

Lista com saltos - generalidades

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

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

struct Nodo { int struct Nodo typedef struct Nodo *PNodo; PNodo ConstruirPilha () { int PNodo Criar printf scanf while Push printf scanf return

Aula 11 Pilha Dinâmica. prof Leticia Winkler

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

ESTRUTURA DE DADOS (TCC )

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

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP

Estruturas Compostas Parte II

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

SCC Algoritmos e Estruturas de Dados I

Estrutura de Dados II. Prof. Sérgio Portari

1/36 LISTAS. Programação II

Instituto Luterano de Ensino Superior de Ji-Paraná Curso Bacharelado em Informática Estrutura de Dados I Prof.: José Luiz A.

Estruturas de Dados Aula 11: TAD Pilha

10.1. Aula 10: Pilhas. O conceito de pilha. Algoritmos de inserção e remoção. Exemplo: Notação Polonesa

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

S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas

1. Listas sequenciais versus listas ligadas. Lista sequencial

Estrutura de Dados: Aula 3 - Linguagem C

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

struct Nodo { int struct Nodo struct Nodo typedef struct Nodo *PNodo; int ConstruirLista (PNodo *H, PNodo *T) { int Criar

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

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

Estruturas de Dados Filas

Índice. Capítulo 3 Estrutura de Dados sequencial com armazenamento não sequencial

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

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

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

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

Lista Ligada Linear - Retirar elemento

INF 1007 Programação II

Algoritmos de pesquisa

Universidade Federal do Ma Curso de Ciência da Computação

Pilhas Acesso. Pilha. Fila. Listas lineares especiais. Pilhas e Filas. Listas lineares especiais mais usuais. Disciplina restrita

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

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

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

Alocação Seqüencial VAL MAX TOPO

FICHA 8 PILHAS E FILAS

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

Prof. Jesus José de Oliveira Neto

Filas Implementação Sequencial

UNIVERSIDADE DA BEIRA INTERIOR

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

Universidade de São Paulo

16/11/2015 Lista Tipo de dado Lista - Implementação Lista - Implementação Lista - Implementação 3

Lista: conceito, representação e algoritmos

INE5408 Estruturas de Dados

EAD Árvore - representação usando listas ligadas

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

Pilha e Fila. Pilha em C. Definir o registro que representará cada elemento da pilha.

Filas Exemplo de Aplicação

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

SCC Algoritmos e Estruturas de Dados I

Aula 2 Listas Lineares Sequenciais. prof Leticia Winkler

Instituto de C. Filas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

Algoritmos e Estruturas de Dados II IEC013

Lista de Exercícios sobre Listas Implementadas por Encadeamento

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

Métodos Computacionais. Listas Encadeadas

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

Estruturas de Dados - Filas

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

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

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

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 4: Listas Estáticas e Dinâmicas

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

Prova 2 PMR3201 1o. semestre 2015 Prof. Thiago Martins

Capítulo 8: Abstrações de dados

Estruturas de Dados Encadeadas

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

Fila e Deque. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Algoritmos e Estrutura de Dados. Aula 05 Estrutura de Dados: Listas (Parte II) Prof. Tiago A. E. Ferreira

Revisão de TDA, Pilhas e Filas

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

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Tabelas Hash. informação, a partir do conhecimento de sua chave. Hashing é uma maneira de organizar dados que:

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

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

Estruturas de Dados em C++ Conceitos. Leandro Tonietto jun-09

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Algoritmos e Estruturas de Dados I

FILAS. As coisas de que uma fila é feita serão chamadas itens. Os itens podem ser números, strings, structs, etc., etc.

programas = estrutura de dados + algoritmos

Algoritmos e Estruturas de Dados II IEC013

Estrutura de Dados II

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

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

Transcrição:

EAD PILHA - DEFINIÇÃO Os seus elementos são processados pela ordem inversa à ordem de chegada: - o último elemento a entrar na Pilha é o primeiro a sair (LIFO Last In First Out ). Qualquer operação que se pretenda efetuar será realizada no topo da Pilha Elem3 Topo Elem2 Elem1 Inserção de um novo elemento na pilha consiste em - acrescentar este elemento no topo da pilha; Remoção de um elemento da pilha - só é possível realizar-se se a pilha não estiver vazia, - consiste em retirar o elemento que se encontra no topo da pilha, - passa o elemento que está a seguir ao topo, caso exista, a ser o topo de pilha. Pilha vazia - acontece quando é removido o último elemento da pilha, - apenas é possível realizar operações de inserção de elementos na pilha. 1

EAD Pilha - Definição axiomática Estrutura Pilha (Elemento) CriarPilha (Elemento) Pilha PilhaVazia (Pilha) 1 (verdadeiro) ou 0 (falso) Push (Elemento, Pilha) Pilha Pop (Pilha) Pilha TopoPilha (Pilha) Elemento tais que S Pilha, Elem Elemento sejam PilhaVazia(Criar(Elem)) = 0 (falso) PilhaVazia(Push(Elem, S)) = 0 (falso) Pop(CriarPilha(Elem)) = (pilha vazia) Pop(Push(Elem, S)) = S Pop(S) = Se PilhaVazia(S) Então ERRO Senão S - TopoPilha(S) TopoPilha(Criar(Elem)) = Elem TopoPilha(Push(Elem, S)) = Elem TopoPilha(S) = Se PilhaVazia(S) Então ERRO Senão TopoPilha(S) Fim Pilha 2

EAD Pilha - Operações básicas - Criar uma Pilha (com um Elemento): CriarPilha (Elemento) - Verificar se uma Pilha está vazia: PilhaVazia (Pilha) - Inserir um Elemento numa Pilha: Push (Elemento, Pilha) - Remover elemento de uma Pilha: Pop (Pilha) - Consultar uma Pilha: TopoPilha (Pilha). EAD Pilha - Implementação usando listas - Armazenamento - sequencial (usando vetores), ou - não sequencial (usando listas ligadas). - Neste documento, a implementação é através de listas ligadas simples, as quais são simuladas com vetores. - Implementação usando listas ligadas simples: - apenas se utiliza um ponteiro associado ao topo da pilha, - este ponteiro é o índice do nodo do vetor que contém o elemento do topo da pilha. 3

EAD PILHA - ARMAZENAMENTO NÃO SEQUENCIAL COM VETORES Indicador de topo da pilha - índice do nodo com o elemento mais recente da pilha, - será o primeiro a ser removido, - quando nulo (0) significa que a pilha está vazia. Uma pilha nunca está cheia, - pode é não haver memória suficiente para guardar um novo elemento 4

Estrutura de dados: - Pilha é um vetor em que cada componente (nodo) é composto por 2 campos: - Elemento (informação a tratar), que pode ser um tipo de dados - não estruturado básico (inteiro, real, caracter,...), ou - estruturado (vetor, matriz, registo,...); se o tipo de dados é um registo, então é composto por um ou mais subcampos (dependendo do volume de informação a tratar) em que um deles pode funcionar como Chave; - Prox, é um número inteiro associado ao índice do nodo que o segue na pilha (o sucessor); - Topo (índice do nodo do vetor associado ao topo da pilha) - Representação de um nodo da pilha: Nodo Elemento Prox Informação Sucessor 5

Exemplo: Pilha em que o elemento de cada nodo é um inteiro. Representação gráfica: Topo 16 29 14 18 36 23 Estrutura de dados: Pilha(k) = struct { Elemento, Prox }, k = 1,... Pilha é um tipo de dados estruturado, mais especificamente um registo (estrutura); Elemento é um tipo de dados não estruturado básico (inteiro). Topo = 3 Pilha 1 2 3 4 5 6 Elemento 29 23 16 14 36 18 Prox 4 0 1 6 2 5 Implementação em MatLab: TopoPilha(Pilha) = 16 6

Operações auxiliares sobre uma EAD Pilha: - Criar um nodo de uma Pilha [CriarNodo - EAD Lista] - Determinar o tamanho de uma Pilha [TamanhoLista - EAD Lista] - Libertar/destruir um nodo de uma Pilha [LibertarNodoLista - EAD Lista] Operações básicas sobre uma EAD Pilha: - Criar uma Pilha (com um elemento) [CriarLista - EAD Lista] - Verificar se uma Pilha está vazia [ListaVazia - EAD Lista] - Inserir um novo elemento numa Pilha (no topo) [InserirInicioLista - EAD Lista] - Remover um elemento de uma Pilha (o do topo) [remoção específica] - Consultar um elemento de uma Pilha (o do topo) [consulta específica] Operações específicas sobre os elementos de uma Fila: - Criar um elemento de uma Pilha (CriarElemento - Exemplos de EAD Lista) - Mostrar um elemento de uma Pilha (MostrarElemento - Exemplos de EAD Lista) 7

Criar um nodo de uma Pilha a partir de um elemento Nota: - operação usada para criar um nodo com um elemento para posterior inserção numa pilha - função igual a "CriarNodo" da EAD Lista Parâmetros: Entrada: informação referente a um elemento (Elem) Saída: um nodo isolado composto pelo elemento fornecido e sem sucessor (Nodo) Função implementada em MatLab (iterativa): function [Nodo] = CriarNodo (Elem) Nodo.Elemento = Elem; Nodo.Prox = 0; 8

Determinar o tamanho de uma pilha Notas: - operação para determinar o número de elementos da pilha, o qual é usado na operação para inserir um elemento numa pilha, para atualizar o tamanho do vetor da pilha - função igual a "TamanhoLista" da EAD Lista Parâmetros: Entrada: pilha (Pilha) e topo da pilha (Topo) Saída: tamanho (quantidade de elementos) da pilha (tampilha) Função implementada em MatLab: function [tampilha] = TamanhoPilha (Pilha, Topo) k = Topo; tampilha = 0; while k ~= 0 tampilha = tampilha + 1; k = Pilha(k).Prox; end; 9

Libertar um nodo de uma Pilha Notas: - operação usada para libertar um nodo do vetor da pilha, após remoção da pilha - função igual a "LibertarNodoLista" da EAD Lista Parâmetros: Entrada: pilha (Pilha) e topo da pilha (Topo) Saída: vetor da pilha sem o nodo libertado (Pilha) e topo da pilha atualizado (Topo) Função implementada em MatLab: Nota: TamanhoPilha é uma operação auxiliar da EAD Pilha function [Pilha, Topo] = LibertarNodoPilha (Pilha, Topo) tam = TamanhoPilha(Pilha, Topo); % determinar o número de elementos da pilha if tam == 0 return; end; % determinar o nodo a libertar (indnodo), que tem no seu campo Prox o valor -1 indnodo = 1; while indnodo <= tam & Pilha(indNodo).Prox ~= -1 indnodo = indnodo + 1; end; 10

if indnodo > tam % se o índice do nodo a libertar é o último do vetor Pilha(indNodo) = []; return; % então não existe nodo a libertar ou está no fim do vetor end; % a pilha tem um elemento a menos, mas o vetor da pilha mantém o nodo; % assim, este nodo deve ser libertado/retirado do vetor (isto é, eliminado) % primeiro: eliminar o nodo de posição indnodo do vetor Pilha(indNodo) = []; % segundo: atualizar os campos Prox dos nodos com valores maiores do que indnodo for i = 1:tam if Pilha(i).Prox > indnodo Pilha(i).Prox = Pilha(i).Prox - 1; end; end; % terceiro: atualizar o topo da pilha, Topo, se for um índice superior a indnodo if Topo >= indnodo Topo = Topo - 1; end; 11

Criar uma Pilha (com um elemento) Nota: - função igual a "CriarLista" da EAD Lista Parâmetros: Entrada: informação relativa a um elemento (Elem) Saída: pilha com um nodo (Pilha) e topo da pilha (Topo) Função implementada em MatLab: Nota: CriarNodo é uma operação auxiliar da EAD Pilha function [Pilha, Topo] = CriarPilha (Elem) Nodo = CriarNodo(Elem); Pilha(1) = Nodo; Topo = 1; 12

Verificar se uma Pilha está vazia Notas: - uma pilha está vazia se o topo é 0 - função igual a "ListaVazia" da EAD Lista Parâmetros: Entrada: topo da pilha (Topo) Saída: 1 (se a pilha está vazia) ou 0 (se a pilha não está vazia) Função implementada em MatLab: function [vazia] = PilhaVazia (Topo) if Topo == 0 vazia = 1; else vazia = 0; end; 13

Inserir um elemento numa Pilha (Push) Nota: - função igual a "InserirInicioLista" da EAD Lista Parâmetros: Entrada: elemento a inserir (Elem), pilha (Pilha) e topo da pilha (Topo) Saída: pilha com mais um elemento (Pilha) e topo da pilha atualizado (Topo) Função implementada em MatLab: Nota: TamanhoPilha é uma operação auxiliar da EAD Pilha function [Pilha, Topo] = Push (Elem, Pilha, Topo) Novo = CriarNodo(Elem); % construir um nodo com os dados de Elem indnovo = TamanhoPilha(Pilha, Topo) + 1; % índice do novo nodo no vetor da pilha Pilha(indNovo) = Novo; % acrescentar o novo nodo ao vetor da pilha Pilha(indNovo).Prox = Topo; % ligar o novo nodo à pilha Topo = indnovo; % atualizar o topo da pilha 14

Remover um elemento de uma Pilha (Pop) Notas: - operação que só pode ser aplicada a uma pilha não vazia; caso contrário, ocorrerá ERRO - equivalente a remover o elemento de uma lista, o qual está no início da lista Parâmetros: Entrada: pilha (Pilha) e topo da pilha (Topo) Saída: pilha com menos um nodo (Pilha) e topo da pilha atualizado (Topo) Função implementada em MatLab: Nota: LibertarNodoPilha é uma operação auxiliar da EAD Pilha function [Pilha, Topo] = Pop (Pilha, Topo) % remover o elemento que está no topo da pilha indnodo = Topo; Topo = Pilha(Topo).Prox; Pilha(indNodo).Prox = -1; % isolar e marcar o nodo a libertar % libertar o nodo que (ainda) está no vetor da pilha [Pilha, Topo] = LibertarNodoPilha(Pilha, Topo); 15

Consultar uma Pilha (TopoPilha) Notas: - operação que só pode ser aplicada a uma pilha não vazia; caso contrário, ocorrerá ERRO - equivalente a consultar o elemento de uma lista que está no início da lista Parâmetros: Entrada: pilha (Pilha) e topo da pilha (Topo) Saída: mostra toda a informação sobre o elemento do topo da pilha Função implementada em MatLab: Nota: MostrarElemento é uma operação específica do problema function [] = TopoPilha (Pilha, Topo) MostrarElemento(Pilha(Topo).Elemento); 16

Exemplo: Pilha em que o elemento de cada nodo é um inteiro. Estrutura de dados: Pilha(k) = struct { Elemento, Prox }, k = 1,... Pilha é um tipo de dados estruturado (neste caso, do tipo registo); Elemento é um tipo não estruturado básico (neste caso, do tipo inteiro). Operações específicas deste problema a implementar (funções em MatLab): function [Elem] = CriarElemento () Elem = input('inserir um inteiro: '); function [] = MostrarElemento(Elem) disp(elem); 17