package Ġchapter 1 2 ĊĊ Ċ /* ĠĊ Ġ* ĠCreated Ġwith Ġpass ion Ġand Ġlove Ċ Ġ* ĠĠĠ Ġfor Ġproject ĠData Structures And Algorithms In Java ( La fore ) Ċ Ġ* ĠĠĠĠĠĠĠ Ġby ĠJ atz uk Ġon Ġ 1 2 . 0 5 . 2 0 1 9 Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ____ _* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*_ ***** _* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* _( O ) _( O )_ * Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ** ____ V ____ ** Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ** ________ _** Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ** ________ _** Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ________ _* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*** ___ *** Ċ Ġ*/ Ċ Ċ open Ġclass ĠHeap ( size : ĠInt ) Ġ{ ĊĠĠĠ Ġprotected Ġval Ġarray Ġ= ĠarrayOf Null s < Node >( size ) ĊĠĠĠ Ġprotected Ġopen Ġvar Ġcurrent Size Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġorder Ġ= ĠOrder . DESC ENDING ĊĊĠĠĠ Ġopen Ġfun Ġinsert ( key : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( current Size Ġ== Ġarray . size ) Ġfalse ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ current Size ] Ġ= ĠNode ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrick le Up ( current Size ++) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġtrick le Up ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġvar Ġparent Ġ= Ġ( index Ġ- Ġ 1 ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġarray [ index ] ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ> Ġ 0 Ġ&& Ġchoose Order ( order )( array [ parent ] !! , Ġbottom !! )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ index ] Ġ= Ġarray [ parent ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġparent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġ( parent Ġ- Ġ 1 ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġarray [ index ] Ġ= Ġbottom ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchoose Order ( order : ĠOrder ): Ġ( first : ĠNode , Ġsecond : ĠNode ) Ġ-> ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( order Ġ== ĠOrder . DESC ENDING ) Ġreturn Ġ{ Ġfirst , Ġsecond Ġ-> Ġfirst Ġ< Ġsecond Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ Ġfirst , Ġsecond Ġ-> Ġfirst Ġ> Ġsecond Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove (): ĠNode ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Size Ġ== Ġ 0 ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġarray [ 0 ] ĊĠĠĠĠĠĠĠ Ġarray [ 0 ] Ġ= Ġarray [ -- current Size ] ĊĠĠĠĠĠĠĠ Ġtrick le Down ( 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġtrick le Down ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġarray [ index ] ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ< Ġcurrent Size Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġ 2 Ġ* Ġindex Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġleft Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( right Ġ< Ġcurrent Size Ġ&& Ġchoose Order ( order )( array [ left ] !! , Ġarray [ right ] !! )) Ġright ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġleft ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! choose Order ( order )( top !! , Ġarray [ child ] !! )) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray [ index ] Ġ= Ġarray [ child ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġchild ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġarray [ index ] Ġ= Ġtop ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġchange ( index : ĠInt , Ġvalue : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ<= Ġ 0 Ġ|| Ġindex Ġ>= Ġcurrent Size ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval ĠoldValue Ġ= Ġarray [ index ] !!. data ĊĠĠĠĠĠĠĠ Ġarray [ index ] !!. data Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġif Ġ( oldValue Ġ< Ġvalue ) Ġtrick le Up ( index ) ĊĠĠĠĠĠĠĠ Ġelse Ġtrick le Down ( index ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisplay Heap () Ġ{ ĊĠĠĠĠĠĠĠ Ġprint ("${ this :: class . java . simple Name }: Ġ") ĊĠĠĠĠĠĠĠ Ġrepeat ( current Size ) Ġ{ Ġi Ġ-> Ġarray [ i ]?. let Ġ{ Ġprint ("${ it . data } Ġ") Ġ} Ġ?: Ġprint ("-- Ġ") Ġ} ĊĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠ Ġvar Ġbl anks Ġ= Ġ 3 2 ĊĠĠĠĠĠĠĠ Ġvar Ġitems Per Row Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġcolumn Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġdots Ġ= Ġ" ................ ...... " ĊĠĠĠĠĠĠĠ Ġprintln ("$ dots $ dots ") ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( current Size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( column Ġ== Ġ 0 ) Ġrepeat ( bl anks ) Ġ{ Ġprint (" Ġ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( array [ i ]?. data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ i Ġ== Ġcurrent Size ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ column Ġ== Ġitems Per Row ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbl anks Ġ/= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Per Row Ġ*= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġrepeat ( bl anks Ġ* Ġ 2 Ġ- Ġ 2 ) Ġ{ Ġprint (" Ġ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ("\ n $ dots $ dots ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠisEmpty () Ġ= Ġcurrent Size Ġ== Ġ 0 ĊĊĠĠĠ Ġclass ĠNode ( var Ġdata : ĠInt ) Ġ: ĠComparable < Node ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠNode ?) Ġ= Ġother ?. let Ġ{ Ġdata . compareTo ( it . data ) Ġ} Ġ?: Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠOrder Ġ{ ĠASC ENDING , ĠDESC ENDING Ġ} Ċ } Ċ