9 Pilhas
Tpicos Principais
Introduo
Interface do tipo pilha
Exemplo de uso: verificao de expresses
Introduo
Pilha
novo elemento inserido no topo e acesso apenas ao topo
o primeiro que sai o ltimo que entrou (LIFO last in, first out )
operaes bsicas:
funo pilha_cria
funo pilha_vazia
funo pilha_libera
Exemplo de uso
Verificao de expresses matemticas
Considerando cadeias de caracteres com expresses matemticas
que podem conter termos entre parnteses, colchetes ou chaves, ou
seja, entre os caracteres '(' e ')', ou '[' e ']', ou '{' e '}';
funo que retorna 1, se os parnteses, colchetes e chaves de uma
expresso aritmtica exp so abertos e fechados corretamente, ou 0
caso contrrio;
Para a expresso 2*{3+4*(2+5*[2+3])} retornaria 1;
Para a expresso 2*(3+4+{5*[2+3}]) retornaria 0;
Prottipo da funo:
int verifica(char* exp);
Exemplo de uso
Verificao de expresses matemticas
A estratgia percorrer a expresso da esquerda para a direita:
1. Se encontra '(', '[' ou '{', empilha;
2. Se encontra ')', ']' ou '}', desempilha e verifica o elemento no topo
da pilha, que deve ser o caractere correspondente;
3. Ao final, a pilha deve estar vazia.
Exemplo de uso
char fecho(char c) {
if(c=='}') return '{';
if(c==']') return '[';
if(c==')') return '(';
}
int verifica(char* exp) {
Pilha* p=pilha_cria();
int i;
for(i=0; exp[i]!='\0'; i++)
{
if(exp[i]=='{'||exp[i]=='['||exp[i]=='(')
pilha_push(p,exp[i]);
else if(exp[i]=='}'||exp[i]==']'||exp[i]==')')
{
if(pilha_vazia(p)) return 0;
if(pilha_pop(p)!=fecho(exp[i])) return 0;
}
}
if(!pilha_vazia(p)) return 0;
pilha_libera(p);
return 1;
}
(c) Dept. Informtica - PUC-Rio
*/
*/
*/
};
10
11
12
*/
13
14
15
16
/* aborta programa */
17
18
19
Resumo
Pilha
20
Referncias
Waldemar Celes, Renato Cerqueira, Jos Lucas Rangel,
Introduo a Estruturas de Dados, Editora Campus
(2004)
Captulo 11 Pilhas
21