RosettaCodeData/Task/Stack/Phix/stack-3.phix

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)