lua中的table不是一種簡單的數(shù)據(jù)結(jié)構(gòu),它可以作為其他數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ),如:數(shù)組,記錄,鏈表,隊(duì)列等都可以用它來表示。
1、數(shù)組
在lua中,table的索引可以有很多種表示方式。如果用整數(shù)來表示table的索引,即可用table來實(shí)現(xiàn)數(shù)組,在lua中索引通常都會從1開始。
for i=1, n do
for j=1, m do
if(j~=m) then io.write(arr[i][j].." ")
else print(arr[i][j])
end
end
end
2、鏈表
在lua中,由于table是動態(tài)的實(shí)體,所以用來表示鏈表是很方便的,其中每個節(jié)點(diǎn)都用table來表示。
local l = list
while l do
print(l.value)
l = l.next
end
3、隊(duì)列與雙端隊(duì)列
在lua中實(shí)現(xiàn)隊(duì)列的簡單方法是調(diào)用table中insert和remove函數(shù),但是如果數(shù)據(jù)量較大的話,效率還是很慢的,下面是手動實(shí)現(xiàn),效率快許多。
function List.new()
return {first=0, last=-1}
end
function List.pushFront(list,value)
list.first=list.first-1
list[ list.first ]=value
end
function List.pushBack(list,value)
list.last=list.last+1
list[ list.last ]=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 lastlist.first then error("List is empty!")
end
local value =list[last]
list[last]=nil
list.last=last-1
return value
end
lp=List.new()
List.pushFront(lp,1)
List.pushFront(lp,2)
List.pushBack(lp,-1)
List.pushBack(lp,-2)
x=List.popFront(lp)
print(x)
x=List.popBack(lp)
print(x)
x=List.popFront(lp)
print(x)
x=List.popBack(lp)
print(x)
x=List.popBack(lp)
print(x)
--輸出結(jié)果
-- 2
-- -2
-- 1
-- -1
-- lua:... List is empty!
4、集合和包
在Lua中用table實(shí)現(xiàn)集合是非常簡單的,見如下代碼:
在Lua中我們可以將包(Bag)看成MultiSet,與普通集合不同的是該容器中允許key相同的元素在容器中多次出現(xiàn)。下面的代碼通過為table中的元素添加計數(shù)器的方式來模擬實(shí)現(xiàn)該數(shù)據(jù)結(jié)構(gòu),如:
function remove(Bag,element)
local count=Bag[element]
if count >0 then Bag[element]=count-1
else Bag[element]=nil
end
end
5、StringBuild
如果在lua中將一系列字符串連接成大字符串的話,有下面的方法:
低效率:
高效率:
for line in io.lines() do
if(line==nil) then break end
t[#t+1]=line
end
local s=table.concat(t,"\n") --將table t 中的字符串連接起來
標(biāo)簽:武漢 延邊 新余 張掖 宜賓 黑龍江 嘉峪關(guān) 江西
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua中使用table實(shí)現(xiàn)的其它5種數(shù)據(jù)結(jié)構(gòu)》,本文關(guān)鍵詞 Lua,中,使用,table,實(shí)現(xiàn),的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。