Simple Stack

lua-users home
wiki

The following is a simple implementation of a stack via a Lua table. The function Stack:Create() will return a table with stack like functions such as pop and push. Multiple elements can be pushed/pop in a single call.

Example usage:

-- create stack

stack = Stack:Create()

-- push values on to the stack

stack:push("a", "b")

-- pop values

stack:pop(2)

Code:

-- Stack Table

-- Uses a table as stack, use <table>:push(value) and <table>:pop()

-- Lua 5.1 compatible



-- GLOBAL

Stack = {}



-- Create a Table with stack functions

function Stack:Create()



  -- stack table

  local t = {}

  -- entry table

  t._et = {}



  -- push a value on to the stack

  function t:push(...)

    if ... then

      local targs = {...}

      -- add values

      for _,v in ipairs(targs) do

        table.insert(self._et, v)

      end

    end

  end



  -- pop a value from the stack

  function t:pop(num)



    -- get num values from stack

    local num = num or 1



    -- return table

    local entries = {}



    -- get values into entries

    for i = 1, num do

      -- get last entry

      if #self._et ~= 0 then

        table.insert(entries, self._et[#self._et])

        -- remove last value

        table.remove(self._et)

      else

        break

      end

    end

    -- return unpacked entries

    return unpack(entries)

  end



  -- get entries

  function t:getn()

    return #self._et

  end



  -- list values

  function t:list()

    for i,v in pairs(self._et) do

      print(i, v)

    end

  end

  return t

end



-- CHILLCODEĀ™


RecentChanges · preferences
edit · history
Last edited February 11, 2014 11:15 pm GMT (diff)