Sei sulla pagina 1di 14

ColasyListasEnlazadas

Colas
ListasEnlazadas
Colasdoblemenreenlazadas

Colas
Unacolasediferenciadeunapilaenquelasoperacionesdeinserciny
extraccinsiguenelprincipiodeprimeroenentrarprimeroensalir
(firstinfirstout,FIFO).
Loselementossepuedeninsertarencualquiermomento,perosoloel
elementoquehapermanecidoelmayortiempopuedeserextrado.
Loselementosseinsertan(enqueued)alfinal(rear)yseextraen
(dequeued)desdeelfrente(front).

EltipodeDatoAbstractoCola
Lacolatienedosmtodosfundamentales:
enqueue(o):
Insertaobjectooalfinaldelacola
dequeue():
Extraeelobjetodelfrentedelacolaylo
devuelve;
ocurreunerrorsilacolaestvaca
Lossiguientesmtodosdesoportedebenserdefinidos:
size():
Devuelveelnemrodeobjetosenlacola
isEmpty():
Devuelveunvalorlgicoqueindicasilacolaest

vaca
front(): Devuelve,sineliminar,elobjetodelfrentedelacola;
ocurreunerrorsilacolaestvaca

ColabasadaenArray
Creaunacolausandounarraydeformacircular.
SeespecificauntamaomximoN,e.g.N=1,000.
LacolaconsistedeunarrayQdeNelementosydosvariablesenteras:
f,ndicedelelementodelfrente
r,ndicedelelementosiguientealfinaldelacola
configuracinnormal
Preguntas:
Qusignificaf=r?
Cmosecalculael
nmerodeelementosen
lacoladesdefyr?

ColabasadaenArray(1)

Pseudocdigo

Algoritmosize():
return(Nf+r)modN
AlgoritmoisEmpty():
return(f=r)
Algoritmofront():
ifisEmpty()then
throwa
QueueEmptyException
returnQ[f]

Algoritmodequeue():
ifisEmpty()then
throw
QueueEmptyException
tempQ[f]
Q[f]null
f(f+1)modN
returntemp
Algoritmoenqueue(o):
ifsize=N1then
throw
QueueFullException
Q[r]o

ImplementacindeunaColacon
unaListaEnlazadaSimple
ListaEnlazadaSimple:Nodosconectadosencadenaporenlaces

Lacabezadelalistaeselfrentedelacola,lacoladelalistaes
elfinaldelacola.Porqunolocontrario?

ExtracindelaCabeza

Insertandoporlacola

Colasconfinalesdobles
Unacolacondoblefinal,odeque,soportainsercinyextraccindesde
elfrenteyelfinal.
ElTipodeDatoAbstractoDeque
insertFirst(e):
Insertaealdeiniciodeladeque.
insertLast(e):
Insertaealdefinaldeladeque
removeFirst():
Extraeydevuelveprimerelemento
removeLast():
Extraeydevuelveltimoelemento
Mtodosdesoporteadicionales:
first()
last()
size()

isEmpty()

ImplementandoPilasyColascon
Deques
PilasconDeques:

ColasconDeques:

10

ElPatrnAdaptor
Elusodeundequeparaimplementarunapilaocolaesunejemplo
delpatrnadaptor.LospatronesAdaptorpatternsimplementanuna
clasemedianteelusodemtodosdeotraclase.
Engeneral,lasclasesadaptorespecializanclasesgenerales
Dosaplicacionesson:
Especializarunaclasegeneralmediantelamodificacinde
algunosmtodos.
Ej:implementacindeunapilaconundeque.
Especializarlostiposdeobjetosusadosporunaclasegeneral.
Ej:DefinicindelaclaseIntegerArrayStackqueadapta
ArrayStackparaalmacenarsoloenteros.

11

ImplementacindeDequescon
ListasDoblementeEnlazadas

Laeliminacinalfinaldeunalista
enlazadasimplenosepuederealizaren
tiempoconstante.
Paraimplementarunadeque,seusa
unalistadoblementeenlazada,con
nodoscabecerosyfinalesespeciales

Unnododeunalistadoblementeenlazadatieneunenlacenextyprev.
Soportalossiguientesmtodos:
setElement(Objecte)
setNext(ObjectnewNext)
setPrev(ObjectnewPrev)
getElement()
getNext()
getPrev()
Medianteelusodeunalistadoblementeenlazada,todoslosmtodosdeun

correnentiempoO(1).

12

ImplementacindeDequescon
ListasDoblementeEnlazadas(1)
Cuandoseimplementanlistasdoblementeenlazadas,seaadendos
nodosespecialesenlosfinalesdelaslistas:losnodosheaderytrailer.
Elnodoheadervaantesdelprimerelementodelalista.Tieneun
enlacevlidonextynullcomoenlaceprev.
Elnodotrailervadespusdelltimoelemento.Tieneuna
referenciaprevvlidaperounareferencianulaennext.
NOTA:losnodosheadery
trailersoncentinelasonodos
vaciosporquenoguardan
elementos.

13

ImplementacindeDequescon
ListasDoblementeEnlazadas(2)
Visualizacindel
cdigopara
removeLast().

14