Académique Documents
Professionnel Documents
Culture Documents
O que um TAD?
TAD= Conjunto de Objectos + Conjunto de Operaes Abstraces Matemticas
EDA1
EDA1
EDA1
EDA1-16-Setembro-2008
EDA1
EDA1-16-Setembro-2008
EDA1
.push (
) resulta
9
6
EDA1-16-Setembro-2008
EDA1
7
7
EDA1-16-Setembro-2008
EDA1
A criao duma nova pilha deve resultar um objecto deste tipo que no contenha nenhum elemento (que esteja vazia!) Uma operao que informe se a pilha est vazia importante (p.e. empty) As operaes de pop e top devem lanar uma excepo tipo EmptyStackException
EDA1-16-Setembro-2008
8
EDA1
EDA1-16-Setembro-2008
EDA1
pop() 3 4 5 6 dim
0
e1
1
e2
2
e3
push(e5) 3
e5
0
e1
EDA1-16-Setembro-2008
1
e2
2
e3
dim
10
Discusso da Implementao
A complexidade das operaes
Mtodo Complexid ade O(1) size O(1) empty O(1) top O(1) pop O(1) push A complexidade espacial O(N), independentemente do nmero de elementos que a stack contenha
EDA1
A desvantagem desta implementao a xao dum limite para o nmero de elementos que a stack comporta
EDA1-16-Setembro-2008
Soluo??
11
EDA1
Trata-se duma Stack onde so mantidas informaes relativamente s variveis locais (aos mtodos) e outras informaes necessrias. Durante a execuo dum programa a JVM mantm uma stack cujos elementos so descritores dos mtodos invocados e activos, estes descritores so designados por frames.
EDA1-16-Setembro-2008
12
EDA1
calcular fact(5)
n n*fact (1) n 2 ? 2 3 6 ? 4 ? 24 5 120 ?
13
A Stack do Java permite que o mtodo exista em diferentes frames activas. Cada frame armazena o parametro n e o valor a ser retornado. Desde que as sucessivas chamadas evoluam para o caso de base, no h EDA1-16-Setembro-2008 problema.
EDA1
Converso inx-postx e avaliao de expresses: A expresso (3+4)*10 diz-se em notao inx, por os operadores(binrios) estarem no meio dos operandos. Este tipo de notao til para ns torna o clculo de expresses complexo, por exigir o uso de parntesis para estabelecer a ordem das operaes. 3 4 + 10 * o equivalente expresso anterior em notao postx
A avaliao duma expresso postx pode fazer-se usando uma stack e com uma s passagem pelo EDA1-16-Setembro-2008 input
14
Converso inx-postix
EDA1
A expresso 6 5 3 2 + 9 * 3 / - * a converso para postx da expresso em inx 6*(5-(3+2)*9/3) A converso duma expresso inx para postx faz-se tambm usando uma stack cujo uso est descrito no algoritmo. Assume-se que s existem parnteses curvos e que a expresso est correcta (pelo menos correctamente balanceada de parnteses).
EDA1-16-Setembro-2008
16
stack.push(s) else while(stack.top<>( or stack.top()>=prioridade(s)) output+=stack.pop() stack.push(s) EDA1-16-Setembro-2008 while (!stack.empty()) output+=stack.pop()
17
EDA1
input: output: 6 6 * 5 ( 3 5 2 + ( 9 3 * + 3 2 / ) * * 9 / 3 )
+ * ( / ( *
EDA1-16-Setembro-2008
18