Escolar Documentos
Profissional Documentos
Cultura Documentos
Pilhas Java
Pilhas Java
&
'
Jos de Siqueira e
'
Jos de Siqueira e
'
public interface Pilha { /* retorna o nmero de itens na pilha */ u public int tamanho(); /* retorna true se a pilha est vazia, false seno */ a a public boolean vazia(); /*retorna, sem remov-lo, o item do topo da pilha; e lana StackEmptyException se a pilha estiver vazia*/ c public Object topo() throws StackEmptyException; /* insere um item, passado em parmetro, no topo a da pilha */ public void empilha(Object element); /* remove e retorna o item no topo da pilha; lana c StackEmptyException se a pilha estiver vazia*/ public Object desempilha() throws StackEmptyException; } /* Exceoes lanadas quando se tenta usar as operaoes c c c em uma pilha vazia so tratadas aqui*/ a public class StackEmptyException extends RuntimeException { public StackEmptyException (String erro) { super(erro); } }
&
Jos de Siqueira e
'
Jos de Siqueira e
'
/* inicia a pilha para usar um vetor com tamanho mximo CapacidadeMax */ a public PilhaComVetor() { this(CapacidadeMax); } /* inicia a pilha para um arranjo com o tamanho fornecido; o parmetro o tamanho do vetor */ a e public PilhaComVetor(int tam) { Capacidade = tam; P = new Object[Capacidade]; } public int tamanho() { return(topo + 1); } public boolean vazia() { return(topo < 0); } public void empilha(Object obj) throws StackFullException { if (tamanho() == Capacidade) throw new StackFullException(Pilha cheia!); P[++topo] = obj; }
&
Jos de Siqueira e
'
public Object desempilha() throws StackEmptyException { Object elemento; if (vazia()) throw new StackEmptyException(Pilha vazia!); elemento = P[topo]; P[topo] = null; // Libera P[topo] para a // coleta de lixo topo--; return elemento; } }
A pilha declarada acima genrica, pois os e e elementos so instncias da classe Object de Java. a a Pode-se armazenar qualquer objeto na pilha, pois todas as classes Java herdam da classe Object. Assim, podemos empilhar objetos das classes Integer, Estudante ou at mesmo Planetas. e No entanto, ao desempilhar, preciso fazer uma e converso para a classe espec a ca a que o objeto realmente pertence, como mostra o trecho de programa abaixo:
&
Jos de Siqueira e
'
public static Integer[] inverte(Integer[] a) { PilhaComVetor P = new PilhaComVetor(a.length); Integer[] b = new Integer[a.length]; for (int i = 0; i < a.length; i++) P.empilha(a[i]); for (int i = 0; i < a.length; i++) b[i] = (Integer) (P.desempilha()); return b; }
O TAD la em Java
As operaoes do TAD la so: c a 1. insere(o): insere o obejto o no m da la. Entrada: objeto. Sa da: nenhuma. 2. retira(o): retira e retorna o objeto do in da cio la. Lana uma exceao se a la estiver vazia. c c Entrada: nenhuma. Sa da: objeto. 3. tamanho(): retorna o nmero de objetos na u la. Entrada: nenhuma. Sa da: inteiro.
&
Jos de Siqueira e
'
4. vazia(): retorna um booleano indicando se a la est vaiza ou no. a a Entrada: nenhuma. Sa da: booleano. 5. frente(): retorna o objeto no in da la, cio sem retir-lo.Lana uma exceao se a la a c c estiver vazia. Entrada: nenhuma. Sa da: objeto.
public interface Fila { /* retorna o nmero de itens na la */ u prublic int tamanho(); /* retorna true se a la estiver vazia, false seno */ a public boolean vazia(); /* retorna o item a frente na la; lana ` c QueueEmptyException se a la estiver vazia */ public Object frente() throws QueueEmptyException; /* insere elemento no nal da la */ public void insere(Object item); /* remove e retorna o item a frente da la; lana ` c QueueEmptyException se a la estiver vazia */ public Object retira() throws QueueEmptyException;
&
Jos de Siqueira e
'
&
Jos de Siqueira e
'
Algoritmo tamanho(); retorna (N-i+f) mod N; Algoritmo vazia(); retorna (i=f); Algoritmo frente(); se vazia() ent~o lanar uma a c QueueEmptyException; retorna F[i]; Algoritmo retira(); se vazia() ent~o lanar uma a c QueueEmptyException ; aux F[i]; F[i] null; i (i+1) mod N; retorna aux; Algoritmo insere(o); se tamanho() = N - 1 ent~o lanar uma a c QueueFullException; F[f] o; f (f+1) mod N;
&
Jos de Siqueira e
10
'
Jos de Siqueira e
11
'
Jos de Siqueira e
12
'
public Object topo() throws StackEmptyException { if (vazia()) throw new StackEmptyException(Pilha est vazia.); a return topo.retItem(); } public Object desempilha() throws StackEmptyException { if (vazia()) throw new StackEmptyException(Pilha est vazia.); a Object aux = topo.retItem(); topo = topo.retProx; // aponta para o // prximo n o o tam--; return aux; } }
&
Jos de Siqueira e
13
'
Jos de Siqueira e
14
'
public Object retira() throws QueueEmptyException { Object obj; if (tam == 0) throw new QueueEmptyException (Fila est vazia.); a obj = primeiro.retItem(); primeiro = primeiro.retProx(); tam--; if (tam == 0) ultimo = null // a fila ficou // vazia return obj; }
&
Jos de Siqueira e
15