Lua学习之数据结构

学习了一下Lua里的数据结构,都是文档上面的例子,就是把它敲一遍而已看一下输出结果。仍然使用LuaEditor(v6.30)进行编译和运行。
1. 顺序表和多维数组
2. 链表
3. 双向链表
一.顺序表
顺序表不必多说,和一维数组是一样的。二维数组,就是元素是数组的一维数组。
上个例子:

list = {}
local i = 1
local value = io.read()
while value do
    list[i] = value
    i = i + 1
    value = io.read()
end

for j=1,#list do
    print (list[j])
end

下面看运行结果,我们可以输入数字也可以输入字符串,结束的时候,我们输入Ctrl+z结束输入。
这里写图片描述
数组大家都比较了解,就不做叙述了。
二.链表
相比于使用C语言来描述链表,用Lua来描述,会简洁很多。我们可以聊表中的每一个节点看成一个table,table 里面包含两个数据,一个是这个节点的值,另一个是指向下一个节点的“指针”。不多说了,上码:

list = nil
local v = io.read()
while v do
    list = {next = list, value = v}
    v = io.read()   
end

local l = list
while l do
    print (l.value)
    l = l.next
end

上结果:
这里写图片描述
三.双向链表
参照文档上面的例子,给双向链表定义了四个操作,分别是左插入、左删除、右插入、右删除。或者是,头插入、头删除、右插入、右删除,都是一样的。不由得想起了使用STL里的deque,list。博主是一名C++程序猿。
上码:

List = {}

function List.new ()
    return {first = 0,last = 0}
end

function List.pushleft (list , value)
    list[list.first] = value
    list.first = list.first - 1
end

function List.pushright (list , value)
    list.last = list.last + 1
    list[list.last] = value
end

function List.popleft (list)
    local first = list.first
    if first == list.last then
        print ("list is empty")
    end
    local value = list[first]
    list[first] = nil -- to allow garbage collection 
    list.first = first + 1
    return value
end

function List.popright (list)
    local last = list.last
    if list.first == last then
        print("List is empty")
    end
    local value = list[last]
    list[last] = nil -- wo allow garbage collection
    list.last = last - 1
    return value
end

function List.Print (list)
    for i = list.first + 1, list.last  do
        print (list[i])
    end
end

MyList = List.new()

List.pushleft(MyList,10)
List.pushleft(MyList,20)
List.pushleft(MyList,30)
List.Print(MyList)

List.popleft (MyList)
List.Print(MyList)

这个需要多组数据来测试,这里不一一测试了,只是简单的运行了一下,得到结果。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值