文章摘要
这篇文章介绍了如何使用表和指针来实现一个双端队列(Deque)的数据结构。文章首先通过循环表的共享子表示例,展示了表的引用和修改操作。接着,详细描述了双端队列的实现方法,包括`pushleft`、`pushright`、`popleft`和`popright`等基本操作。通过一系列代码示例,展示了如何在双端队列中实现双向插入和删除操作,并通过`display`函数输出队列元素。文章还提到了在操作过程中需要注意的错误提示,例如队列为空时的错误处理。整体内容简明扼要,重点突出双端队列的实现方法及其相关操作。
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
a[2]=a — 循环表
a.z=a[1] — 共享子表
save(‘a’,a)