Escolar Documentos
Profissional Documentos
Cultura Documentos
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Hoje
! Interfaces Java
!
Declarao
!
utilizao.
Implementaes da pilha.
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Interfaces em Java
!
Nomes
Parmetros
Valores de retorno
! A interface no define:
! Como os mtodos executam as operaes
! Como os dados so representados internamente
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Interfaces em Java
! Na sua forma mais simples, a interface um grupo de
mtodos
! Uma interface mais abstracta do que uma classe, e
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Fac. Cincias
Univ. Lisboa
Exemplo: Bycicle
interface Bicycle {
"void changeCadence(int newValue);
"
"
"
"//wheel revolutions per minute
"void changeGear(int newValue);
"void speedUp(int increment);
"void applyBrakes(int decrement);
}
Fac. Cincias
Univ. Lisboa
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Pr- e Ps-condies
! O contrato pode ser garantido formalmente (JML) com
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Tipo de Dados:
Pilha
Fac. Cincias Univ. Lisboa
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Pilha (Stack)
! Uma pilha uma estrutura que armazena dados
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Especificao da Pilha
!
StackInt<E>"
boolean empty() // devolve true se a pilha est vazia, false
no caso contrrio
! E peek() // devolve o objecto no topo da pilha sem o remover
! E pop() // devolve o objecto no topo da pilha e remove-o
! E push(E obj) // empilha um item no topo da pilha e devolve o
item empilhado
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Interface
da Pilha
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Interface da Pilha
/** Um StackInt<E> uma estrutura de dados LIFO, ou seja,
onde os obectos de tipo E so inseridos e removidos pela
mesma ponta."
*/
public interface StackInt<E>{
"/** empilha um item no topo
" * @param obj o objecto a empilha
" * @return o objecto empilhado
" */
"E push (E obj);
"
"/** devolve o objecto no topo da pilha sem o remover
" * @return o objecto no topo da pilha
" * @throws EmptyStackException se a pilha est vazia
" */
"E peek();"
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Interface da Pilha
...
"
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Aplicaes da Pilha
!
Descobrir palndromas:
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
PalindromeFinder
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
PalindromeFinder (cont.)
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
PalindromeFinder: comentrios
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
cada )
! Mas com [{( diferente:
! (w * [x + y] / z [p / {r q}])
equilibrada, mas
! (w * [x + y) / z [p / {r q}])
!
no equilibrada. Nem mesmo
! (w * [x + y) / z [p / {r q}]]
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Algoritmo isBalanced:
!
Seja index 0
Aumentar index
Fac. Cincias
Univ. Lisboa
ParenChecker (simplificado)
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
ParenChecker (simplificado)
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
ParenChecker (simplificado)
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Implementaes da Pilha
! Base da Pilha: theData:
!
Extenso da classe Vector
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
"try {
"
"return remove(size() 1);
"} catch (ArrayIndexOutOfBoundsException ex){
"
"throw new EmptyStackException();
"}
}"
!
Fac. Cincias
Univ. Lisboa
Alternativa: usar uma classe que tenha uma componente List. Todas
estas classes implementam a interface List: ArrayList, Vector,
LinkedList. Chamamos a esta componente theData, ela vai
conter os dados do Stack.
//push
public E push(E obj){
"theData.add(obj);
"return obj;
}
"
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Classe ListStack
public class ListStack<E> implements StackInt<E>{
"/** A lista que contem os dados */
"private List<E> theData;"
"/**construtor*/
"public ListStack(){
"theData = new ArryList<E>(); //podia ser outro List
"}
"public E peek(){
"
"if (emptyy()) {
"
"
"throw new EmptyStackException();
"
"}
"
"return theData.get(theData.size() 1);
"}
//etc."
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
"/**construtor*/
"public ArrayStack(){
"
"theData = (E[]) new Object[INITIAL_CAPACITY];
"}
"public E push(E obj){
"
"if (topOfStack == theData.length 1)
"
"
"reallocate();
"
"topOfStack++;
"
"theData[topOfStack] = obj;
"
"return obj;
"}"
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
"/** os dados */
"private Node<E> topOfStackRef = null;
"//push
"public E push(E obj){
"
"topOfStackRef = new Node<E>(obj, topOfStackRef);
"
"return obj;
"}
"//pop
"public E pop(){
"
"if (empty()) throw new EmptyStackException();
"
"else {
"
"
"E result = topOfStackRef.data;
"
"
"topOfStackRef = topofStackRef.next;
"
"
"return result;
"
"}
"}"