LUA Learning Note 4: 数据结构
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
--數(shù)據(jù)結(jié)構(gòu)是沒有語言之分的,只不過不同的語言實(shí)現(xiàn)起來的語法不同。
--創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)組
local arr1 = {1,2,3,4,5,6}
--遍歷數(shù)組中得每一個(gè)元素
? ?for i,v in ipairs(arr1) do
? ?print(v)
? ?end ?
?--另一種創(chuàng)建數(shù)組的方式
? ?local arr2 = {}
? ?for i=1,10 do
? ?arr2[i] = i
? ?print(arr2[i])
? ?end?
?--創(chuàng)建數(shù)組,下標(biāo)從2開始
? ?local arr2 = {[2]="hello",[3]="xiao",[4]="ta",[5]="zaojiahua"}
--使用迭代器ipairs遍歷的時(shí)候輸出為空值,因?yàn)閍rr2[1]=nil當(dāng)ipairs遇到空值的時(shí)候就返回了
? ?for i,v in ipairs(arr2) do
? ?print(i,v)
? ?end
--這個(gè)時(shí)候需要使用pairs遍歷
? ?for i,v in pairs(arr2) do
? ?print(i,v)
? ?end
--我們用到了迭代器ipairs()和pairs(),這個(gè)使用時(shí)候的區(qū)別代碼已經(jīng)有體現(xiàn)了,ipairs中得i代表的就是整數(shù)下標(biāo),從1開始。
?------------------------------------------------------------------------------------------------------------------
--創(chuàng)建一個(gè)10*5的二維數(shù)組
local int_arr = {} ?
?for i=1,10 do
? ? int_arr[i] = {}
? ? for j=1,5 do
? ? int_arr[i][j] = j
? ? end
end?
?--遍歷二維數(shù)組
for i,v in ipairs(int_arr) do
? ? for j,k in ipairs(v) do
? ? ? ? io.write(k.."\t")
? ? end
? ? print("\n")
end
-------------------------------------------------------------------------------------------------------------
--鏈表的每個(gè)節(jié)點(diǎn)用一個(gè)table表示,table中的字段包括指向下一個(gè)節(jié)點(diǎn)的指針和該節(jié)點(diǎn)的數(shù)據(jù)元素,這里只是提供一個(gè)思路,其他的東西可以用的時(shí)候擴(kuò)展。?
--實(shí)現(xiàn)一個(gè)鏈表
local list = nil
--鏈表元素包含倆個(gè)字段,next代表的是指針,指向下一個(gè)鏈表元素,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
-------------------------------------------------------------------------------------------------------------
--隊(duì)列
--實(shí)現(xiàn)一個(gè)隊(duì)列 包括頭指針first和尾指針last first==last的時(shí)候代表隊(duì)列為空
local Que = {first=0,last=0} ?
?--向隊(duì)列中添加元素,last索引指向最后一個(gè)元素的下一個(gè)元素,first索引指向的是第一個(gè)元素
function Que:push(value)
? ? local last = self.last
? ? self[last] = value
? ? self.last = last+1
end
--移除元素,隊(duì)列的特點(diǎn)是先進(jìn)先出
function Que:pop()
? ? if self.first == self.last then
? ? ? ? print("隊(duì)列空")
? ? ? ? return nil
? ? end
? ? local first = self.first
? ? self.first = first+1
? ? return self[first]
end?
?--顯示隊(duì)列中得元素
function Que:showValue()
? ?for i=self.first,self.last-1 do
? ? ? ?print("value:"..self[i])
? ? end
end?
?--測(cè)試
print("隊(duì)列測(cè)試")
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())
?
?
?
轉(zhuǎn)載于:https://my.oschina.net/u/1773495/blog/394227
總結(jié)
以上是生活随笔為你收集整理的LUA Learning Note 4: 数据结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 声明式事务和编程式事务
- 下一篇: fragment的基本使用