Lua中的数据结构

1 数组:(lua习惯数组从1开始)

a={}
for i=1,1000 do
    a[i]=0
end

2 阵和多维数组

1:
mt={}//新建一个表,表元素为表
for i=1,N do
        mt[i]={}//新建一个表,里面的表元素为值
        for j=1,M do
            mt[i][j]=1
        end
end
2:
mt={}//新建一个表,表元素为值(注意起始地址是1*M+1,不再是1开始了)
for i=1,N do
    for j=1,M do
        mt[i*M+j]=0
    end
end

!:注意在表中没有被赋值的部分都是nil无效值,相当于不存在

3 链表:

每个结点代表一个table,每个table两个域:值和指针

创建
list=nil
for line in io.lines() do
    list={next=list,value=line}
end
打印
l=list
while l do
    print(l.value)
    l=l.next
end

4 队列(少量数据时可以使用table库提供的insert和remove来实现队列)

首先认识这个表:

list={first=0,last=-1,1,2,3,4}
    print(list[1]) -->1
    print(list.first)-->0//注意这里结合和record初始化方式但是访问方式独立

创建一个队列:

list={}
function list.new()
    return {start=0,end=-1}
end
function list.pushleft(list,value)
    local start=list.start-1
    list.start=start
    list[start]=value
end
function list.pushright(list,value)
    local end=list.end+1
    list.end=end
    list[end]=value
end
function list.popleft(list)
    local start=list.start
    if start>list.end then error("list is empty") end
    local value =list[start]
    list[start]=nil
    list.first=first+1000
    return value
end
function list.popright(list)
    local end=list.end
    if end<list.start then error("list is empty") end
    local value=list[end]
    list[end]=nil
    list.end=end-1000
    return value
end

使用:

newqueue=list.new()
for i=1,10 do
    list.pushright(newqueue,i)
end
for m=0,10 do
    print(newqueue[m])
end
时间: 2024-10-24 14:01:04

Lua中的数据结构的相关文章

lua中的数据结构-table常用函数库

table.concat(table, sep,  start, end) concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开.除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认值是数组部分的总长. sep, start, end这三个参数是顺序读入的, 所以虽然它们都不是必须参数,

Lua中的常用函数库汇总

lua库函数 这些函数都是Lua编程语言的一部分, 点击这里了解更多. assert(value) - 检查一个值是否为非nil, 若不是则(如果在wow.exe打开调试命令)显示对话框以及输出错误调试信息 collectgarbage() - 垃圾收集器. (新增于1.10.1) date(format, time) - 返回当前用户机器上的时间. error("error message",level) - 发生错误时,输出一条定义的错误信息.使用pcall() (见下面)捕捉错误

Lua中的线程和状态

1.概述 线程(thread)作为Lua中一种基本的数据类型,它代表独立的执行线程(independent threads of execution),线程类型是实现协程(coroutines)的基础,注意这里的线程类型不要与操作系统线程混淆,Lua的线程类型是Lua虚拟机实现一种数据类型. 从Lua脚本来看,一个协程就是一个线程类型,比如: local co = coroutine.create(function() print("hi") end) print(co) --outp

Lua中字符串类型的源码实现

    概述 Lua完全采用8位编码,Lua字符串中的字符可以具有任何数值编码,包括数值0.也就是说,可以将任意二进制数据存储到一个字符串中.Lua的字符串是不可变的值(immutable values).如果修改,实质上是新建一个字符串.根据上文<Lua中数据类型的源码实现>中知道,在Lua中,字符串是自动内存管理机制所管理的对象,并且由联合体TString来实现存储字符串值的.下面将通过Lua 5.2.1的源码来看字符串的实现以及总结了在Lua中使用字符串的注意事项.     源码实现 首

Lua中table类型的源码实现

  1.概述 table是lua中唯一的表示数据结构的工具.它可以用于实现数据容器.函数环境(Env).元表(metatable).模块(module)和注册表(registery)等其他各种用途.因此了解table的实现是非常有必要的,根据<Lua中数据类型的源码实现>中知道,在Lua中,table是由结构体体Table来实现的.下面将以Lua 5.2.1的源码来看table的实现.   2.实现原理 在Lua5.0以后,table是以一种混合型数据结构来实现的,它包含一个哈希表部分和一个数

Lua中数据类型的源码实现

    概述 在Lua中有8种基础类型:nil.boolean.number.string.userdata.function.thread和table.可以使用函数type查看某个变量或值的类型,返回相应的类型名称.像其他动态语言一样,在语言中没有类型定义的语法,每个值都携带了它自身的类型信息.下面将通过Lua 5.2.1的源码来看类型的实现.    源码实现 Lua将值表示成带标志的联合结构,代码如下(lobject.h): 90 /* 91 ** Union of all Lua valu

Program in Lua中图算法的改进(打印所有图路径)

在Program in Lua第二版,第11.7节中介绍了用lua写"图"数据结构的方法, 但书中提供的图的算法只能打印出第一条找到的正确路径,于是我就自己琢磨 着怎么用lua写出一个图算法打印出所有可能的路径,自己独自一个人思考了 很久,期间没有参考任何资料,完全靠"头脑暴力"把它解决了,最后思考了看看, 也不知道这到底是什么算法,完全凭借着自己认为的所谓的"退化"的概念,奇妙 的解决了这个问题,所以我把这个算法拿出来分享一下. (总觉得在哪本

在Lua中进行运算符重载

在C++里面运算符是可以重载的,这一点也是C++比较方便的一个地方.在Lua中其实也是可以模拟出运算符的重载的. 在Lua中table中元素的运算都是和一个叫做元表有关的,在一个table型的变量上都有一个元表,在元表中存放着该变量的 元函数,在进行运算是,就是利用元表中的这些元函数进行的,比如对两个元素进行加法操作,实际上就是调用在元表中 的一个元函数__add()来实现的.所以通过对这种情况的了解,我们可以很方便的对table元素的元表进行重新的设定, 从而实现重载运算符的目的. 并且tab

Lua语言基础汇总(10) -- Lua中的环境概念

前言 Lua将其所有的全局变量保存在一个常规的table中,这个table称为“环境”.这种组织结构的优点在于,其一,不需要再为全局变量创造一种新的数据结构,因此简化了Lua的内部实现:另一个优点是,可以像其他table一样操作这个table.为了便于实施这种操作,Lua将环境table自身保存在一个全局变量_G中.例如,我们可以使用以下代码打印当前环境中所有全局变量的名称. 1 for n in pairs(_G) do print(n) end 在你的电脑上运行一下以上代码,看看结果. 全局