--list
--node=
--doublelist=
--生成乙個table
local function buildinitnode(value)
node =
node.prev=node
node.next=node
return node
end function remove(basenode)
basenode.next.prev=basenode.prev
basenode.prev.next=basenoe.next
basenode.prev=nil
basenode.next=nil
endfunction pop_back(dl)
if dl.header.next==dl.tail then
return nil
endlocal obj =dl.tail.prev
remove(obj)
return obj
endfunction pop_front(dl)
if dl.header.next == dl.tail then
return nil
endlocal obj=dl.header.next
remove(obj)
return obj
endfunction insert(basenode,value)
local obj=buildinitnode(value)
obj.next=basenode.next
obj.prev=basenode
basenode.next.prev=obj
basenode.next=obj
endfunction find(dl,value)
local header=dl.header
while header.next ~=dl.tail do
if header.next.value == value then
return header.next
endheader=header.next
endreturn nil
end
local function init(dl)
--當or的前面是false或nil就會返回後面的值
dl=dl or {}
sentry=buildinitnode()
dl.header=sentry
dl.tail=sentry
return dl
end--dl 鍊錶
function push_back(dl,value)
local obj=buildinitnode()
local tail=dl.tail
obj.value=value
obj.next=tail
obj.prev=tail.prev
tail.prev.next=obj
tail.prev=obj
endfunction push_front(dl,value)
local obj=buildinitnode()
local header=dl.header
obj.value=value
obj.next=header.next
obj.prev=header
header.next=obj
header.next.prev=obj
endfunction iterdoublelist(dl)
local iter=function(node,val)
if node.curr==dl.tail then
return nil
end
-- node.curr ==
local nv=node.curr.value
node.curr=node.curr.next
return nv
end
local node=
return iter,node
end--閉包實現迭代器
function iter(dl)
return function()
local returnvalue=nil
returnvalue=dl.value --返回鍊錶的資料
dl=dl.next --移動到鍊錶的下乙個節點
return returnvalue
endendfunction foreach_node(dl)
local header = dl.header.next
--輸出鍊錶
for v in iter(header) do
if(v) then
print(v)
else
break
endend
end
--函式封裝到table的成員變數
list=
用法
dl=list.init()
list.push_back(dl.6)
list.push_back(dl,3)
list.foreach_node(dl)
c實現雙向迴圈列表
linklist2.c linklist 雙向迴圈鍊錶 include include define maxsize 100 define elemtype int elemtype a maxsize int n typedef struct node dnode,dlinklist dlinkl...
線性列表 雙向列表
雙向鍊錶 在單鏈表中,每個節點所含的鏈域指向後繼節點,故從任一節點後繼很方便,但要找到 前驅及節點比較困難。public class dnode public dnode string name public dnode string name,dnode next,dnode prev packa...
STL雙向列表
input 第一行乙個整數n。第二行乙個整數x。表示第一輛自行車的編號。以下n 1行,每行3個整數x,y,z。z 0時,表示編號為x的自行車恰停放在編號為y的自行車的左邊 z 1時,表示編號為x的自行車恰停放在編號為y的自行車的右邊43 1 3 1 2 1 0 5 2 1 output 從左到右輸出...