Você está na página 1de 9

Introduo

Estrutura de Dados PILHAS


Cefet-PI UNED Parnaba Prof: Jefferson S. Silva
O pessimista queixa-se do vento, o otimista espera que ele mude e o realista ajusta as velas. Willian George Ward

Um determinado produto composto por diversas peas (digamos p1, p2, ...,pn). O processo de montagem deste produto automtico (executado por uma mquina) e exige que as peas sejam colocadas em uma ordem especfica (primeiro a p1, depois a p2, depois a p3 e assim por diante). As peas so empilhadas na ordem adequada e a mquina de montagem vai retirando pea por pea do topo desta pilha para poder montar o produto final.

Introduo
A mesma mquina que faz a montagem capaz de trocar uma pea quebrada de um produto j montado. O que a mquina faz desmontar o produto at chegar na pea defeituosa, troc-la e ento depois recolocar as peas que foram retiradas. Isso tambm feito com o uso da pilha de peas. Veja a seguir o algoritmo que a mquina montadora implementa para fazer a manuteno de um produto com defeito.

Introduo
1) Retirar e empilhar pea por pea do produto at chegar na pea defeituosa. 2) Retirar a pea defeituosa 3) Colocar uma pea nova sem defeitos 4) Desempilhar e montar pea por pea do topo da pilha at a pilha ficar vazia.

Introduo
A idia fundamental da pilha que todo o acesso a seus elementos feito atravs do seu topo. Assim, quando um elemento novo introduzido na pilha, passa a ser o elemento do topo, e o nico elemento que pode ser removido da pilha o do topo

Introduo
Isto faz com que os elementos da pilha sejam retirados na ordem inversa ordem em que foram introduzidos:o primeiro que sai o ltimo que entrou. A sigla LIFO last in, first out usada para descrever esta estratgia).

Introduo
Existem duas operaes bsicas que devem ser implementadas numa estrutura de pilha: Push - operao para empilhar um novo elemento, inserindo-o no topo Pop - operao para desempilhar um elemento, removendo-o do topo.

Introduo

Introduo

Introduo

Introduo

Introduo
De alguma forma uma pea precisa ser representada em nosso programa. Como estamos usando orientao a objetos as peas sero representadas por objetos. Uma classe Java ser criada somente para modelar as peas, algo similar ao cdigo a seguir:

Introduo
public class Peca { private String nome; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } }

Introduo
Com a classe Peca, j possvel criar objetos para representar as peas que a mquina montadora utiliza. Porm, o sistema deve definir como guardar estes objetos, ou seja, ele precisa escolher uma estrutura de dados. Esta estrutura de dados deve manter os dados seguindo alguma lgica e deve fornecer algumas operaes para a manipulao destes e outras operaes para informar sobre seu prprio estado.

Soluo do problemas das Peas


Para implementar o algoritmo de manuteno do equipamento, necessrio criar uma estrutura de dados que se comporte como a pilha de peas. Vamos chamar esta estrutura de dados de Pilha..

Soluo do problemas das Peas


Para implementar o algoritmo de manuteno do equipamento, necessrio criar uma estrutura de dados que se comporte como a pilha de peas. Vamos chamar esta estrutura de dados de Pilha..

Soluo do problemas das Peas


Primeiro, definimos a interface da Pilha (conjunto de operaes queremos utilizar em uma Pilha). 1) Push - Insere uma pea (coloca uma pea no topo da Pilha). 2) Pop - Remove uma pea (retira a pea que est no topo da Pilha). 3) Informa se a Pilha est vazia.

Soluo do problemas das Peas


Podemos criar uma classe Pilha para implementar a esta estrutura de dados. Os mtodos pblicos desta classe sero a implementao das operaes

Soluo do problemas das Peas


public class Pilha { public void push(Peca peca) { // implementao } public Peca pop() { return null; } public boolean vazia() { return true; } }

Soluo do problemas das Peas


O primeiro fato importante que devemos observar que uma vez que a interface da Pilha foi definida, j saberamos usar a classe Pilha. Vamos criar uma classe de teste bem simples para exemplificar o uso de uma Pilha.

Soluo do problemas das Peas


public static void main(String[] args) { Pilha pilha = new Pilha(); Peca novapeca = new Peca(); pilha.push(novapeca); Peca pecaRemove = pilha.pop(); if (pilha.vazia()) { System.out.println("A pilha est vazia"); } }

Soluo do problemas das Peas


O segundo fato importante que a estrutura que queremos aqui muito similar as Listas que vimos anteriormente. A semelhana fundamental entre as Listas e as Pilhas que ambas devem armazenar os elementos de maneira sequencial. Este fato o ponto chave deste captulo.

Soluo do problemas das Peas


Qual a diferena entre uma Lista e uma Pilha? A diferena est nas operaes destas duas estruturas de dados. As operaes de uma Pilha so mais restritas do que as de uma Lista. Por exemplo, voc pode adicionar ou remover um elemento em qualquer posio de uma Lista mas em uma Pilha voc s pode adicionar ou remover do topo.

Soluo do problemas das Peas


Ento, uma Lista uma estrutura mais poderosa e mais genrica do que uma Pilha. A Pilha possui apenas um subconjunto de operaes da Lista. Ento o interessante que para implementar uma Pilha podemos usar uma Lista. Vamos criar restries sobre as operaes da Lista e obteremos uma Pilha.

Soluo do problemas das Peas


Ento, uma Lista uma estrutura mais poderosa e mais genrica do que uma Pilha. A Pilha possui apenas um subconjunto de operaes da Lista. Ento o interessante que para implementar uma Pilha podemos usar uma Lista. Vamos criar restries sobre as operaes da Lista e obteremos uma Pilha.

Soluo do problemas das Peas


Ns implementamos dois tipos de Listas: Vetores e Listas Ligadas. Vimos. Neste captulo, vamos utilizar a classe ListaLigada para armazenar as peas que sero guardadas Pilha.

Soluo do problemas das Peas


public class Pilha { private ListaLigada pecas = new ListaLigada();

Soluo do problemas das Peas


Dentro de nossa Pilha teremos uma ListaLigada encapsulada, que vai simplificar bastante o nosso trabalho: delegaremos uma srie de operaes para essa ListaLigada, porm sempre pensando nas diferenas essenciais entre uma Pilha e uma Lista.

Operaes em pilhas
Agora, vamos implementar as operaes da Pilha.

Push - Inserir uma pea


As peas so sempre inseridas no topo da Pilha. Ainda no definimos onde fica o topo da Pilha. Como estamos utilizando uma Lista para guardar os elementos ento o topo da Pilha poderia ser tanto o comeo ou o fim da Lista. Aqui escolheremos o fim da Lista.

Push - Inserir uma pea


public class Pilha { private ListaLigada pecas = new ListaLigada(); public void push(Peca peca) { this.pecas.adiciona(peca); }

Pop - Remover uma pea


A remoo tambm bem simples, basta retirar o ltimo elemento da Lista.
public Peca pop() {
return this.pecas.remove(this.pecas.tamanho() - 1);

Recordando que o mtodo adiciona(Object) adiciona no fim da Lista.

Informar se a pilha est vazia


Para implementar esta operao basta verificar se o tamanho da Lista zero.. public boolean vazia() { return this.pecas.tamanho() == 0; }

Você também pode gostar