Professional Documents
Culture Documents
EstruturadeDados
Pilhas e Filas
Pilhasefilassoestruturasdedadosdinmicasbaseadasnoconceitodelista(umasequncia
deelementos,comoumvetor,porexemplo).Emboraaoperaodeinserodeelementos
seja,essencialmente,amesmaentreasduas,asoperaesderemoodeelementosso
diferentese,nofinaldascontas,oqueasdefinem.
Pilhasseguemoconceitode
lastin,firstout
(LIFO),ondeoselementossoremovidosna
ordeminversadesuainsero.Alternativamente,filasseguemoconceito
firstin,firstout
(FIFO),emqueooselementossoremovidosnaordememquesoinseridos.
Emtermosdeexemplos,podesepensarempilhasefilasdaseguintemaneira:
Pilhas
Metfora:pilhadepratosaseremlavadosnumacozinha
Computao:pilhadeexecuodeinstruesemumprograma
Filas
Metafra:filadeatendimentoembanco
Computao:filade
jobs
deimpressoemumaimpressora
Pilhas
Devidoasmetforascomumenteutilizadaparapilhas,asoperaesnessaestruturadedados
temnomesdiferenciados:aoperaodeinserodeelementochamadade
Push
ea
operaoderemoo,de
Pop
.Aprincipalpropriedadedeumapilha,fora,obviamente,seus
elementos,
top
,queindicaqualoelementonotopodapilhaepermiteadefinioda
operao
Peek
,aqualsimplesmenteretornaoelementoarmazenadoem
top
,semo
removlodapilha.
Afigura1apresentaumaabstraodeumapilhachamada
pilha
,inicialmentecomos
elementos34,54,231e312,inseridosnessaordem.Aoinseriroelemento13,
percebesequeapropriedade
top
mudadevalor,apontando,agora,paraoelementorecm
inserido.Aoremoverumelementodapilha,oltimoelementoinserido(13)descartadoe,
agora,
top
passaaapontarparaoelemento312.
Figura 1: (a) Pilha no estado inicial. (b) Pilha aps a insero do elemento 13, i.e. P
ush(pilha,
13)
. (c) Pilha aps a remoo de elemento, i.e.
Pop(pilha).
Utilizandoumvetor,asestruturadapilhaeasoperaes
Push
e
Pop
podemserdefinidas
atravsdosseguintespseudoalgoritmosapresentadosnafigura2.
Figura 2: Pseudoalgoritmos para implementao de pilhas utilizando um vetor.
Filas
Assim,comonaspilhas,asmetforasutilizadasparaasoperaesrelacionadasafilasdo
nomesaseusmtodosdeinseroeremoo:
Enqueue
e
Dequeue
,respectivamente.Filas
possuemduaspropriedadesmuitoimportantes(almdeseuselementos):
head
(cabea),que
indicaqualoelementomaisantigonafila(i.e.oprximoaserremovido)e
tail
(cauda),
indicaqualoelementomaisnovonafilaenecessrioparaimplementaesenvolvendo
vetores.
Afigura3apresentaumaabstraodeumafilachamada
fila
,inicialmentecomoselementos
34,54,231,312,inseridosnessaordem.Aoinseriroelemento13,percebesequea
propriedade
tail
mudadevalor,apontando,agora,paraoelementorecminserido.Ao
removerumelementodapilha,oprimeiroelementoinserido(34)descartadoe,agora,
head
passaaapontarparaoelemento54.
Figura 3: (a) Fila no estado inicial. (b) Fila aps a insero do elemento 13, i.e. E
nqueue(fila,
13)
. (c) Pilha aps a remoo de elemento, i.e.
Dequeue(pilha)
Utilizandoumvetor,asestruturadafilaeasoperaes
Enqueue
e
Dequeue
podemser
definidasatravsdosseguintespseudoalgoritmosapresentadosnafigura4.possvelver
pelospseudoalgoritmosqueumafilaumtantomaiscomplexadoqueumapilhaissose
deveaofatodequeospontosdeinseroeremoosodiferentesepodemdaravoltano
vetorquearmazenaoselementos,assimnecessrioadicionartratamentoparaessescasos.
Emfilascomalocaodinmicadememria,noentanto,essatratativaespecialno
necessria,pois,nessecaso,inseroeremoosomerasquestesdeajustesdeponteiros.
Figura 4: Pseudoalgoritmos para implementao de filas utilizando um vetor.
Erros
overflow
e
underflow
Comopossvelpercebernospseudoalgoritmosdepilhasefilas(aindaque,nocasodafila,
elestenhamsidoomitidos,pelobemdabreviedade),podeocorrerdeasoperaesdeinsero
eremooempilhasoufilascausaremdoistiposerros,chamadosde
overflow
e
underflow.
Overflow
acontecequandosetentainserirumelementoemumapilha/filaquejestutilizando
todasasposiesdisponveisdovetordeelementos.Parapilhas,esseeventorepresentado
pelomomentoemque
top
ultrapassaaquantidadedeposiesdisponveisnovetordos
elementos.Parafilas,oeventorepresentadopelomomentoemque,apsumainsero
numafilanovazia,
head
e
tail
seencontram(i.e.apresentamomesmovalor).Nocasode
pilhas/filascomalocaodinmicadememria,o
overflow
ocorre,geralmente,quandoo
computadornoapresentamaismemriaparaseralocada,emboravalidaopersonalizada
possaserimplementada.
Underflow
acontecequandosetentaremoverumelementoemumapilha/filaqueestvazia,
sejaporquenenhumelementofoiinserido,ouporquetodososelementosqueforaminseridos
tambmjforamremovidos.Nocasodepilhas/filascomalocaodinmicadememria,o
underflow
ocorrequandoovalordoponteiro
top
/
head
nulo.
Lista ligada
Listasligadassoestruturasdedadostambmbaseadasnoconceitodelista,porm,a
sequnciadoselementosnodefinidapelosndicesdeumvetor,mas,sim,porumvalor
ponteiro,queapontaparaondeestoprximoelemento(sejaeleumaposioemumvetorou
namemria).Listasligadassoummodeloparaconjuntosdinmicos,podendoimplementar
todasassuasoperaes:
Insero
Remoo
Busca
Mnimo
Mximo
Sucessor
Antecessor
Listasligadas,assimcomofilas,possuemaspropriedades
head
e
tail
,queindicamquais
sooselementosinicialefinaldalista,emboraasoperaesdeinseroeremoonose
comportam,necessariamente,comoasdeumafila.
Cadaelementodeumalistaligadaapresenta,necessariamente,duaspropriedades:
next
:ponteiroparaoprximoelementonalistaligadaCasonulo,indicaqueeste
elementooltimonalista(
tail
)
value
:valorarmazenadopeloelemento.
Listasligadaspodemapresentarvariaes:
Listaduplamenteligada:
emquecadaelementoapresentaumaterceirapropriedade
necessria,
previous
,queoponteiroparaoelementoanteriornalista.Caso
previous
sejanulo,istosignificaqueoelementooprimeironalista(
head
)
Listaligadacircular
:emquesetemque
tail.next=head
.Tambmpodeser
duplamenteligada,oquetambmfazcomque
head.previous=tail
.
Listaordenada
:emqueoselementosdalistaobedecemumasequncia
prestabelecida(e.g.ordenscrescenteoudecrescente).Necessitaqueosmtodosde
inseroe/ouremoodalistasejamalteradosparagarantirqueaordemsejamantida
quandoalistaalterada.
Afigura5apresentaumaabstraodeumalistaduplamenteligada,inicialmentearmazenando
osvalores3,23,12e31,inseridosnessaordem.Aoinserirovalor65,criadoumnovo
elementocomaspropriedades
previous
(queassumevalornulo),
next
(queapontaparao
elementoqueatento
head
dalista31)e
value
(65)porfim,apropriedade
head
da
listaagoraserefereaonovoelemento.Aoremoverumelemento(nocaso,oquepossuivalor
31),osvaloresdaspropriedades
next
doelementoantecessore
previous
doelement
posteriorsoajustadas,demaneiraaignoraroelementoremovidocasoalistatenhasido
implementadacomalocaodinmicadememria,oelementoremovidopodeser,agora,
liberadodamemria.
Figura 5: (a) Lista duplamente ligada no estado inicial. (b) Insero de um elemento com valor 65
no comeo da lista, i.e.
Insert(list,65)
. (c) Remoo do elemento com valor 31 da lista, i.e.
Remove(list,31)
Afigura6apresentaospseudoalgoritmosdasoperaesdebusca(
Search(lista,
valor)
),insero(
Insert(lista,elemento)
)eremoo(
Remove(lista,
elemento)
)deumalistaduplamenteencadeada.Notaseque,atravsdessasfunes,
possvelremoverdalistaumelementodevalorespecfico,combinandoasfunes
Search(lista,valor)
e
Remove(lista,element)
.
Figura 6: Pseudoalgoritmos para implementao de uma lista duplamente ligada.
Sentinelas
Pelospseudoalgoritmosdelistasligadas,percebesequenasoperaesdeinseroe
remoonecessrio,antesdetrabalharcomaspropriedades
next
e
previous
dos
elementos,verificarseestasnosonulas,pois,namaioriadaslinguagensdeprogramao,
manipulaodeobjetosnulosresultaemfalhadaaplicao.Umamaneiraderemovereste
problemaatravsdousode
sentinelas,
quesoelementosquesomenteaaplicao
entendecomonulos,aindaqueestesnoosejam.
Estesentinelapodeserreferenciadoatravsdaadiodeumapropriedade
nil
alista.Assim,
se
head=tail=nil
,sabesequealistavazia.Dadoumelemento
x
,caso
x.previous=lista.nil
,entooelementooprimeirodalistaalternativamente,caso
x.next=lista.nil
,oelementooltimo.
Afigura7apresentaumaabstraodeuma
listacircularduplamenteligadacomsentinela,
em
quesorealizadasasmesmasoperaesdaFigura6,comomesmoconjuntodedados.Com
ousodesentinela,alistaadquireotratode
circular,
poisambos
head.previous
e
tail.next
apontamparaummesmoelemento,
nil
.Ovalor
inf
atribudoaoelemento
nil
meraconvenodosexemplosutilizadosaqui..
Figura 7: Representao das mesmas operaes realizadas na Figura 5, porm, agora, sobre uma
lista circular duplamente encadeada com sentinela.
Afigura8apresentacomoficamospseudoalgoritmosdalistacircularduplamenteligadacom
sentinela.Aestrutura
Element
eafuno
Search(lista,valor)
foramomitidas,pois
nosofremalteraes.Nafuno
Remove(lista,elemento)
,percebeseque,emboraas
condicionaisparatratamentodeponteirosnulostenhamsidoremovidas,condicionaispara
tratamentodaspropriedades
head
e
tail
dalistaforamadicionadas.Nessecaso,dadaa
naturezacirculardalistacomsentinela,possvelinferirquaiselementossocabeaecauda
atravsde
list.nil.next
e
list.nil.previous
,respectivamente,eliminando,assim,a
necessidadededeclararessas
head
e
tail
.
Emboraousodesentinelasdeixeocdigofontedaaplicaorelativamentemaissimples,ele
adicionaumcerto
overhead
dememria,poiscadalistaligadasempreter
n+1
elementos.
Afigura9apresentaumaabstraodestaabordagem.Nela,temsetrsvetores,
prev
,
value
e
next
,referindo,respectivamente,aoelementoanterioraoatual,ovalordoelementoatuale
oprximoelemento.Sedesejadoresgatarovalordetodasaspropriedadesdeumobjetona
posio
idx
,necessrioconsultarcadaumdosvetoresnestaposio,ouseja,
prev[idx]
,
value[idx]
e
next[idx]
.Comonumalistaligadacomum,tambmsoutilizadasas
propriedades
head
e
tail
paraindicarquaisoselementosinicialefinaldalista.Porfim,
notaseque,assimcomonocasodosentinela,foiusadoo
inf
parasereferiraovalornulo.
Afigura10apresentaumaabstraodessaabordagem,utilizandooexatomesmoconjuntode
dadosqueafigura9.Ovetor
mestre
,porassimdizer,armazena6objetoscom3propriedades
demesmotamanho(1posio)cada,assim,cadaobjetoocupa3posiesdovetormestre.
Notaseque,independentementedosponteiros
prev
e
next
,paraacessaroobjetocontguoa
outroobjetonaposio
idx
,necessrioacessaraposio
idx+size
,onde
size
se
refereaotamanhodecadaobjeto(nocaso,3posies).
Figura 9: Representao de uma lista duplamente ligada utilizando um nico vetor. Cada objeto
nessa lista ocupa 3 posies, representando, cada uma, respectivamente, as propriedades v
alue
,
previous
e
next
.
Comessaabordagem,possvelarmazenarobjetosdediferentestamanhos,sem,
inicialmente,gastodememriaadicionaldevidoaobjetosquesaemdopadro.Noentanto,
essetipodeutilizaopodeaumentaracomplexidadedaaplicao.
Paraaabordagemdalistaduplamenteligadaatravsdemltiplosvetores,possvelgerenciar
asposieslivresutilizandoumalistaligadasimples,semapropriedade
value
,chamadade
free
.Alista
free
utilizaasposieslivresdovetor
next
paradeterminarquaisasposies
noutilizadas.Quandoumvaloradicionadoalistareal,consultasealista
free
para
determinarqualaprximaposiolivreinversamente,quandoumelementoremovido,sua
posioadicionadaalista
free
.Issotambmacabaporgerarumaoutrapropriedade
freeHead
,queindicaqualacabeadalista
free
.
Sealista
free
estvazia,ento,nohmaisespaoparanovosvalores.Seelatemtamanho
igualaotamanhodovetor
next
,entoalistarealestvazia.Seucomportamentoodeuma
pilha,i.e.aprximaposiodadacomolivre(aoinserirumvalor)altimaquefoiliberada.
Afigura10apresentaospseudoalgoritmosparaasoperaesdealocaoeliberaode
objetos,utilizandoalista
free
.Nohnadadeespecialnospseudoalgoritmoseles
meramenterevisitamoconceitodepilha.