欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2014年09月27日 15:27:39   作者:Mr.Ant  
這篇文章主要介紹了Lua中使用table實現的其它5種數據結構,本文用table為基礎,實現了數組、鏈表、隊列、集合等數據類型,需要的朋友可以參考下

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

相關文章

  • 使用Lua編寫Nginx服務器的認證模塊的方法

    使用Lua編寫Nginx服務器的認證模塊的方法

    這篇文章主要介紹了使用Lua編寫Nginx服務器的認證模塊的方法,即諸如當今流行的社交應用接入等功能,需要的朋友可以參考下
    2015-06-06
  • Lua中的loadfile、dofile、require詳解

    Lua中的loadfile、dofile、require詳解

    這篇文章主要介紹了Lua中的loadfile、dofile、require詳解,本文分別用實例講解它的用法和特點等內容,需要的朋友可以參考下
    2014-09-09
  • Lua基礎之運算符的使用示例

    Lua基礎之運算符的使用示例

    今天小編就為大家分享一篇關于Lua基礎之運算符的使用示例,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Lua教程(十九):C調用Lua

    Lua教程(十九):C調用Lua

    這篇文章主要介紹了Lua教程(十九):C調用Lua,本文講解了C調用Lua基礎知識、table操作、調用Lua函數等內容,需要的朋友可以參考下
    2015-04-04
  • Lua中使用table.concat連接大量字符串實例

    Lua中使用table.concat連接大量字符串實例

    這篇文章主要介紹了Lua中使用table.concat連接大量字符串實例,本文是Lua處理大量字符串的一個測試文章,測試了2種方法處理大量字符串的消耗時間,需要的朋友可以參考下
    2014-09-09
  • Lua數據類型介紹

    Lua數據類型介紹

    這篇文章主要介紹了Lua數據類型介紹,本文講解了Lua中的nil(空)、boolean(布爾)、number(數字)、string(字符串)、table(表)、function(函數)、thread(線程)、userdata(自定義類型)等數據類型,需要的朋友可以參考下
    2014-12-12
  • Lua Table轉C# Dictionary的方法示例

    Lua Table轉C# Dictionary的方法示例

    這篇文章主要給大家介紹了關于Lua Table轉C# Dictionary的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03
  • Lua教程(二):C++和Lua相互傳遞數據示例

    Lua教程(二):C++和Lua相互傳遞數據示例

    這篇文章主要介紹了Lua教程(二):C++和Lua相互傳遞數據示例,本文主要講解了基本數據類型的傳遞,比如整形(int)、字符串(string)、數字(number)及bool值,需要的朋友可以參考下
    2014-09-09
  • Lua中編譯執(zhí)行代碼相關的函數詳解

    Lua中編譯執(zhí)行代碼相關的函數詳解

    這篇文章主要介紹了Lua中編譯執(zhí)行代碼相關的函數詳解的相關資料,需要的朋友可以參考下
    2015-04-04
  • 把Lua函數傳遞到C/C++中實例

    把Lua函數傳遞到C/C++中實例

    這篇文章主要介紹了把Lua函數傳遞到C/C++中實例,本文先是分析了需求,然后給出解決方法,需要的朋友可以參考下
    2014-11-11

最新評論