You are on page 1of 16

Estrutura de Dados I

Pilhas: conceitos e
implementa es
implementaes
Cesar Rocha
cesar@pontoweb.com.br
1
Objetivos

Explorar os conceitos fundamentais acerca do uso


de pilhas utilizando a linguagem C
Organizao e implementao, caractersticas,
vantagens, desvantagens, regras de utilizao,
operaes bsicas e algoritmos de implementao
Neste mdulo, sero abordadas ainda as seguintes
implementaes: seqencial e encadeada
Este mdulo ser utilizado como referncia na
entrega dos futuros projetos
Implementao das estruturas e algoritmos, criao
das bibliotecas e prticas de laboratrio
2
Motivao

Uma das estruturas de dados mais simples a pilha


Possivelmente, por esta razo, a pilha uma das
estrutura de dados mais utilizada em programao
A pilha vem sendo, inclusive, muito implementada
pelo hardware da maioria das mquinas modernas
Lembre-se da pilha de chamadas de funes
Variveis locais so empilhadas na pilha
Ao trmino da funo, as variveis so desempilhadas
um TAD onde as operaes de insero e retirada
so efetuadas apenas no final da estrutura
3
Motivao

A idia fundamental da pilha que todo o acesso a


seus elementos feito atravs do seu topo
Seja na insero ou na remoo de elementos
Assim, quando um novo elemento introduzido na
pilha, passa a ser o elemento do topo - e o nico
elemento que pode ser removido da pilha o topo
Isto faz com que os elementos da pilha sejam
retirados na ordem inversa ordem em que foram
introduzidos inicialmente
O primeiro que sai o ltimo que entrou
Estruturas tipo LIFO (last in, first out strategy)
4
Estratgia

Podemos fazer uma analogia com uma pilha de


pratos em um restaurante
Se quisermos adicionar um prato na pilha, o colocamos
no topo da pilha de pratos
Para pegar um prato da pilha, retiramos o do topo
Ou ainda: uma rua sem sada e bastante estreita,
onde apenas um carro consegue entrar por vez
O ltimo carro a entrar ser o primeiro a sair
No podemos retirar qualquer carro!
No podemos inserir um carro de tal forma que ele no
seja o ltimo no conjunto de carros 5
Propriedades

Propriedades de uma pilha:


Existem n elementos empilhados;
E1 o elemento base da pilha;
En o elemento topo da pilha;
A insero de um primeiro elemento E1 em uma
pilha vazia, torna-o o ltimo a sair da estrutura
No se pode consultar qualquer elemento
A insero sempre feita acima do elemento En
A retirada sempre feita no elemento En

6
Tipos de pilhas

Neste estgio, estaremos trabalhando com dois


tipos de pilhas: seqenciais e encadeadas
Seqencial: neste TAD, os elementos desta pilha so
armazenados em endereos seqenciais. Materializada
na forma de um vetor (arranjo ou matriz).
v[ ] 12 09 ...
0 1 2 ... MAX-1
Topo

Encadeada: elementos encadeados por ponteiros

TPilhaEnc p* 12 09
7
Pilhas seqenciais

Pense um pouco...
O que voc acha que seria necessrio para
implementar uma biblioteca de um novo TAD que
representasse uma pilha seqencial?
um vetor de elementos (tamanho pr-definido)
uma varivel que controle o topo da pilha
preciso
preciso deslocar
deslocar Pilha Vazia ? ? ? ... ? Topo = -1
os
os elementos
elementos aa cada
cada
inser o ou
insero ou remo o
remoo Insere A A ? ? ... ? Topo = 0
da
da pilha?
pilha? Porque?
Porque?
Como
Como poder amos
poderamos Insere B A B ? ... ? Topo = 1
adaptar
adaptar uma
uma lista
lista
seq encial uma
seqencial uma Retira B A ? ? ... ? Topo = 0
pilha?
pilha? 8
Pilhas seqenciais modus operandi

Iremos implementar este novo TAD utilizando as


mesmas diretrizes das listas seqenciais (j vistas)
Teremos uma varivel topo que ir servir de apoio
para as inseres e remoes da pilha
E a varivel posUltimo da lista seqencial? D pra
reaproveitar?
Mas, as regras de insero/remoo agora iro
mudar!
Algumas funes da lista seqencial (inserir ou remover
mediante uma posio, entre outras) devero ser
eliminadas neste novo TAD
9
Operaes em pilhas seqenciais

A literatura unnime quanto s operaes bsicas


realizadas numa estrutura pilha seqencial:
criar uma pilha vazia
verificar se uma pilha est vazia
verificar se uma pilha est cheia
consultar o topo da pilha (sem remover)
empilhar um novo elemento
desempilhar o elemento do topo
exibir / imprimir os elementos de uma pilha

10
Pilhas encadeadas

O que fazer quando o nmero mximo de elementos


na pilha no conhecido?
Devemos implementar a pilha usando uma estrutura
de dados dinmica (com alocao dinmica)
dinmica
Podemos empregar os conceitos vistos nas listas
simplesmente encadeadas
Porm, se memria no constitui um problema na
hora do armazenamento de dados, a pilha
seqencial (com vetores) pode parecer mais simples
At porque no h mais os deslocamentos nas
inseres e remoes de elementos na lista seqencial
11
Pilhas encadeadas

Pense mais um pouco...


O que voc acha que seria necessrio para
implementar uma biblioteca de um novo TAD que
representasse uma pilha encadeada?
uma struct representando um n da pilha (dado e
ponteiro para o prximo n da pilha).
um ponteiro para o 1 n representando a pilha
Como
Como poder amos
poderamos P
adaptar
adaptar uma
uma lista
lista
encadeada
encadeada uma
uma pilha?
pilha? 12 09
Onde
Onde ser
ser oo topo
topo da
da
pilha:
pilha: no
no in cio ou
incio ou no
no topo da pilha?
final
final da
da lista?
lista?
12
Pilhas encadeadas - modus operandi

O primeiro elemento (incio) da lista encadeada ir


representar o topo atual da pilha
Cada novo elemento ser inserido no incio da lista e,
conseqentemente, sempre que solicitado, retiramos o
elemento tambm a partir do incio da lista
Desta forma, vamos precisar de apenas duas
funes auxiliares na lista:
uma para inserir no incio (empilhar)
outra para remover do incio (desempilhar)
Ambas as funes retornam o novo primeiro n da
lista (o topo) 13
Operaes em pilhas encadeadas

A literatura unnime quanto s operaes bsicas


realizadas numa estrutura pilha encadeada:
criar uma pilha vazia
verificar se uma pilha est vazia
verificar se uma pilha est cheia
consultar o topo da pilha (sem remover)
empilhar um novo elemento
desempilhar o elemento do topo
exibir / imprimir os elementos de uma pilha

14
Algoritmos em C

O que dever ser feito pelo aluno:


Escolha e instalao do ambiente a ser trabalhado no
laboratrio
Modelagem deste TAD (dados e operaes)
Implementao dos algoritmos de operaes bsicas
vistos em sala de aula na linguagem C
Utilizao das regras de modelagem vistas no mdulo
anterior (criao de bibliotecas) e modularizao
Implantao de cdigo legvel e bem documentado
Nomes de variveis condizentes com o problema
Prtica de laboratrio
15
Para um bom aproveitamento:

O aluno deve identificar a relao entre TAD


(biblioteca e modularizao) com a implementao
da lista encadeada no cdigo!
Resolva todas as questes da prtica de
laboratrio de pilhas sequencial e encadeadas
Procure o professor ou monitor da disciplina e
questione conceitos, listas, etc.
No deixe para codificar tudo e acumular assunto
para a primeira avaliao.
Este apenas um dos assuntos abordados na prova!
16

You might also like