一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Lua - Lua學習筆記之數據結構

Lua學習筆記之數據結構

2019-11-17 19:51皂莢花 Lua

這篇文章主要介紹了Lua學習筆記之數據結構,本文講解了數組、矩陣、鏈表、隊列等內容,需要的朋友可以參考下

最近研究Lua,順便寫點筆記吧!數據結構是沒有語言之分的,只不過不同的語言實現起來的語法不同,既然是Lua菜鳥,就來實現幾個常用的數據結構來練練語法吧!首先是作為數據結構基石的數組,在Lua中數組是用表來實現的,表是個強大的東西,能表示太多東西了,當表中元素的下標都是整數的時候,我們把這個表稱作數組。數組的大小不固定,可以動態的增長。

 

復制代碼代碼如下:


--創建一個簡單的數組
local arr1 = {1,2,3,4,5,6}
--遍歷數組中得每一個元素
for i,v in ipairs(arr1) do
print(v)
end

 

--另一種創建數組的方式
local arr2 = {}
for i=1,10 do
arr2[i] = i
print(arr2[i])
end

--創建數組,下標從2開始
local arr2 = {[2]="hello",[3]="xiao",[4]="ta",[5]="zaojiahua"}
--使用迭代器ipairs遍歷的時候輸出為空值,因為arr2[1]=nil當ipairs遇到空值的時候就返回了
for i,v in ipairs(arr2) do
print(i,v)
end
--這個時候需要使用pairs遍歷
for i,v in pairs(arr2) do
print(i,v)
end

 

創建數組的時候整數下標最好從1開始,因為這個值是Lua中默認開始的下標,這和其他語言的下標從零開始有點區別,如果你采用其他的數字下標開始,使用某些Lua庫的時候可能不能獲得預期的結果。然后就是遍歷數組的方式,我們用到了迭代器ipairs()和pairs(),這個使用時候的區別代碼已經有體現了,ipairs中得i代表的就是整數下標,從1開始。

有一維數組當然就有多維的,下面來創建一個二維數組,也就是矩陣,其他的類推吧。

 

復制代碼代碼如下:


--創建一個10*5的二維數組
local int_arr = {}

 

for i=1,10 do
    int_arr[i] = {}
    for j=1,5 do
        int_arr[i][j] = j
    end
end

--遍歷二維數組
for i,v in ipairs(int_arr) do
    for j,k in ipairs(v) do
        io.write(k.."\t")
    end
    print("\n")
end

 

 

Lua學習筆記之數據結構

 

接下來實現一個鏈表,鏈表的每個節點用一個table表示,table中的字段包括指向下一個節點的指針和該節點的數據元素,這里只是提供一個思路,其他的東西可以用的時候擴展。

 

復制代碼代碼如下:


--實現一個鏈表
local list = nil
--鏈表元素包含倆個字段,next代表的是指針,指向下一個鏈表元素,value代表的是該鏈表元素的值
for i=1,10 do
    list = {next = list,value = i}
end

 

--鏈表的遍歷
local l = list
while l do
    print(l.value)
    l = l.next
end

 

 

接下來實現一個比較有用的數據結構——隊列。我把隊列封裝在了一個table表中,關于隊列的操作和表示隊列頭和隊列尾的指針也封裝在了一起。當對頭等于隊尾的時候表示沒有元素,而這個隊列是可以無限增大的,并沒有隊列滿的限制,大家可以根據自己的需要進行擴展。

 

復制代碼代碼如下:


--實現一個隊列 包括頭指針first和尾指針last first==last的時候代表隊列為空
local Que = {first=0,last=0}

 

--向隊列中添加元素,last索引指向最后一個元素的下一個元素,first索引指向的是第一個元素
function Que:push(value)
    local last = self.last
    self[last] = value
    self.last = last+1
end
--移除元素,隊列的特點是先進先出
function Que:pop()
    if self.first == self.last then
        print("隊列空")
        return nil
    end
    local first = self.first
    self.first = first+1
    return self[first]
end

--顯示隊列中得元素
function Que:showValue()
    for i=self.first,self.last-1 do
        print("value:"..self[i])
    end
end

--測試
print("隊列測試")
Que:showValue()
Que:push(2)
Que:push(3)
print("push 2,3")
Que:showValue()
Que:push(3)
print("push 3")
Que:showValue()
print("pop:"..Que:pop())
Que:showValue()
print("pop:"..Que:pop())
Que:showValue()
print("push 100")
Que:push(100)
Que:showValue()
print("pop:"..Que:pop())
Que:showValue()
print("pop:"..Que:pop())
Que:showValue()
print("pop:"..Que:pop())

 

Lua學習筆記之數據結構

延伸 · 閱讀

精彩推薦
  • LuaLua中table庫函數方法介紹

    Lua中table庫函數方法介紹

    這篇文章主要介紹了Lua中table庫函數方法介紹,本文講解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以參考下 ...

    腳本之家2502020-04-17
  • LuaLua教程(二):基礎知識、類型與值介紹

    Lua教程(二):基礎知識、類型與值介紹

    這篇文章主要介紹了Lua教程(二):基礎知識、類型與值介紹,本文講解了Hello World程序、代碼規范、全局變量、類型與值等內容,需要的朋友可以參考下 ...

    腳本之家5922020-04-28
  • LuaLua中計算、執行字符串中Lua代碼的方法

    Lua中計算、執行字符串中Lua代碼的方法

    這篇文章主要介紹了Lua中計算、執行字符串中Lua代碼的方法,類似JavaScript中eval函數的功能,在Lua中也可以實現,需要的朋友可以參考下 ...

    腳本之家6322020-04-30
  • LuaLua實現__add方法重載示例

    Lua實現__add方法重載示例

    這篇文章主要介紹了Lua實現__add方法重載示例,本文直接給出實現代碼,需要的朋友可以參考下 ...

    腳本之家7452020-04-24
  • LuaLua簡介、編譯安裝教程及變量等語法介紹

    Lua簡介、編譯安裝教程及變量等語法介紹

    這篇文章主要介紹了Lua簡介、編譯安裝教程及變量等語法介紹,本文同時講解了lua注釋語法、Lua命令行方式等內容,需要的朋友可以參考下 ...

    junjie3632020-04-14
  • LuaLua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

    這篇文章主要介紹了Lua中的元方法__newindex詳解,本文講解了查詢與更新、監控賦值、通過table給另一個table賦值等內容,需要的朋友可以參考下 ...

    笨木頭8872020-04-09
  • LuaLua和C語言的交互詳解

    Lua和C語言的交互詳解

    這篇文章主要介紹了Lua和C語言的交互詳解,Lua和C語言通過棧完成交互,本文結合代碼實例詳細講解了交互的方法,需要的朋友可以參考下 ...

    果凍想3702020-04-14
  • Lua深入探究Lua中的解析表達式

    深入探究Lua中的解析表達式

    這篇文章主要介紹了深入探究Lua中的解析表達式,對于其語法部分的說明和示例都超詳細,極力推薦此文!需要的朋友可以參考下 ...

    腳本之家3542020-05-05
主站蜘蛛池模板: 午夜精品久久久久久久99蜜桃i | 为什么丈夫插我我却喜欢被打着插 | 欧美在线观看一区二区三 | 精品成人片深夜 | 国产一区二区三区在线看片 | 草莓绿巨人香蕉茄子芭乐 | 黑人巨大和日本娇小中出 | 久久re热在线视频精99 | 国产视频一区二区 | 亚洲国产精品ⅴa在线观看 亚洲国产高清一区二区三区 | 亚洲欧美日韩中文字幕久久 | 久久久久九九 | 亚洲第一网站免费视频 | 黑人巨大精品战中国美女 | 97影院秋霞国产精品 | 欧美va免费大片 | 午夜深情在线观看免费 | 久久视频这有精品63在线国产 | 国内精品视频一区二区三区 | 精品久久久久久综合网 | 色播影院性播影院私人影院 | 亚洲网站在线看 | 色先锋影音先锋 | 特黄特黄aaaa级毛片免费看 | 网站在线播放 | 小草视频免费观看在线 | 369看片网| 34看网片午夜理 | 国色天香社区视频在线观看免费完整版 | 亚洲成人第一页 | 精品久久免费视频 | 穆挂英风流艳史小说 | 国产午夜免费视频 | 60岁了天天要小伙子 | 国产中文视频 | 双性总裁(h) | 久久综合老色鬼网站 | 精品免费视在线观看 | chinese男性厕所撒尿合集 | 日韩欧美亚洲一区二区综合 | 国产激情一区二区三区四区 |