麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > 綜合 > 正文

Lua中使用table實現的其它5種數據結構

2024-07-21 23:04:08
字體:
來源:轉載
供稿:網友

lua中的table不是一種簡單的數據結構,它可以作為其他數據結構的基礎,如:數組,記錄,鏈表,隊列等都可以用它來表示。

1、數組

在lua中,table的索引可以有很多種表示方式。如果用整數來表示table的索引,即可用table來實現數組,在lua中索引通常都會從1開始。

復制代碼 代碼如下:

--二維數組
n=10 m=10
arr={}
for i=1,n do
     arr[i]={}
   for j=1,m do
      arr[i][j]=i*j
   end
end

 

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)的實體,所以用來表示鏈表是很方便的,其中每個節(jié)點都用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

 

3、隊列與雙端隊列

在lua中實現隊列的簡單方法是調用table中insert和remove函數,但是如果數據量較大的話,效率還是很慢的,下面是手動實現,效率快許多。

復制代碼 代碼如下:

List={}

 

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 last<list.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)
--輸出結果
-- 2
-- -2
-- 1
-- -1
-- lua:... List is empty!

 

4、集合和包

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

復制代碼 代碼如下:

    reserved = { ["while"] = true, ["end"] = true, ["function"] = true, }
    if not reserved["while"] then
        --do something
    end

 

在Lua中我們可以將包(Bag)看成MultiSet,與普通集合不同的是該容器中允許key相同的元素在容器中多次出現。下面的代碼通過為table中的元素添加計數器的方式來模擬實現該數據結構,如:

 

復制代碼 代碼如下:

function insert(Bag,element)
    Bag[element]=(Bag[element] or 0)+1
end

 

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中將一系列字符串連接成大字符串的話,有下面的方法:

低效率:

復制代碼 代碼如下:

local buff=""
for line in io.lines() do
   buff=buff..line.."/n"
end

 

高效率:

復制代碼 代碼如下:

local t={}

 

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 中的字符串連接起來


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 4p嗯啊巨肉寝室调教男男视频 | 久久久久久亚洲综合影院红桃 | 欧美成人免费电影 | 一区在线视频 | 国产亚洲自拍一区 | 姑娘第四集免费看视频 | 福利在线小视频 | 欧美日韩国产成人在线 | 久草在线免费看 | 99在线在线视频免费视频观看 | 久章草在线观看 | 国产亚洲精品久久久久5区 男人天堂免费 | 在线播放视频一区二区 | 国产精品视频导航 | 91九色视频观看 | 久草手机在线观看视频 | 色综合久久久久久久粉嫩 | 渔夫荒淫艳史 | 草久在线 | 精品国产一区二区三区四区在线 | bt 自拍 另类 综合 欧美 | 色播av在线 | 一级在线观看视频 | 成人三级免费电影 | a视频在线免费观看 | 免费观看一级黄色片 | 亚州精品天堂中文字幕 | 久久久精品视频国产 | 嗯哈~不行好大h双性 | 国产一级一区二区三区 | 国产精品一区二区日韩 | 精品中文字幕视频 | 成人毛片一区 | 99亚洲伊人久久精品影院红桃 | 国产九九在线视频 | 亚洲成人伊人 | 99欧美视频 | 视频一区二区三区在线观看 | 亚洲一区二区成人 | 校花被肉干高h潮不断 | 国产欧美在线观看不卡一 |