44 lines
905 B
Plaintext
44 lines
905 B
Plaintext
sequence stacks = {}
|
|
integer freelist = 0
|
|
|
|
function new_stack()
|
|
integer res = freelist
|
|
if res!=0 then
|
|
freelist = stacks[freelist]
|
|
stacks[res] = {}
|
|
else
|
|
stacks = append(stacks,{})
|
|
res = length(stacks)
|
|
end if
|
|
return res
|
|
end function
|
|
|
|
procedure free_stack(integer sid)
|
|
stacks[sid] = freelist
|
|
freelist = sid
|
|
end procedure
|
|
|
|
procedure push(integer sid, object what)
|
|
stacks[sid] = append(stacks[sid],what)
|
|
end procedure
|
|
|
|
function pop(integer sid)
|
|
object res = stacks[sid][$]
|
|
stacks[sid] = stacks[sid][1..$-1]
|
|
return res
|
|
end function
|
|
|
|
function empty(integer sid)
|
|
return length(stacks[sid])=0
|
|
end function
|
|
|
|
integer sid = new_stack()
|
|
?empty(sid) -- 1
|
|
push(sid,5)
|
|
?empty(sid) -- 0
|
|
push(sid,6)
|
|
?pop(sid) -- 6
|
|
?pop(sid) -- 5
|
|
?empty(sid) -- 1
|
|
free_stack(sid)
|