84 lines
2.4 KiB
Plaintext
84 lines
2.4 KiB
Plaintext
// class definitions are global
|
|
// if there aren't defintions in a class
|
|
global countmany=0&
|
|
class obj {
|
|
x, s$
|
|
property toString$ {
|
|
value (sp=8) {
|
|
link parent x, s$ to x, s$
|
|
value$=format$("{0::-5}"+string$(" ", sp)+"{1:20}", x, s$)
|
|
}
|
|
}
|
|
remove {
|
|
countmany--
|
|
}
|
|
class:
|
|
module obj (.x, .s$) {countmany++}
|
|
}
|
|
Module PriorityQueueForGroups {
|
|
Flush ' empty current stack
|
|
Data obj(3, "Clear drains"), obj(4 ,"Feed cat"), obj( 5 , "Make tea")
|
|
Data obj( 1 ,"Solve RC tasks"), obj( 2 , "Tax return")
|
|
ObjectCount()
|
|
b=stack
|
|
while not empty
|
|
InsertPQ(b) // top of stack is b then objects follow
|
|
end while
|
|
ObjectCount()
|
|
Print "Using Peek to Examine Priority Queue"
|
|
n1=each(b)
|
|
Header()
|
|
while n1
|
|
Print @Peek$(n1)
|
|
end while
|
|
ObjectCount()
|
|
Header()
|
|
while not @isEmpty(b)
|
|
Print @Pop(b)=>tostring$
|
|
end while
|
|
ObjectCount()
|
|
// here are the subs/simple functions
|
|
// these are static parts of module
|
|
sub Header()
|
|
Print " Priority Task"
|
|
Print "========== ================"
|
|
end sub
|
|
sub ObjectCount()
|
|
Print "There are ";countmany;" objects of type obj"
|
|
end sub
|
|
sub InsertPQ(a, n)
|
|
Print "Insert:";n.tostring$(1)
|
|
if len(a)=0 then stack a {data n} : exit sub
|
|
if @comp(n, stackitem(a)) then stack a {push n} : exit sub
|
|
stack a {
|
|
push n
|
|
local t=2, b=len(a)
|
|
local m=b
|
|
while t<=b
|
|
t1=m
|
|
m=(b+t) div 2
|
|
if m=0 then m=t1 : exit
|
|
If @comp(stackitem(m),n) then t=m+1: continue
|
|
b=m-1
|
|
m=b
|
|
end while
|
|
if m>1 then shiftback m
|
|
}
|
|
end sub
|
|
function comp(a, b)
|
|
=a.x<b.x
|
|
end function
|
|
function Peek$(a as stack)
|
|
=stackitem(a)=>toString$
|
|
countmany++
|
|
end function
|
|
function IsEmpty(a)
|
|
=len(a)=0
|
|
end function
|
|
Function Pop(a)
|
|
// Group make a copy
|
|
stack a {=Group:countmany++}
|
|
end function
|
|
}
|
|
PriorityQueueForGroups
|