Académique Documents
Professionnel Documents
Culture Documents
1. Pilhas (Stacks)
Uma Pilha uma estrutura de dados do tipo LIFO (Last In First Out), cujo funcionamento
inspirado no de uma pilha natural, na qual o ltimo elemento a ser inserido sempre o
primeiro a ser retirado. Um exemplo de uma pilha o caso de uma stack.
out
5
1
Definio:
T uma sequncia finita de elementos do tipo T,
Uma pilha de elementos do tipo
conjuntamente com as seguintes operaes:
,
Criar uma stack vazia; Testar se a stack est vazia; Inserir um elemento na Stack se
esta no se encontrar cheia; Retirar um elemento da Stack se esta no se encontra
vazia, e Obter o elemento do topo da stack se esta no se encontra vazia.
1.1. Mtodo
tipo abstracto de dados, permite a
A implementao de uma pilha como u
definio abstracta dos aspectos essenciais de comportamento e funcionamento de um
objecto sem a definio de quaisquer aspectos de implementao. Uma pilha tem por
norma as seguintes funcionalidade:
Colocar e retirar dados da pilha.
,
push Empilha guardar um elemento n a pilha
,
pop Desempilha retirar um elemento da pilha
,
top Topo retornar o topo elemento do topo da pilha
Testar se a pilha est vazia ou cheia.
,
full PilhaCheia Verificar se a pilha est cheia (no pode guardar mais
elementos).
,
empty - PilhaVazia Verificar se a pilha est vazia (no contm elementos)
Inicializar ou limpar:
,
InicializaPilha Colocar a pilha num estado pronto a ser utilizada
A implementao de uma pilha pode ser efectuada atravs da utilizao de diferentes
estruturas de dados (vectores, listas ligadas, rvores, etc.). De seguida, apresenta-se duas
implementao de uma pilha atravs da utilizao de vectores e listas ligadas.
*+
1 de 7
-./ 012
32
415627
-D:.+91
2 de 7
FGH IJK
LK
MJNOKP
dados[topo] = elemento;
topo = topo + 1;
return(true);
}
}
int PILHA::pop()
{
if ( empty() )
{
erro = 2; // erro: pilha vazia
return(-1);
}
else
{
topo = topo - 1;
return(dados[topo]);
}
}
bool PILHA::empty()
{
return(topo == 0);
}
bool PILHA::full()
{
return(topo == MAXPILHA);
}
int PILHA::top()
{
if ( empty() )
{
erro = 2; // erro: pilha vazia
return(-1);
}
else
{
return(dados[topo-1]);
}
}
F]SG+RJ
3 de 7
_`a bcd
ed
fcghdi
w
_vl`+kc
4 de 7
xyz {|}
~}
|}
int PILHA::pop()
{ int valor;
struct no *apt;
if (empty()==true)
{return(0);}
else
{
valor = inicio->valor;
apt = inicio->next;
delete inicio;
inicio = apt;
return(valor);
}
}
bool PILHA::empty()
{
return(inicio==NULL);
}
Invocao do compilador:
g++ -wall -g -o <executvel> arq1.c arq2.c arqN.c
Parmetros:
-g indicar ao compilador para gerar cdigo para o debuger
-o nome do arquivo executvel que ser gerado
-wall indicar todos os erros e avisos
xy+|
5 de 7
+
6 de 7
EXEMPLO II:
Programa para Verificao da Sintaxe.
Pretende-se escrever um programa que permita verificar se, num ficheiro contendo
cdigo C++, todos os "parntesis" esto devidamente acasalados.
Considere os seguintes: '(' e ')', '[' e ']', '{' e '}'.
a) Deve utilizar um stack da STL para ir guardando os parntesis esquerdos.
Quando encontrar um parntesis direito, este deve corresponder ao existente no
topo do stack. Se corresponder o elemento retirado do stack, se no
corresponder o programa termina com um erro.
b) Adicione ao programa a capacidade de ignorar os parntesis que surgem dentro
de comentrios ou entre plicas (' ') ou aspas (" ").
EXEMPLO III:
Escreva trs verses de uma classe stack. Ambas devem poder ser utilizadas no
programa do exerccio II sem necessidade de alterar o programa. Como tal devem ser
classes template. As duas verses so as seguintes:
a) Uma que se baseia na utilizao das classes list e/ou vector standard (esta muito
simples e serve s como preparao para as alneas seguintes).
b) Uma que se baseia na utilizao de uma lista ligada.
c) Uma que se baseia na utilizao de u vecto de baixo nvel.
1.7. Resumo
Uma Pilha um (ADT - Abstract Data Type) tipo abstracto de dados, na qual so
conhecidas os aspectos essenciais de comportamento e funcionamento de um object
sem qualquer relao com a estrutura interna do objecto, e a forma como este
implementado.
+
7 de 7