LUA Learning Note 4: 数据结构
为什么80%的码农都做不了架构师?>>>
--数据结构是没有语言之分的,只不过不同的语言实现起来的语法不同。
--创建一个简单的数组
local arr1 = {1,2,3,4,5,6}
--遍历数组中得每一个元素
for i,v in ipairs(arr1) do
print(v)
end
--另一种创建数组的方式
local arr2 = {}
for i=1,10 do
arr2[i] = i
print(arr2[i])
end
--创建数组,下标从2开始
local arr2 = {[2]="hello",[3]="xiao",[4]="ta",[5]="zaojiahua"}
--使用迭代器ipairs遍历的时候输出为空值,因为arr2[1]=nil当ipairs遇到空值的时候就返回了
for i,v in ipairs(arr2) do
print(i,v)
end
--这个时候需要使用pairs遍历
for i,v in pairs(arr2) do
print(i,v)
end
--我们用到了迭代器ipairs()和pairs(),这个使用时候的区别代码已经有体现了,ipairs中得i代表的就是整数下标,从1开始。
------------------------------------------------------------------------------------------------------------------
--创建一个10*5的二维数组
local int_arr = {}
for i=1,10 do
int_arr[i] = {}
for j=1,5 do
int_arr[i][j] = j
end
end
--遍历二维数组
for i,v in ipairs(int_arr) do
for j,k in ipairs(v) do
io.write(k.."\t")
end
print("\n")
end
-------------------------------------------------------------------------------------------------------------
--链表的每个节点用一个table表示,table中的字段包括指向下一个节点的指针和该节点的数据元素,这里只是提供一个思路,其他的东西可以用的时候扩展。
--实现一个链表
local list = nil
--链表元素包含俩个字段,next代表的是指针,指向下一个链表元素,value代表的是该链表元素的值
for i=1,10 do
list = {next = list,value = i}
end
--链表的遍历
local l = list
while l do
print(l.value)
l = l.next
end
-------------------------------------------------------------------------------------------------------------
--队列
--实现一个队列 包括头指针first和尾指针last first==last的时候代表队列为空
local Que = {first=0,last=0}
--向队列中添加元素,last索引指向最后一个元素的下一个元素,first索引指向的是第一个元素
function Que:push(value)
local last = self.last
self[last] = value
self.last = last+1
end
--移除元素,队列的特点是先进先出
function Que:pop()
if self.first == self.last then
print("队列空")
return nil
end
local first = self.first
self.first = first+1
return self[first]
end
--显示队列中得元素
function Que:showValue()
for i=self.first,self.last-1 do
print("value:"..self[i])
end
end
--测试
print("队列测试")
Que:showValue()
Que:push(2)
Que:push(3)
print("push 2,3")
Que:showValue()
Que:push(3)
print("push 3")
Que:showValue()
print("pop:"..Que:pop())
Que:showValue()
print("pop:"..Que:pop())
Que:showValue()
print("push 100")
Que:push(100)
Que:showValue()
print("pop:"..Que:pop())
Que:showValue()
print("pop:"..Que:pop())
Que:showValue()
print("pop:"..Que:pop())
转载于:https://my.oschina.net/u/1773495/blog/394227
LUA Learning Note 4: 数据结构相关推荐
- Lua虚拟机中的数据结构与栈
Lua虚拟机中的数据结构与栈 来源 https://blog.csdn.net/zry112233/article/details/80828327 由上一篇文章可知解释器分析Lua文件之后生成Pro ...
- Python 基础 - Day 5 Learning Note - 模块 之 标准库:xml (9)
xml 模块介绍 和json一样,适用于不同语言及程序的数据交换的协议.但是json用起来更简单,并有代替xml的趋势. 现在多数金融数据提供方(e.g. bloombegy)还在用xml的方式. 在 ...
- 2014/09/30 Learning Note
Vbird Linux: Vim Learning: http://linux.vbird.org/linux_basic/0310vi.php Bash Shell: http://linux.vb ...
- lua学习笔记之数据结构
使用表来实现数组,记录,列表,队列,集合 1.数组 索引从1开始,并且连续.此时可以使用#表名来表示数组长度.索引不是从1开始的不能使用# local a = {} for i = 1, 1000 d ...
- Python 基础 - Day 2 Learning Note - 序列之字符串 String
字符串(string)特点: 不可修改 独立的字符组成, 通过slice切片操作顺序访问 创建 '' or "" or str() aString = 'alex Chai' # ...
- Python 基础 - Day 2 Learning Note - 字符转编码操作
前情提要:字符编码 python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill).ASCILL有255个字符,包括英语和西欧字符,不包括中文.汉字处理靠GBK, window ...
- Spring Learning Note
1.Introduction of Spring purpose:解决企业级开发的复杂性,整合了现有技术框架 SSH:Struct2+Spring+Hibernate 旧三大框架:SSH Struts ...
- [U3D Learning Note] Unity C# Survival Guide (17) --Delegates and Events
emmmm先附上一个讲得不错的链接:Difference Between Delegates and Events in C# Delegates(代表/委托) Delegate: a variabl ...
- 【转贴】Lua 5.0 参考手册
作者: Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes Copyright © 2003 Tecgraf, PUC ...
最新文章
- MLPclassifier,MLP 多层感知器的的缩写(Multi-layer Perceptron)
- python3 aes 解密
- 哈夫曼算法证明+哈夫曼编码译码程序实现
- 2018大数据学习路线从入门到精通
- 一个简单的parser
- tar命令打包时过滤特定文件夹
- Spring MVC拦截器~~~登陆验证拦截
- 未能找到元数据文件_Flink 源码:Checkpoint 元数据详解
- 《南溪的目标检测学习笔记》——DCN(DCNv2)的学习笔记
- IplImage 封装释放
- LAMP兄弟连打造免费视频教程
- 用什么软件测试电视盒子真假,网络机顶盒哪个好?专业盒子测评告诉你哪款最值得买...
- C语言 “百鸡问题”最优解
- 逻辑思维题一:条件组合覆盖
- 爬取汽车之家所有汽车参数配置
- Laplance算子(二阶导数)
- CSMA(carrier sense multiple access)
- 如何给一小段视频添加音乐
- 买房子了~128.41平方哦`
- 名帖163 颜真卿 行书《祭侄文稿》