package Ġcom . horizon . task . base Ċ Ċ /** Ċ Ġ* ĠFIFO Ġqueue Ċ Ġ* Ċ Ġ* ĠWe Ġhave Ġtried Ġto Ġ[ java . util . LinkedList ], Ċ Ġ* Ġfailed Ġin Ġjava . util . LinkedList . remove ( Object Ġo ), Ċ Ġ* Ġsame Ġreason Ġwith Ġ[ Priority Queue ] Ċ Ġ*/ Ċ internal Ġclass ĠCircular Queue < E > Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġhead : ĠNode < E >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtail : ĠNode < E >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġclass ĠNode < E > Ġinternal Ġconstructor ( internal Ġvar Ġdata : ĠE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġnext : ĠNode < E >? Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġoffer ( data : ĠE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnext Ġ= ĠNode ( data ) ĊĠĠĠĠĠĠĠ Ġif Ġ( head Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhead Ġ= Ġnext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtail Ġ= Ġnext ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtail !!. next Ġ= Ġnext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtail Ġ= Ġnext ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġpoll (): ĠE ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġh : ĠNode < E > Ġ= Ġhead Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġh . data ĊĠĠĠĠĠĠĠ Ġhead Ġ= Ġh . next ĊĠĠĠĠĠĠĠ Ġif Ġ( head Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtail Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġe ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġremove ( o : ĠAny ): ĠE ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġh : ĠNode < E > Ġ= Ġhead Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( h . data Ġ== Ġo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpoll () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġprev : ĠNode < E > Ġ= Ġh ĊĠĠĠĠĠĠĠ Ġvar Ġcurr : ĠNode < E >? Ġ= Ġprev . next ĊĠĠĠĠĠĠĠ Ġwhile Ġ( curr Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( curr . data Ġ== Ġo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tail Ġ=== Ġcurr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtail Ġ= Ġprev ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev . next Ġ= Ġcurr . next ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurr . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Ġ= Ġcurr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Ġ= Ġcurr . next ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ }