Стек.

May 08, 2015 22:13



dim STP 'Массив вершин пула стеков
dim INV 'Инвертированный массив имя-индекс'
dim STACKS 'Пул именованных стеков

' Проверяет существует ли стек с таким именем.
func StackExists(stackname)
if INV(stackname)=0 then
StackExists=false
else
StackExists=true
end if
end func

' GetStacksCount - выдает число стеков в пуле

func GetStacksCount()
GetStacksCount = LEN(INV)
end func

func strindex(stackname)
strindex=STR(INV(stackname))+":"+STR(STP(stackname))
end func

'CreateStack - создает новый стек с именем stackname

sub CreateStack(stackname)
if not StackExists(stackname) then
STP(stackname)=0
INV(stackname)=GetStacksCount
else
? "Стек с именем",stackname,"уже существует"
end if
end sub

'IsEmpty - проверяет стек на пустоту.

func IsEmpty(stackname)
if not StackExists(stackname) then exit
if STP(stackname)=0 then
IsEmpty = true
else
IsEmpty = false
end if
end func

' Помещает value на вершину стека.

sub Push(stackname,value)
if not StackExists(stackname) then exit
STP(stackname)=STP(stackname)+1
STACKS(strindex(stackname))=value
end sub

'StackTop - просматривает значение вершины стека

func StackTop(stackname)
if not StackExists(stackname) then exit
if IsEmpty(stackname) then
? "Попытка просмотра пустого стека", stackname
StackTop = "error"
else
StackTop = STACKS(strindex(stackname))
end if
end func

' Pop - извлекает вершину стека

func Pop(stackname)
if not StackExists(stackname) then exit
if IsEmpty(stackname) then
? "Выборка из пустого стека", stackname
Pop = "error"
else
Pop = StackTop(stackname)
STP(stackname)=STP(stackname)-1
end if
end func

' Примеры.

CreateStack "first"
Push "first", 11
Push "first", 22
Push "first", 33
? STP("first"), INV("first")
? StackTop("first")
? Pop("first")
? StackTop("first")
CreateStack "two"
Push "two", "xxx"
Push "two", "yyy"
Push "two", "zzz"
Push "two", "www"
? STP("two"), INV("two")
? StackTop("two")
? Pop("two")
? StackTop("two")
CreateStack "first"
? StackTop("first")
Push "lll", "nostacks"
? StackTop("lll")

sblib

Previous post Next post
Up