多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

lua教程

Lua 常用數據結構

閱讀 (2240)

Lua中的table不是一種簡單的數據結構,它可以作為其它數據結構的基礎。如數組、記錄、線性表、隊列和集合等,在Lua中都可以通過table來表示。 

一、數組

在lua中通過整數下標訪問表中的元素即可簡單的實現數組。并且數組不必事先指定大小,大小可以隨需要動態的增長。

a = {}
for i = 1,100 do
    a[i] = 0
end
print("The length of array 'a' is " .. #a)

squares = {1, 4, 9, 16, 25}
print("The length of array 'a' is " .. #squares)

在Lua中習慣上數組的下表從1開始,Lua的標準庫與此習慣保持一致,因此如果你的數組下標也是從1開始你就可以直接使用標準庫的函數,否則就無法直接使用。

二、二維數組

Lua中主要有兩種表示矩陣的方法,第一種是用數組的數組表示。也就是說一個表的元素是另一個表。

local N = 3
local M = 3
mt = {}
for i = 1,N do
    mt[i] = {}
    for j = 1,M do
        mt[i][j] = i * j
    end
end

mt = {}
for i = 1, N do
    for j = 1, M do
        mt[(i - 1) * M + j] = i * j
    end
end

三、鏈表

Lua中用tables很容易實現鏈表,每一個節點是一個table,指針是這個表的一個域,并且指向另一個節點(table)。例如,要實現一個只有兩個域:值和指針的基本鏈表,代碼如下:

list = nil
for i = 1, 10 do
    list = { next = list ,value = i}
end

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

四、隊列與雙向隊列

雖然可以使用Lua的table庫提供的insert和remove操作來實現隊列,但這種方式實現的隊列針對大數據量時效率太低,有效的方式是使用兩個索引下標,一個表示第一個元素,另一個表示最后一個元素。

List = {}

--創建
function List.new()
    return {first = 0,last = -1}
end

--隊列頭插入
function List.pushFront(list,value)
    local first = list.first - 1
    list.first = first
    list[first] = value
end

--隊列尾插入
function List.popFront(list)
    local first = list.first
    if first > list.last then
        error("List is empty")
    end

    local value = list[first]
    list[first] = nil
    list.first = first + 1
    return value
end

function List.popBack(list)
    local last = list.last
    if list.first > last then
        error("List is empty")
    end
    local value = list[last]
    list[last] = nil
    list.last = last - 1 
    return value
end

--測試代碼
local testList = {first = 0,last = -1}
local tableTest = 12

List.pushFront(testList,tableTest)
print( List.popFront(testList))

五、棧

簡單實現堆棧功能,代碼如下:

local stackMng = {}
stackMng.__index = stackMng

function stackMng:new()
    local temp = {}
    setmetatable(temp,stackMng)
    return temp
end

function stackMng:init()
    self.stackList = {}
end

function stackMng:reset()
    self:init()
end

function stackMng:clear()
    self.stackList = {}
end

function stackMng:pop()
    if #self.stackList == 0 then
        return
    end
    if self.stackList[1] then
        print(self.stackList[1])
    end

    return table.remove(self.stackList,1)
end

function stackMng:push(t)
    table.insert(self.stackList,t)
end

function stackMng:Count()
    return #self.stackList
end

--測試代碼
object = stackMng:new()
object:init()
object:push(1)
object:pop()

六、集合

在Lua中用table實現集合是非常簡單的,見如下代碼:

reserved = {
["while"] = true, ["end"] = true,
["function"] = true, ["local"] = true,
}

for k,v in pairs(reserved) do
    print(k,"->",v)
end
關閉
程序員人生
主站蜘蛛池模板: 日本欧美成人 | 日韩在线a视频免费播放 | 欧美亚洲欧美日韩中文二区 | a集毛片| 性新婚a大黄毛片 | 亚洲在线一区二区三区 | 国产成人综合手机在线播放 | 精品国产一区二区三区免费 | 国产手机在线看片 | 女女同性一区二区三区四区 | 日韩一区视频在线 | 国产大片51精品免费观看 | 精品久久成人免费第三区 | 黑人巨大三根一起进hd | 亚洲成人精品 | 在线看毛片网站 | 波多野结衣在线视频观看 | 黄色网址中文字幕 | 丁香婷婷综合五月六月 | 视频免费视频观看网站 | 欧美综合图区亚欧综合图区 | 欧美二区三区 | 欧美日韩亚洲二区在线 | 日本一道本中文字幕 | 最近最新在线中文字幕 | 伊人久久综合网站 | 国产成人a v在线影院 | 日本久久影视 | 99r8这里精品热视频免费看 | 91九色偷拍 | 精品在线观看免费 | 在线视频观看一区 | 日韩区欧美区 | 国产无卡一级毛片aaa | 桐谷茉莉在线 | 久久亚洲欧美综合激情一区 | 欧美日韩一区二区三区免费不卡 | 亚洲第一免费网站 | 午夜毛片不卡高清免费 | 日韩欧美亚洲国产一区二区三区 | 欧美洲精品亚洲精品中文字幕 |