You are on page 1of 14

ProgramadePsGraduaoemCinciadaComputaoIBILCE/UNESP

EstruturadeDados

Resumo Estruturas de Dados Elementares

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
.

Figura 8: Pseudoalgoritmos de lista duplamente ligada adaptados para uso de sentinela.

Emboraousodesentinelasdeixeocdigofontedaaplicaorelativamentemaissimples,ele
adicionaumcerto
overhead
dememria,poiscadalistaligadasempreter
n+1
elementos.

Implementao de ponteiros e objetos


Utilizando mltiplos vetores
Umacoleodeobjetoscomasmesmaspropriedadespodeserimplementadaatravsde
vriosvetoresdemesmotamanho,ondecadaumarmazenaosvaloresdeumapropriedade
especfica.

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.

Figura 9: Representao de uma lista duplamente ligada utilizando trs vetores.

Utilizando um nico vetor


Aabordagemqueutilizaumnicovetortemcomoanalogiaamemriadocomputador,que
umespaodeendereamentocommuitasposies,ondecadaobjetoocupaumafaixa
contnuadessesendereoseoponteiroparaumobjetoaposioparaoprimeiroendereo
ocupadopeloobjeto.

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.

Alocando e liberando objetos


Aolidarcomconjuntosdinmicos,todavezqueumvalorinserido,memriaprecisaser
alocadaparacriaroelementoassociado.Inversamente,quandooelementoremovido,ele
precisaserliberado.Emalgumaslinguagensdeprogramao,o
GarbageCollector
(Coletorde
Lixo)periodicamenteidentificaobjetosnoutilizadoseoslibera.Emoutras,noentanto,de
responsabilidadedaprpriaaplicaolidarcomaalocaomemriaeliberaodememria.

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.

Figura 10 Pseudoalgoritmos para utilizao da lista


free
para gesto de memria.

You might also like