Sie sind auf Seite 1von 16

Curso Superior de Tecnologia em Telemtica

Programao e Estruturas de Dados

Pilhas Fundamentos e Implementaes


Copyright2010
Prof. Csar Rocha
cesarocha@ifpb.edu.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

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)

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: um software que implemente a funo


UNDO (o famigerado Crtl+Z)
A ltima ao feita ser a primeira a ser desfeita
No podemos retirar qualquer ao! Segue-se a ordem!
No podemos inserir uma ao na pilha de aes caso
ela no se torne a ltima!
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

...
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
os
os elementos
elementos aa cada
cada
insero
insero ou
ou remoo
remoo
da
da pilha?
pilha? Porqu?
Porqu?

Pilha Vazia

...

Topo = -1

Insere A

...

Topo = 0

Como
Como poderamos
poderamos
adaptar
adaptar uma
uma lista
lista
seqencial
seqencial aa uma
uma
pilha?
pilha?

Insere B

...

Topo = 1

Retira B

...

Topo = 0

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

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 poderamos
poderamos
adaptar
adaptar uma
uma lista
lista
encadeada
encadeada aa uma
uma pilha?
pilha?
Onde
Onde ser
ser oo topo
topo da
da
pilha:
pilha: no
no incio
incio ou
ou no
no
final
final da
da lista?
lista?

P
12

09

topo da pilha?

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

Das könnte Ihnen auch gefallen