Академический Документы
Профессиональный Документы
Культура Документы
CAPTULO 7
Filas
"O xito no se consegue s com qualidades especiais. sobretudo um trabalho de constncia, de mtodo e de organizao" J. P. Sergent
7.1 - INTRODUO
No dia a dia, estamos acostumados com as filas em diversos lugares: nos bancos, nos mercados, nos hospitais, nos cinemas entre outros. As filas so importantes pois elas determinam a ordem de atendimento das pessoas. As pessoas so atendidas conforme a posio delas na fila. O prximo a ser atendido o primeiro da fila. Quando o primeiro da fila chamado para ser atendido a fila "anda", ou seja, o segundo passa a ser o primeiro, o terceiro passa a ser o segundo e assim por diante at a ltima pessoa. Normalmente, para entrar em uma fila, uma pessoa deve se colocar na ltima posio, ou seja, no fim da fila. Desta forma, quem chega primeiro tem prioridade. Neste captulo, estamos interessados em desenvolver estrutura de dados com o comportamentos das filas. Assim como Listas e Pilhas, as Filas so estruturas de dados que armazenam os elementos de maneira sequencial. Assim como as Pilhas, as Filas tm operaes mais restritas do que as operaes das Listas. Nas Filas, os elementos so adicionados na ltima posio e removidos da primeira posio. Nas Listas, os elementos so adicionados e removidos de qualquer posio. Ento, podemos implementar uma Fila simplesmente colocando as restries adequadas nas operaes de adicionar e remover elementos de uma Lista. Isso bem parecido ao que fizemos com as Pilhas.
1/ 13
17/ 10/ 12
Vamos implementar na seqncia uma Fila de Aluno. Iremos aproveitar a classe Aluno feita no captulo de armazenamento sequencial.
Agora que j temos a interface de uso da Fila definida vamos escrever algum teste sobre como ela deveria se comportar.
2/ 13
17/ 10/ 12
pbi casTse{ ulc ls et pbi sai vi mi(tig]ag){ ulc ttc od anSrn[ rs Fl fl =nwFl(; ia ia e ia) Auoauo=nwAuo) ln ln e ln(; fl.neeauo; iaisr(ln) Auoauoeoio=fl.eoe) ln lnRmvd iarmv(; i (iavza) { f fl.ai() Sse.u.rnl(Afl et vza) ytmotpitn" ia s ai"; } } }
Como j foi dito aqui vamos implementar Fila utilizando algum tipo de Lista. Neste captulo, vamos utilizar a classe L n e L s para armazenar os alunos da ikdit Fila.
pbi casFl { ulc ls ia piaeLs<ln>auo =nwLneLs<ln>) rvt itAuo lns e ikditAuo(; }
Voc pode tambm fazer o curso CS-14 dessa apostila na Caelum Querendo aprender ainda mais sobre estrutura de dados? Esclarecer dvidas dos exerccios? Ouvir explicaes detalhadas com um instrutor? A Caelum oferece o curso CS-14 presencial nas cidades de So Paulo, Rio de Janeiro e Braslia, alm de turmas incompany. Consulte as vantagens do curso Algoritmos e Estruturas de Dados com Java.
17/ 10/ 12
Os alunos que entram na Fila devem sempre se colocar no fim da mesma. Vamos definir que o fim da Fila o fim da Lista que estamos utilizando para implementar. Ento, entrar na Fila e adicionar no fim da Lista.
pbi casFl { ulc ls ia piaeLs<ln>auo =nwLneLs<ln>) rvt itAuo lns e ikditAuo(; pbi vi isr(ln auo { ulc od neeAuo ln) ti.lnsadauo; hsauo.d(ln) } }
bom observar que se o mtodo r m v ( for usado com a Fila vazia ento uma eoe) exceo ser lanada pois o mtodo r m v F r t )lana eoeis( I d x u O B u d E c p i nquando no existir elemento para remover. neOtfonsxeto
Nova editora Casa do Cdigo com livros de uma forma diferente Editoras tradicionais pouco ligam para ebooks e novas tecnologias. No conhecem programao para revisar os livros tecnicamente a fundo. No tm anos de experincia em didticas com cursos. Conhea a Casa do Cdigo, uma editora diferente, com curadoria da Caelum e obsesso por livros de qualidade a preos justos.
4/ 13
17/ 10/ 12
7.7 - GENERALIZAO
Nossa Fila s funciona para guardar objetos da classe A u o Vamos generalizln. la para poder armazenar qualquer tipo de objeto. Isso ser feito utilizando a classe O j c da qual todas as classes derivam direta ou indiretamente. Criaremos uma bet L n e L s de O j c em vez de uma L n e L s de A u o ikdit bet ikdit ln.
pbi casFl { ulc ls ia piaeLs<bet ojts=nwLneLs<bet(; rvt itOjc> beo e ikditOjc>) pbi vi isr(betojt){ ulc od neeOjc beo ti.beo.d(beo; hsojtsadojt) } pbi Ojc rmv( { ulc bet eoe) rtr ti.beo.eoe0; eun hsojtsrmv() } pbi boenvza){ ulc ola ai( rtr ti.beo.ie)= 0 eun hsojtssz( = ; } }
Agora, podemos guardar qualquer tipo de objeto na Fila. Isso uma grande vantagem pois a classe F l poder ser reaproveitada em diversas ocasies. Mas, ia h uma desvantagem, quando removemos um elemento da Fila no podemos garantir qual o tipo de objeto que vir.
w w cael m . com . br / apost i - j va- est r ut ur a- dados/ f i s/ #7- 5- r em over - um - al no w. u a l a a l u 5/ 13
17/ 10/ 12
A soluo para este problema utilizar o recurso do Generics. A nossa classe F l vai ser uma classe parametrizada. Assim, quando criarmos uma Fila ia poderemos definir com qual tipo de objetos ela deve trabalhar. Algo deste tipo:
Fl d auo fl =nwFl d auo(; ia e lns ia e ia e lns)
17/ 10/ 12
Em tempo de compilao, verificado o tipo de objetos que esto sendo adicionados na Fila. Portanto, se voc tentar inserir um objeto do tipo A u oem ln uma Fila de S r n um erro de compilao ser gerado. tig
pbi casTse{ ulc ls et pbi sai vi mi(tig]ag){ ulc ttc od anSrn[ rs Auoauo=nwAuo) ln ln e ln(; Fl<tig flDSrn =nwFl<tig(; iaSrn> iaetig e iaSrn>) / et cdg nocmia / se io opl flDSrn.neeauo; iaetigisr(ln) } }
Para evitar fazer casting de objetos, podemos utilizar o recurso de Generics aqui tambm.
pbi casTse{ ulc ls et pbi sai vi mi(tig]ag){ ulc ttc od anSrn[ rs
7/ 13
17/ 10/ 12
QeeAuo fl =nwLneLs<ln>) uu<ln> ia e ikditAuo(; Auoauo=nwAuo) ln ln e ln(; fl.fe(ln) iaofrauo; Auoauoeoio=fl.ol) ln lnRmvd iapl(; i(iaiEpy){ ffl.smt() Sse.u.rnl(Afl et vza) ytmotpitn" ia s ai"; } } }
J conhece os cursos online da Caelum? A Caelum oferece dezenas de cursos online em sua plataforma exclusiva de ensino que favorece o aprendizado com a qualidade reconhecida da Caelum. Voc pode escolher um curso nas reas de Java, Ruby, Web, Mobile, .Net e outros, ou fazer a assinatura semestral que d acesso a todos os cursos. Conhea os cursos online da Caelum.
8/ 13
17/ 10/ 12
Se no for impresso nenhuma mensagem de erro significa que a Fila est funcionando. 2. Implemente a classe F l G n r c para objetos (genrica) vista neste captulo. iaeeia Coloque a classe no pacote br.com.caelum.ed.filas
pcaeb.o.alme.ia; akg rcmceu.dfls ipr jv.tlLneLs; mot aaui.ikdit ipr jv.tlLs; mot aaui.it pbi casFlGnrc { ulc ls iaeeia piaeLs<bet ojts=nwLneLs<bet(; rvt itOjc> beo e ikditOjc>) pbi vi isr(betojt){ ulc od neeOjc beo ti.beo.d(beo; hsojtsadojt) } pbi Ojc rmv( { ulc bet eoe) rtr ti.beo.eoe0; eun hsojtsrmv() }
w w cael m . com . br / apost i - j va- est r ut ur a- dados/ f i s/ #7- 5- r em over - um - al no w. u a l a a l u 9/ 13
17/ 10/ 12
Perceba que a classe T s e i a e e i acontm um erro de compilao. Quando etFlGnrc voc remove um elemento da F l G n r c voc recebe uma referncia do tipo iaeeia O j c e no do tipo A u o bet ln. Altere a linha:
Auoauoeoio=flDAuo.eoe) ln lnRmvd iaelnsrmv(;
Por:
Ojc auoeoio=flDAuo.eoe) bet lnRmvd iaelnsrmv(;
Isso faz o cdigo compilar mas agora voc no tem mais a garantia de tipo. No sabe se a referncia que voc recebeu realmente est apontado para um objeto do tipo A u o ln. 3. Implemente a classe F l P r m t i a autilizando o recurso do Generics. iaaaerzd Coloque a classe no pacote br.com.caelum.ed.filas
w w cael m . com . br / apost i - j va- est r ut ur a- dados/ f i s/ #7- 5- r em over - um - al no w. u a l a a l u 10/ 13
17/ 10/ 12
pcaeb.o.alme.ia; akg rcmceu.dfls ipr jv.tlLneLs; mot aaui.ikdit ipr jv.tlLs; mot aaui.it pbi casFlPrmtiaaT { ulc ls iaaaerzd<> piaeLs<>ojts=nwLneLs<>) rvt itT beo e ikditT(; pbi vi isr( t { ulc od neeT ) ti.beo.d() hsojtsadt; } pbi Trmv( { ulc eoe) rtr ti.beo.eoe0; eun hsojtsrmv() } pbi boenvza){ ulc ola ai( rtr ti.beo.ie)= 0 eun hsojtssz( = ; } }
17/ 10/ 12
Sse.u.rnl(iaetigrmv() ytmotpitnflDSrn.eoe); } }
4. (opcional) possvel implementar a nossa Fila utilizando internamente uma A r y i tem vez de L n e L s ? Teremos algum ganho ou perda no consumo de raLs ikdit tempo de alguma das operaes? Mostre a diferena atravs de um cdigo que adiciona e remova muita gente da fila.
CAPTULO ANTERIOR:
Pilhas
PRXIMO CAPTULO:
Blog Caelum
Cursos Online
12/ 13
17/ 10/ 12
Newsletter
Casa do Cdigo
13/ 13