雙向佇列的實現
阿新 • • 發佈:2018-12-11
c++中使用佇列的話有queue(單項佇列)、deque(雙向佇列),但在lua中並沒有提供給我們可直接使用的這類資料結構,不過lua中有一個近乎萬能的資料型別table,他可以實現其他語言中各種型別,今天在此先分享下雙向列表的lua實現,原理就是儲存一張表的首尾端索引,每次增刪的時候修改下,並將push進來的值以索引為key儲存起來,取值的時候再以索引為鍵取出即可,程式碼如下:
--雙向佇列實現 List = {} function List:new() local t = {first = 0, last = -1} setmetatable(t, self) self.__index = self return t end function List:pushFirst(value) local first = self.first - 1 self.first= first self[first] = value end function List:pushLast(value) local last = self.last + 1 self.last = last self[last] = value end function List:popFirst() if(self.first > self.last) then error("list is empty") end local value = self[self.first] self[self.first]= nil self.first = self.first + 1 return value end function List:popLast() if(self.first > self.last) then error("list is empty") end local value = self[self.last] self[self.last] = nil self.last = self.last - 1 return value end local list = List:new() list:pushFirst(2) list:pushFirst(3) list:pushFirst(4) list:pushLast(5) list:pushLast(6) while list.first ~= 0 do local value = list:popFirst() print(value) end
輸出如下: