简单栈

lua-users home
wiki

以下是使用 Lua 表实现简单栈的示例。函数 Stack:Create() 将返回一个包含栈函数(如 poppush)的表。可以在一次调用中推送/弹出多个元素。

示例用法

-- create stack
stack = Stack:Create()
-- push values on to the stack
stack:push("a", "b")
-- pop values
stack:pop(2)

代码

-- 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�


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2014 年 2 月 12 日凌晨 12:15 GMT (差异)