Простая реализация стека на Lua

31 января 2017 (18:30:19)

Понадобилось тут для одной из частей проекта, написанной на языке Lua, реализовать простейший стек. Решил оставить в заметках, вдруг кому-то понадобится. Вот, что получилось:

simple_stack =
{
  content = {},
}

function simple_stack:push( item )
  table.insert( self.content, item )
end

function simple_stack:pop()
  local res = simple_stack:top()
  table.remove( self.content )
  return res
end

function simple_stack:top()
  local n = #self.content
  if n > 0 then
    return self.content[n]
  end
  return nil
end

function simple_stack:new()
  local res = {}
  setmetatable( res, { __index = self } )
  return res
end

Стек имеет методы:

  • push - помещение элемента в стек;
  • pop - удаление верхнего элемента из стека, удаляемый элемент возвращается;
  • top - доступ к верхнему элементу стека;
  • new - конструктор.

В такой стек можно помещать элементы любого типа, однако контроль за типом элементов помещаемых в стек и извлекаемых из него целиком возлагается на программиста.

Пример использования:

my_stack = simple_stack:new()

my_stack:push( 1 )
my_stack:push( 2 )
my_stack:push( 3 )

print( 'Top stack element:', my_stack:top() )

print(
  'Stack content:',
  my_stack:pop(),
  my_stack:pop(),
  my_stack:pop()
)

Результатом выполнения будет:

Top stack element:	3
Stack content:	3	2	1

Недостатком данной реализации стека является невозможность создать более одного экземпляра стека, поскольку все созданные экземпляры будут использовать единую таблицу content для сохранения элементов.

Отзовик - пишите отзывы и получайте деньги!