007 栈(lua)

文章目录

Lua本身支持动态数组,通过表(table)实现,它类似于Java中的ArrayList。Lua的表是灵活的数组和字典的混合体。对于栈的实现,我们可以简单地使用一个表来模拟。
这里是一个简单的Lua栈实现,它包含了push、pop、peek、isEmpty和getSize方法:

lua 复制代码
local ArrayStack = {}  
ArrayStack.__index = ArrayStack  
  
function ArrayStack.new(capacity)  
    local stack = setmetatable({}, ArrayStack)  
    stack.data = {}  
    stack.capacity = capacity or 10  -- 默认容量  
    return stack  
end  
  
function ArrayStack:push(e)  
    table.insert(self.data, e)  
end  
  
function ArrayStack:pop()  
    if #self.data == 0 then  
        error("pop from empty stack")  
    end  
    return table.remove(self.data)  
end  
  
function ArrayStack:peek()  
    if #self.data == 0 then  
        error("peek from empty stack")  
    end  
    return self.data[#self.data]  
end  
  
function ArrayStack:isEmpty()  
    return #self.data == 0  
end  
  
function ArrayStack:getSize()  
    return #self.data  
end  
  
function ArrayStack:toString()  
    local res = "Stack: ["  
    for i, v in ipairs(self.data) do  
        res = res .. tostring(v) .. ", "  
    end  
    if #self.data > 0 then  
        res = res:sub(1, -3)  -- 移除最后一个逗号和空格  
    end  
    res = res .. "] top"  
    return res  
end  
  
-- 使用示例  
local stack = ArrayStack.new()  
stack:push(1)  
stack:push(2)  
print(stack:toString())  -- 输出: Stack: [1, 2] top  
print(stack:pop())  -- 输出: 2  
print(stack:toString())  -- 输出: Stack: [1] top

Lua的表是动态数组,不需要手动扩容。

Lua的错误处理通常通过抛出错误(使用error函数)并捕获错误(使用pcall或xpcall)来实现。

Lua中没有泛型类型,因此所有类型都是动态的。这意味着你可以将任何类型的值放入表中,包括其他表。

Lua的table.insert和table.remove函数用于在表的末尾添加和删除元素,这与Java中的ArrayList行为相似。

相关推荐
仰泳的熊猫8 分钟前
题目2308:蓝桥杯2019年第十届省赛真题-旋转
数据结构·c++·算法·蓝桥杯
hssfscv17 分钟前
力扣练习训练2(java)——二叉树的中序遍历、对称二叉树、二叉树的最大深度、买卖股票的最佳时机
java·数据结构·算法
y = xⁿ1 小时前
【LeetCodehot100】二叉树大合集 T94:二叉树的中序遍历 T104:二叉树的最大深度 T226:翻转二叉树 T101:对称二叉树
后端·算法·深度优先
不想看见4041 小时前
Search a 2D Matrix II数组--力扣101算法题解笔记
数据结构·算法
IronMurphy1 小时前
【算法二十六】108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
数据结构·算法·leetcode
jaysee-sjc2 小时前
【练习十二】Java实现年会红包雨小游戏
java·开发语言·算法·游戏·intellij-idea
im_AMBER2 小时前
Leetcode 141 最长公共前缀 | 罗马数字转整数
算法·leetcode
InfiniSynapse2 小时前
连上Snowflake就能取数:InfiniSynapse + Spider2-Snow实战企业数据分析
数据结构·图像处理·人工智能·算法·语言模型·数据挖掘·数据分析
少许极端2 小时前
算法奇妙屋(三十三)-DFS的记忆化搜索
算法·深度优先·记忆化搜索
WolfGang0073213 小时前
代码随想录算法训练营 Day13 | 二叉树 part03
数据结构·算法·leetcode