Heap extraction and reorganization


program vanEmdeBoasPriorityQueueTester(input,output); const N = 128; type vEB = ^node; node = record level : integer; case typ : ( queue, single, array ) of queue : ( min, max : integer; top : vEB; bot : array[0..15] of vEB ); single : ( val : integer ); array : ( vals : set of 0..3 ) end; procedure insert( new : integer; var pq : vEB ); var ibot, botkey : integer; begin with pq^ do begin ibot := new div sqrtn; botkey := new mod sqrtn; if bot[ibot] <> nil then insert( botkey, bot[ibot] ) else begin bot[ibot] := NewNode( sqrtn, botkey ); insert( ibot, top ) end; if max < new then max := new; if min > new then min := new end end;

Pascal source (514.all.p)



© Addison-Wesley Publishing Co. Inc.