Lua 常用数据结构

Lua中的table不是一种简单的数据结构,它可以作为其它数据结构的基础。如数组、记录、线性表、队列和集合等,在Lua中都可以通过table来表示。

一、数组

在lua中通过整数下标访问表中的元素即可简单的实现数组。并且数组不必事先指定大小,大小可以随需要动态的增长。

a = {}
for i = 1,100 do
	a[i] = 0
end
print("The length of array ‘a‘ is " .. #a)

squares = {1, 4, 9, 16, 25}
print("The length of array ‘a‘ is " .. #squares)

在Lua中习惯上数组的下表从1开始,Lua的标准库与此习惯保持一致,因此如果你的数组下标也是从1开始你就可以直接使用标准库的函数,否则就无法直接使用。

二、二维数组

Lua中主要有两种表示矩阵的方法,第一种是用数组的数组表示。也就是说一个表的元素是另一个表。

local N = 3
local M = 3
mt = {}
for i = 1,N do
	mt[i] = {}
	for j = 1,M do
		mt[i][j] = i * j
	end
end

mt = {}
for i = 1, N do
	for j = 1, M do
		mt[(i - 1) * M + j] = i * j
	end
end

三、链表

Lua中用tables很容易实现链表,每一个节点是一个table,指针是这个表的一个域,并且指向另一个节点(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

四、队列与双向队列

虽然可以使用Lua的table库提供的insert和remove操作来实现队列,但这种方式实现的队列针对大数据量时效率太低,有效的方式是使用两个索引下标,一个表示第一个元素,另一个表示最后一个元素。

List = {}

--创建
function List.new()
	return {first = 0,last = -1}
end

--队列头插入
function List.pushFront(list,value)
	local first = list.first - 1
	list.first = first
	list[first] = 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 list.first > last then
		error("List is empty")
	end
	local value = list[last]
	list[last] = nil
	list.last = last - 1
	return value
end

--测试代码
local testList = {first = 0,last = -1}
local tableTest = 12

List.pushFront(testList,tableTest)
print( List.popFront(testList))

五、栈

简单实现堆栈功能,代码如下:

local stackMng = {}
stackMng.__index = stackMng

function stackMng:new()
	local temp = {}
	setmetatable(temp,stackMng)
	return temp
end

function stackMng:init()
	self.stackList = {}
end

function stackMng:reset()
	self:init()
end

function stackMng:clear()
	self.stackList = {}
end

function stackMng:pop()
	if #self.stackList == 0 then
		return
	end
	if self.stackList[1] then
		print(self.stackList[1])
	end

	return table.remove(self.stackList,1)
end

function stackMng:push(t)
	table.insert(self.stackList,t)
end

function stackMng:Count()
	return #self.stackList
end

--测试代码
object = stackMng:new()
object:init()
object:push(1)
object:pop()

六、集合

在Lua中用table实现集合是非常简单的,见如下代码:

reserved = {
["while"] = true, ["end"] = true,
["function"] = true, ["local"] = true,
}

for k,v in pairs(reserved) do
	print(k,"->",v)
end

Lua 常用数据结构

时间: 2024-11-01 14:05:13

Lua 常用数据结构的相关文章

Lua常用的数据结构表示

1.矩阵 Lua中有两种表示矩阵的方法,一是“数组的数组”.也就是说,table的每个元素是另一个table.例如,可以使用下面代码创建一个n行m列的矩阵:mt = {}          -- create the matrixfor i=1,N do    mt = {}    -- create a new row    for j=1,M do      mt[j] = 0    endend由于Lua中table是对象,所以每一行我们必须显式地创建一个table,比起c或pascal,

Lua 之数据结构

Lua 之数据结构 数组 通过整数下标访问的table中的元素,即是数组,下标默认从1开始. 一个创建二维数组的例子: mt = {} for i = 1, 10 do mt[i] = {} for j = 1, 10 do mt[i][j] = 0 end end 链表 list = nil list = {next=list, value="world"} list = {next=list, value="hello"} local l = list whil

常用数据结构及算法C#实现

常用数据结构及算法C#实现 1.冒泡排序.选择排序.插入排序(三种简单非递归排序) 1 int[] waitSort = { 1,0, 12, 13, 14, 5, 6, 7, 8, 9, 10 }; 2 3 //冒泡排序 4 int length = waitSort.Length; 5 6 for (int i = 0; i < length; i++) 7 { 8 for (int j = i + 1; j < length; j++) 9 { 10 if (waitSort[j] &g

【转】常用数据结构及复杂度

常用数据结构及复杂度 常用数据结构的时间复杂度 Data Structure Add Find Delete GetByIndex Array (T[]) O(n) O(n) O(n) O(1) Linked list (LinkedList<T>) O(1) O(n) O(n) O(n) Resizable array list (List<T>) O(1) O(n) O(n) O(1) Stack (Stack<T>) O(1) - O(1) - Queue (Qu

Cocos2d-x 脚本语言Lua基本数据结构-表(table)

table是Lua中唯一的数据结构,其他语言所提供的数据结构,如:arrays.records.lists.queues.sets等,Lua都是通过table来实现,并且在lua中table很好的实现了这些数据结构.--摘自:<Programming in Lua> 看以下代码,可以很清晰的明白Lua中表的使用: -- Lua中的表,table Config = {hello="Hello Lua",world="World"} -- 赋值方式1,以键=

Lua 常用库函数

一.数学库 1. 随机数 math.randomseed(os.time());   -- 设置随机种子 for i=1, 100 do print(math.random(-1000,1000));   -- 随机区间 [-1000,1000], math.random(1000) 表示 [1,1000] end; 2. 最大,最小值 math.max   math.min 二.table 库 1. 插入和删除 a = {10,20,30}; print(unpack(a)); table.i

常用数据结构及复杂度

常用数据结构的时间复杂度 Data Structure Add Find Delete GetByIndex Array (T[]) O(n) O(n) O(n) O(1) Linked list (LinkedList<T>) O(1) O(n) O(n) O(n) Resizable array list (List<T>) O(1) O(n) O(n) O(1) Stack (Stack<T>) O(1) - O(1) - Queue (Queue<T>

python 常用数据结构使用

python 字典排序 http://www.cnblogs.com/kaituorensheng/archive/2012/08/07/2627386.html 函数原型 sorted(dic,value,reverse) dic为比较函数,value 为排序的对象(这里指键或键值), reverse:注明升序还是降序,True--降序,False--升序(默认) 案例 dic = {'a':3 , 'b':2 , 'c': 1} 注意 排序之后原字典没有变,顺序依旧 python 常用数据结

[ZZ]常用数据结构及复杂度

http://www.cnblogs.com/gaochundong/p/3813252.html 常用数据结构的时间复杂度 Data Structure Add Find Delete GetByIndex  Array (T[]) O(n) O(n) O(n) O(1)  Linked list (LinkedList<T>) O(1) O(n) O(n) O(n)  Resizable array list (List<T>) O(1) O(n) O(n) O(1)  Sta