Lua编程(三) 稀疏表、双端队列、格式化输出、表和循环表的格式化输出

a={}
for i=1,10 do
	a[i]={}
	for j=0,10 do
		if(i%2==0) then
			a[i][j]=0
		end
	end
end

print(a[9][10])
print(a[10][10])
print()

--双端队列

List={}

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

function List.pushleft(list,value)
	local first= list.first-1
	list[first] = value
	list.first= first
end

function List.pushright(list,value)
	local last = list.last+1
	list[last]= value
	list.last=last
end

function List.popleft(list)
	local first=list.first
	if(first>list.last) then
		error("list is empty")
	end
	local res= list[first]
	list[first]=nil
	list.first=list.first+1
	return res
end

function List.popright(list)
	local last = list.last
	if last<first then
		error("the list is empty")
	end
	local res = list[last]
	list[last]= nil
	list.last= list.last-1
	return res
end

function List.display(list)
	if(list.first>list.last) then
		error("the list is empty",2)
	end
	for i=list.first ,list.last do
		print(list[i])
	end
end

mylist=List.new()
List.pushleft(mylist,12)
List.pushleft(mylist,"00")
List.pushright(mylist,34)
List.pushright(mylist,56)
List.display(mylist)
print()

function newStack ()
  return {""}
end


function serialize(o)
	if type(o) == "number" then
		io.write(o)
	elseif type(o) == "string" then
	  --不要手动加入引号,否则会有边际效应
		io.write(string.format("%q",o))
	elseif type(o) == "table" then
		io.write("{\n")
		for i,v in pairs(o) do
			io.write("    "..i.." = ")
			serialize(v)
			io.write(",\n")
		end
		io.write("}\n")
	end
end

serialize(123)
print()
serialize("112233")
print()
tab = { a=11,haha="www" ,c=333}
serialize(tab)

function basicSerialize (o)
  if type(o) == "number" then
   return tostring(o)
  else
   return string.format("%q", o)
  end
end

function save (name, value, saved)
	saved = saved or {}    -- 参数未传入的初始化
	io.write(name, " = ")
	if type(value) == "number"  or type(value) == "string"  then
		io.write(basicSerialize(value), "\n")
	elseif type(value) == "table" then
		if saved[value] then
			io.write(saved[value], "\tcircle\n")
		else
			saved[value] = name
			io.write("{}\n")
				for k,v in pairs(value) do
					local fieldname = string.format("%s[%s]", name,
								basicSerialize(k))
					save(fieldname, v, saved)
				end
		end
	else
		error("cannot save a " .. type(value))
	end
end

a = {x=1, y=2; {3,4,5}}
a[2] = a   -- 循环表
a.z = a[1]    -- 共享子表

save('a',a)

 

运行结果:

nil
0

00
12
34
56

123
"112233"
{
    a = 11,
    c = 333,
    haha = "www",
}
a = {}
a[1] = {}
a[1][1] = 3
a[1][2] = 4
a[1][3] = 5
a[2] = a	circle
a["y"] = 2
a["x"] = 1
a["z"] = a[1]	circle


 

本篇博客出自  阿修罗道,转载请注明出处:http://blog.csdn.net/fansongy/article/details/7007371

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值