You are on page 1of 18

5.

PRINTER SPOOL SCHEDULING SYSTEM (USING PRIORITY QUEUES AND LEFTIST HEAPS)
Algorith PrinterScheduling

/*To design a printer spool scheduling system using priority queues and leftist heaps*/ I!"#t$ From file O#t"#t$ Printer Spool scheduling system is designed D%t% &tr#'t#r( #&()$ Leftist Heap

ADT *$ class MyLeftTreeNode { pu lic int s!alue " #$ %o Priority$ !isited " #& static int p " #& pu lic LeftTreeNode Left'hild& pu lic LeftTreeNode (ight'hild& pu lic String %o )dentifier& interface LeftTree)mpl { *oid )nsert+String %o )d,& *oid (emo*e+String %o )d,& String (emo*eFirst+,& LeftTreeNode chec-ForS!iolation+LeftTreeNode n.,& LeftTreeNode meld+LeftTreeNode n.$ LeftTreeNode n/,& 0 0 ADT +$

class My1ueue { pu lic 1ueueField head& interface queue)mpl { oolean is2mpty+,& *oid 2nqueue+LeftTreeNode node,& LeftTreeNode 3equeue+,& *oid (emo*e(andom+String %o )d,& *oid display+,& 0 0 St(" *$ (ead the 4No5fPrinters6 St(" +$ (epeat through step 7 for i 8 . to No5fPrinters St(" ,$ 'reate a ne9 node for LeftistTree 1ueuePrint:i; St(" -$ (ead the input from the file in the follo9ing format )f )nsert$ ) <%o )d= <Printer)d= Schedule$ S <Printer)d= >nion$ ><Printer)d.=<Printer)d/= (emo*e$ (<%o )d=<Printer)d= St(" 5$ To-eni?e the string using the delimiter St(" .$ (ead the first character in the string eing to-eni?ed and assign to a *aria le 4First'har6 St(" /$ S9itch+First'har, C%&( 0I1$ /.*$ To-eni?e Printer)d$ %o )d /.+$ 1ueuePrint:i;@)nsert+)%o )d, /.,$ reaC%&( 0S1$ /.-$ To-eni?e Printer)d /.5$ 1ueuePrint:i;@(emo*eFirst+, /..$ reaC%&( 0R1$ /./$ To-eni?e %o )d$Printer)d /.2$ 1ueuePrint:i;@q@(emo*e(andom+(%o )d,

/.3$ reaC%&( 0U1$ /.*4$ To-eni?e Printer)d.$ Printer)d/ /.**$ 9hile +A1ueuePrint:i;@q@is2mpty+,, B@..@.C 1ueuePrint:i;@q@2nqueue+1ueuePrint:i;@ q@3equeue+,, /.*+$ 1ueuePrint:i;@meld+1ueuePrint:i;@(oot$ 1ueuePrint:i;@(oot, St(" 2$ (epeat through step D for i 8 . to No5fPrinters St(" 3$ 1ueuePrint:i;@q@display+, St(" *4$ 2nd Algorith )nsert+%o )d,

/* To insert the elements in the Leftist Tree*/ O#t"#t$ The elements are inserted in the Leftist tree St(" *$ 'reate anode named 4Ne9Node6 for LeftistTree St(" +$ Ne9Node@%o )dentifier 8 %o )d St(" ,$ (oot 8 Meld+(oot$ Ne9Node, St(" -$ q@2nqueue+Ne9Node, St(" 5$ (eturn Algorith (emo*e+%o )d,

/*To remo*e the elements from the Leftist Tree*/ St(" *$ if+(oot@%o )dentifier " %o )d, then (emo*eFirst+ , St(" +$ 'reate a ne9 Leftist tree node 4'urrNode6 St(" ,$ 'urrNode 8 (oot St(" -$ (epeat through Step 9hile+true, St(" 5$ if+'urrNode " null, then (eturn& St(" .$ if +'urrNode@Left'hild E null, then if +'urrNode@Left'hild@!isited E ., then if +'urrNode@Left'hild@%o )dentifier " %o )d, then ..*$ 'reate a ne9 node for LeftistTree 4n76 ..+$ n7 8 meld+'urrNode@Left'hild@Left'hild$

'urrNode@Left'hild@(ight'hild, ..,$ 'urrNode@Left'hild 8 n7 else ..-$ 'urrNode 8 'urrNode@Left'hild else if++'urrNode@(ight'hild E null, then if +'urrNode@(ight'hild@!isited E ., then if +'urrNode@(ight'hild@%o )dentifier " %o )d, then ..5$ 'reate a ne9 node for LeftistTree 4n76 ...$ n7 8 meld+'urrNode@(ight'hild@Left'hild$ 'urrNode@(ight'hild@(ight'hild, ../$ 'urrNode@(ight'hild 8 n7& else ..2$ 'urrNode 8 'urrNode@(ight'hild else if +'urrNode@!isited " #, then 'urrNode@!isited 8 . Algorith (emo*eFirst+,

/* To remo*e the minimum element from the LeftistTree*/ St(" *$ if+(oot"null, then *.*$ Print FLeftist Tree is 2mpty@ Hence cannot perform 4(emo*eMin6 *.+$ (eturn null else *.,$ !alue 8 (oot@%o )dentifier *.-$ (oot 8 Meld+(oot@Left'hild$(oot@(ight'hild,G *.5$ q@3equeue+ , *..$ (eturn !alue Algorith 'hec-ForS!iolation +LeftistTree node.,

/*To chec- 9hether the *alue of s+H, is *iolated after 4Meld6 operation@ )f yes$ change accordingly*/ St(" *$ if+node.@Left'hild " null, then if+node.@(ight'hild " null, then node.@s!alue 8 . else if+node.@Left'hild " null, then *.*$ node.@Left'hild 8 node.@(ight'hild

*.+$ node.@(ight'hild 8 null *.,$ node.@s!alue 8 . else if+node.@(ight'hild " null, then node.@s!alue 8 . else if+node.@Left'hild@s!alue < node.@(ight'hild@s!alue, then *.-$ 'reate a ne9 node 4temp6 for LeftistTree *.5$ temp 8 node.@Left'hild *..$ node.@Left'hild 8 node.@(ight'hild *./$ node.@(ight'hild 8 temp *.2$ if+node.@Left'hild@s!alue < node.@(ight'hild@s!alue, then node.@Left'hild@s!alueI". else node.@(ight'hild@s!alueI". St(" +$ (eturn node. Algorith M(l) (LeftistTree node.$LeftistTree node/,

/* To meld t9o su trees to form a single tree*/ St(" *$ if +n. " null JJ n/ " null, then (eturn null& else if +n. " null, then (eturn n/& else if +n/ " null, then (eturn n.& else if +n.@%o Priority < n/@%o Priority, then *.*$ LeftTreeNode n7 8 meld+n.@(ight'hild$ n/, *.+$ n.@(ight'hild 8 n7 *.,$ n. " chec-ForS!iolation+n., *.-$ (eturn n. else *.5$ LeftTreeNode n7 8 meld+n/@(ight'hild$ n., *..$ n/@(ight'hild 8 n7 *./$ n/ " chec-ForS!iolation+n/,& *.2$ (eturn n/ Algorith is2mpty+ ,

/*To chec- 9hether the queue is 2mpty*/

St(" *$ if +head " null, then (eturn true else (eturn false Algorith 2nqueue+LeftistTree node,

/*To insert the node into the queue in parallel 9hen it is inserted into the Leftist tree*/ St(" *$ if +head " null, then *.*$ 'reate a ne9 node for queue named 4head6@ *.+$ head@data 8 node& else *.,$ 'reate a ne9 node for queue named 4temp6 *.-$ temp 8 head *.5$ (epeat through step .@K 9hile +tempLneHt A" null, *..C temp 8 tempLneHt& St(" +$ 'reate a ne9 node for queue named 4ne9Node6 St(" ,$ ne9Node@data 8 node St(" -$ tempLneHt 8 ne9Node& St(" 5$ (eturn Algorith 3equeue+,

/*To delete the first Mo from the printer spooler*/ St(" *$ 'reate a ne9 node for LeftistTreeNode named 4temp6 St(" +$ temp 8 head@data St(" ,$ head 8 headLneHt& St(" -$ (eturn temp Algorith (emo*e(andom+%o )d,

/*To delete the Mo ar itrarily from the queue 9hich elongs to any of the printers*/ St(" *$ 'reate a ne9 node for 1ueueField named 4temp6 St(" +$ temp 8 head St(" ,$ 'reate a ne9 node for 1ueueField named 4pre*6 St(" -$ if +head@data@%o )dentifier " %o )d, then head 8 headLneHt St(" 5$ (epeat through Step N@/@/ 9hile +temp@neHt E null, then 5.*$ pre* 8 temp& 5.+$ if +Atemp@data@%o )dentifier " %o )d,

then 5.+.*$ temp 8 tempLneHt 5.+.+$ pre*LneHt 8 tempLneHt St(" .$ if +tempLneHt " null, then pre*LneHt 8 null& St(" /$ (eturn Algorith 3isplay+,

/*To display the Mo s currently presenting the queue*/ St(" *$ 'reate a ne9 node for 1ueueField named 4'urrent6 St(" +$ 'urrent 8 head& St(" ,$ if +current E null, then Print 'urrent@data@%o )dentifier else print Oqueue is emptyO St(" -$ if +current E null, St(" 5$ then (epeat through step K9hile +currentLneHt E null, St(" .$ if +current E head, then print 'urrent@data@%o )dentifier St(" /$ 'urrent 8 'urrentLneHt& St(" 2$ if +current E head, then print 'urrent@data@%o )dentifier St(" 3$ (eturn

5. PRINTER SPOOL SCHEDULING SYSTEM (USING PRIORITY QUEUES AND LEFTIST HEAPS)

N% ( Roll N# 5(r D%t( o6 A&&ig! (!t D#( )%t( 6or D( o A't#%l )%t( o6 D( o R(7i(8$ *. S#gg(&tio!& 6ro D%t( o6 R(7i(8 A'tio! t%:(! D( o )%t( F%'#lt9

C M@Latha Parthigaa C #D C ./@.#@/##D C /K@.#@/##D C #/@..@/##D

C >se Q3T in )mplementation C #D@.#@/##D C >sed )nterface in %a*a to implement Q3T J ha*e eHtended C #D@.#@/##D

PROGRAM$ /* * To change this template$ choose Tools R Templates * and open the template in the editor@ */ pac-age ne9leftist& import Ma*a@io@*& import Ma*a@util@*& class 1ueueField { pu lic LeftTreeNode data " null& pu lic 1ueueField neHt " null& 0 class My1ueue { pu lic 1ueueField head " null& interface queue)mpl { oolean is2mpty+,& *oid 2nqueue+LeftTreeNode node,& LeftTreeNode 3equeue+,& *oid (emo*e(andom+String %o )d,& *oid display+,& 0 0 class 1ueue eHtends My1ueue{ pu lic oolean is2mpty+, { if +head "" null, { return true& 0 else { return false& 0 0 pu lic *oid 2nqueue+LeftTreeNode node, { if +head "" null, { head " ne9 1ueueField+,& head@data " node& 0 else { 1ueueField temp " head& 9hile +temp@neHt A" null, { temp " temp@neHt&

0 1ueueField ne9Node " ne9 1ueueField+,& ne9Node@data " node& temp@neHt " ne9Node& 0 0 pu lic LeftTreeNode 3equeue+, { LeftTreeNode temp " head@data& head " head@neHt& return temp& 0 pu lic *oid (emo*e(andom+String %o )d, { 1ueueField temp " head& 1ueueField pre* " ne9 1ueueField+,& if +head@data@%o )dentifier@equals+%o )d,, { head " head@neHt& 0 9hile +temp@neHt A" null, { pre* " temp& if +Atemp@data@%o )dentifier@equals+%o )d,, { temp " temp@neHt& pre*@neHt " temp@neHt& 0 0 if +temp@neHt "" null, { pre*@neHt " null& 0 0 pu lic *oid display+, { 1ueueField current " head& if +current A" null, { System@out@print+O O I current@data@%o )dentifier,& 0 else { System@out@print+Oqueue is emptyO,& 0 if +current A" null, { 9hile +current@neHt A" null, { if +current A" head, { System@out@print+O O I current@data@%o )dentifier,& 0 current " current@neHt& 0 if +current A" head, { System@out@println+current@data@%o )dentifier,& 0 0

0 0 class MyLeftTreeNode { pu lic int s!alue " #$ %o Priority$ !isited " #& static int p " #& pu lic LeftTreeNode Left'hild " null& pu lic LeftTreeNode (ight'hild " null& pu lic String %o )dentifier& interface LeftTree)mpl { *oid )nsert+String %o )d,& *oid (emo*e+String %o )d,& String (emo*eFirst+,& LeftTreeNode chec-ForS!iolation+LeftTreeNode n.,& LeftTreeNode meld+LeftTreeNode n.$ LeftTreeNode n/,& 0 0 class LeftTreeNode eHtends MyLeftTreeNode{ LeftTreeNode+, { if +Left'hild "" null RR (ight'hild "" null, { s!alue " .& %o Priority " pII& 0 else { s!alue " Left'hild@s!alue < (ight'hild@s!alue S Left'hild@s!alue I . C (ight'hild@s!alue I .& 0 0 0 class LeftTree { pu lic LeftTreeNode (oot " null& 1ueue q& pu lic LeftTree+, { q " ne9 1ueue+,& 0 pu lic *oid )nsert+String %o )d, { LeftTreeNode ne9Node " ne9 LeftTreeNode+,& ne9Node@%o )dentifier " %o )d& (oot " meld+(oot$ ne9Node,& q@2nqueue+ne9Node,& 0

pu lic *oid (emo*e+String %o )d, { if +(oot@%o )dentifier@matches+%o )d,, { (emo*eFirst+,& 0 else { LeftTreeNode 'urrNode " ne9 LeftTreeNode+,& 'urrNode " this@(oot& 9hile +true, { if +'urrNode "" null, { return& 0 if +'urrNode@Left'hild A" null, { if +'urrNode@Left'hild@!isited A" ., { if +'urrNode@Left'hild@%o )dentifier@equals+%o )d,, { LeftTreeNode n7 " ne9 LeftTreeNode+,& n7 " meld+'urrNode@Left'hild@Left'hild$ 'urrNode@Left'hild@(ight'hild,& 'urrNode@Left'hild " n7& 0 else { 'urrNode " 'urrNode@Left'hild& 0 0 0 else if +'urrNode@(ight'hild A" null, { if +'urrNode@(ight'hild@!isited A" ., { if +'urrNode@(ight'hild@%o )dentifier@equals+%o )d,, { LeftTreeNode n7 " ne9 LeftTreeNode+,& n7 " meld+'urrNode@(ight'hild@Left'hild$ 'urrNode@(ight'hild@(ight'hild,& 'urrNode@(ight'hild " n7& 0 else { 'urrNode " 'urrNode@(ight'hild& 0 0 0 else if +'urrNode@!isited "" #, { 'urrNode@!isited " .& 0 0 0 0 pu lic String (emo*eFirst+, { if +(oot "" null, { System@out@println+OMin Leftist tree is empty@ Hence cannot perform a remo*eMinO,& return null& 0 else { String return!alue " (oot@%o )dentifier& (oot " meld+(oot@Left'hild$ (oot@(ight'hild,& q@3equeue+,&

return return!alue& 0 0 pu lic LeftTreeNode chec-ForS!iolation+LeftTreeNode n., { if +n.@Left'hild "" null JJ n.@(ight'hild "" null, { n.@s!alue " .& 0 else if +n.@Left'hild "" null, { n.@Left'hild " n.@(ight'hild& n.@(ight'hild " null& n.@s!alue " .& 0 else if +n.@(ight'hild "" null, { n.@s!alue " .& 0 else if +n.@Left'hild@s!alue < n.@(ight'hild@s!alue, { LeftTreeNode temp " n.@Left'hild& n.@Left'hild " n.@(ight'hild& n.@(ight'hild " temp& n.@s!alue " n.@Left'hild@s!alue < n.@(ight'hild@s!alue S n.@Left'hild@s!alue I . C n.@(ight'hild@s!alue I .& 0 else { n.@s!alue " n.@Left'hild@s!alue < n.@(ight'hild@s!alue S n.@Left'hild@s!alue I . C n.@(ight'hild@s!alue I .& 0 return n.& 0 pu lic LeftTreeNode meld+LeftTreeNode n.$ LeftTreeNode n/, { if +n. "" null JJ n/ "" null, { return null& 0 else if +n. "" null, { return n/& 0 else if +n/ "" null, { return n.& 0 else { if +n.@%o Priority < n/@%o Priority, { LeftTreeNode n7 " meld+n.@(ight'hild$ n/,& n.@(ight'hild " n7& n. " chec-ForS!iolation+n.,& return n.& 0 else { LeftTreeNode n7 " meld+n/@(ight'hild$ n.,& n/@(ight'hild " n7& n/ " chec-ForS!iolation+n/,& return n/& 0 0 0 0

class LeftistHeap3emo { pu lic static *oid main+String args:;, thro9s )52Hception { int %o Pri " #& int i$ M " #$ num er " #$ num er. " #$ num er/ " #$ num er7 " #$ num erN " #$ p " .& char:; str " ne9 char:/##;& 1ueue q " ne9 1ueue+,& 1ueue h:; " ne9 1ueue:.##;& LeftTree 1ueuePrint:; " ne9 LeftTree:.#;& File)nputStream fin& try { fin " ne9 File)nputStream+args:#;,& 0 catch +FileNotFound2Hception e, { System@out@println+OFile Not FoundO,& return& 0 catch +Qrray)ndeH5ut5fTounds2Hception e, { System@out@println+O>sageC Sho9File FileO,& return& 0 System@out@println+O2nter the num er of printers to e scheduledCO,& Tuffered(eader " ne9 Tuffered(eader+ne9 )nputStream(eader+System@in,,& String printer " @readLine+,& int No5fPrinters " )nteger@parse)nt+printer,& for +int s " .& s <" No5fPrinters& sII, { 1ueuePrint:s; " ne9 LeftTree+,& 0 do { i " fin@read+,& if +i A" U., { str:M; " +char, i& 0 MII& 0 9hile +i A" U.,& String str. " ne9 String+str,& StringTo-eni?er st " ne9 StringTo-eni?er+str.$ O$O,& 9hile +st@hasMoreTo-ens+,, { String -ey " st@neHtTo-en+,& StringTo-eni?er to-en. " ne9 StringTo-eni?er+-ey$ O O,& 9hile +to-en.@hasMoreTo-ens+,, { String -. " to-en.@neHtTo-en+,& if +-.@equals+O)O,, { String )%o )d " to-en.@neHtTo-en+,& String )Print)d " to-en.@neHtTo-en+,& StringTo-eni?er to-en7 " ne9 StringTo-eni?er+)Print)d$ OUO,& 9hile +to-en7@hasMoreTo-ens+,, { String -/ " to-en7@neHtTo-en+,& String num " to-en7@neHtTo-en+,& num er " )nteger@parse)nt+num,& 0

1ueuePrint:num er;@)nsert+)%o )d,& System@out@println+OGnGnQfter )nsertO,& for +int g " .& g <" No5fPrinters& gII, { System@out@print+OPrinter O I g I OCCCO,& 1ueuePrint:g;@q@display+,& System@out@println+,& 0 0 else if +-.@equals+OSO,, { String SPrint)d " to-en.@neHtTo-en+,& StringTo-eni?er to-enK " ne9 StringTo-eni?er+SPrint)d$ OUO,& 9hile +to-enK@hasMoreTo-ens+,, { String -N " to-enK@neHtTo-en+,& String num7 " to-enK@neHtTo-en+,& num er7 " )nteger@parse)nt+num7,& 0 1ueuePrint:num er7;@(emo*eFirst+,& System@out@println+OGnGnQfter (emo*eminO,& for +int g. " .& g. <" No5fPrinters& g.II, { System@out@print+OPrinter O I g. I OCCCO,& 1ueuePrint:g.;@q@display+,& System@out@println+,& 0 0 else if +-.@equals+O>O,, { String >Print)d. " to-en.@neHtTo-en+,& String >Print)d/ " to-en.@neHtTo-en+,& StringTo-eni?er to-enV " ne9 StringTo-eni?er+>Print)d.$ OUO,& 9hile +to-enV@hasMoreTo-ens+,, { String -7 " to-enV@neHtTo-en+,& String num. " to-enV@neHtTo-en+,& num er. " )nteger@parse)nt+num.,& 0 StringTo-eni?er to-enN " ne9 StringTo-eni?er+>Print)d/$ OUO,& 9hile +to-enN@hasMoreTo-ens+,, { String -V " to-enN@neHtTo-en+,& String num/ " to-enN@neHtTo-en+,& num er/ " )nteger@parse)nt+num/,& 0 9hile +A1ueuePrint:num er;@q@is2mpty+,, { 1ueuePrint:num er.;@q@2nqueue+1ueuePrint:num er;@q@3equeue+,,& 0 1ueuePrint:num er.;@meld+1ueuePrint:num er.;@(oot$ 1ueuePrint:num er;@(oot,& System@out@println+OGnGnQfter MeldO,& for +int g/ " .& g/ <" No5fPrinters& g/II, { System@out@print+OPrinter O I g/ I OCCCO,& 1ueuePrint:g/;@q@display+,& System@out@println+,& 0 0 else if +-.@equals+O(O,, { String (%o )d " to-en.@neHtTo-en+,&

String (Print)d " to-en.@neHtTo-en+,& StringTo-eni?er to-enN " ne9 StringTo-eni?er+(Print)d$ OUO,& 9hile +to-enN@hasMoreTo-ens+,, { String -K " to-enN@neHtTo-en+,& String numN " to-enN@neHtTo-en+,& num erN " )nteger@parse)nt+numN,& 0 1ueuePrint:num erN;@q@(emo*e(andom+(%o )d,& System@out@println+OGnGnQfter (emo*e(andomO,& for +int g7 " .& g7 <" No5fPrinters& g7II, { System@out@print+OPrinter O I g7 I OCCCO,& 1ueuePrint:g7;@q@display+,& System@out@println+,& 0 0 0 0 for +int H " .& H <" No5fPrinters& HII, { System@out@println+,& System@out@print+OPrinter O I H I OCCCO,& 1ueuePrint:H;@q@display+,& System@out@println+,& 0 fin@close+,& 0 0

TEST CASE *$ I!"#t Fro 6il($ +teHt@tHt,

) %. PU.$) %/ PU/$) %7 PU7$S PU.$> PU/ PU7$( %7 PU/$ O#t"#t$ 2nter the num er of printers to e scheduledC7 Qfter )nsert Printer .CCC %. Printer /CCCqueue is empty Printer 7CCCqueue is empty Qfter )nsert Printer .CCC %. Printer /CCC %/ Printer 7CCCqueue is empty Qfter )nsert Printer .CCC %. Printer /CCC %/ Printer 7CCC %7 Qfter (emo*emin Printer .CCCqueue is empty Printer /CCC %/ T>)L3 S>''2SSF>L +total timeC W seconds, TESTCASE +$ I!"#t Fro Fil($ (t(;t.t;t) Printer 7CCC %7 Qfter Meld Printer .CCCqueue is empty Printer /CCC %/ %7 Printer 7CCCqueue is empty Qfter (emo*e(andom Printer .CCCqueue is empty Printer /CCC %/ Printer 7CCCqueue is empty 2nd (esultC Printer .CCCqueue is empty Printer /CCC %/ Printer 7CCCqueue is empty

) %. PU.$S PU.$S PU.$ O#t"#t$ E!t(r th( !# 5(r o6 "ri!t(r& to 5( &'h()#l()$ 7 Qfter )nsert Printer .CCC %. Printer /CCCqueue is empty Printer 7CCCqueue is empty Qfter (emo*emin Printer .CCCqueue is empty Printer /CCCqueue is empty Printer 7CCCqueue is empty

Qfter (emo*emin Printer .CCC Min Leftist tree is empty@ Hence cannot perform a remo*eMin Printer /CCCqueue is empty Printer 7CCCqueue is empty 2nd (esult Printer .CCCqueue is empty Printer /CCCqueue is empty Printer 7CCCqueue is empty
<UILD SUCCESSFUL (tot%l ti ($ 3 &('o!)&) TEST CASE ,$ I!"#t Fro Fil($

) %. PU.$) %/ PU.$> PU. PU/$) %7 PU/$ O#t"#t$ 2nter the num er of printers to e scheduledC 7 Qfter )nsert Printer .CCC %. Printer /CCCqueue is empty Printer 7CCCqueue is empty Qfter )nsert Printer .CCC %. %/ Printer /CCC 'annot add %o s in faulty printer Printer 7CCC queue is empty <UILD SUCCESSFUL (tot%l ti ($ . &('o!)&)

You might also like