当前位置: 首页 > news >正文

007 栈(lua)

文章目录

Lua本身支持动态数组,通过表(table)实现,它类似于Java中的ArrayList。Lua的表是灵活的数组和字典的混合体。对于栈的实现,我们可以简单地使用一个表来模拟。

这里是一个简单的Lua栈实现,它包含了push、pop、peek、isEmpty和getSize方法:


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行为相似。

http://www.lryc.cn/news/388723.html

相关文章:

  • SQL中Order by详解
  • 【git】存在git LFS文件时如何处理
  • 面向阿克曼移动机器人(自行车模型)的LQR(最优二次型调节器)路径跟踪方法
  • 【运维】在 Docker 容器中指定 UTF-8 编码:方法与技巧
  • primetime中cell和net的OCV
  • FlinkX学习
  • 新书速览|解密AI绘画与修图: Stable Diffusion+Photoshop
  • 1111111111111
  • 云原生概念
  • NoSQL之Redis高可用与优化
  • MySQL 常见存储引擎详解(一)
  • Leetcode 股票买卖
  • 小白学习手册:轻松理解MQ消息队列
  • electron线上更新
  • 谈谈检测浏览器类型
  • Django 和 Django REST framework 创建对外 API
  • 数据结构之“刷链表题”
  • 复分析——第9章——椭圆函数导论(E.M. Stein R. Shakarchi)
  • 使用kubeadm安装k8s并部署应用
  • springMVC学习
  • 深入探讨光刻技术:半导体制造的关键工艺
  • CesiumJS【Basic】- #042 绘制纹理线(Primitive方式)
  • 代码随想录第38天|动态规划
  • java生成excel,uniapp微信小程序接收excel并打开
  • sam_out 目标检测的应用
  • VLAN原理与配置
  • 使用Spring Boot实现RESTful API
  • 中英双语介绍美国常春藤联盟( Ivy League):八所高校
  • 【计算机网络】常见的网络通信协议
  • java实现http/https请求