Professional 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