# Lua Table实现经典数据结构 （链表 | 栈 | 双端队列）

+关注继续查看

## 1. 链表（list）

#!/usr/local/bin/lua

list = nil
for i = 1, 10 do
list = { ne = list, value = i } -- 头插
end

local l = list
while l do
print(l.value)
l = l.ne
end


## 2. 栈（stack）

#!/usr/local/bin/lua

local stack = {}
stack.__index = stack

function stack:new()
local obj = {}
setmetatable(obj, self)
obj.stackList = {}
return obj
end

function stack:top()
if self:size() == 0 then return nil end
return self.stackList[self:size()]
end

function stack:pop()
if #self.stackList == 0 then return end
return table.remove(self.stackList, self:size())
end

function stack:push(data)
table.insert(self.stackList, data)
end

function stack:size()
return #self.stackList
end

-- ::test:: --
local s = stack:new()
s:push(1)
s:push(2)
s:push(3)
s:push(4)
-- [[ bottom 1 2 3 4 top
while s:top() do
print(s:top())
s:pop()
end

local a = stack:new()
a:push(4)
a:push(3)
a:push(2)
a:push(1)
-- [[ bottom 4 3 2 1 top
while a:top() do
print(a:top())
a:pop()
end


## 3. 双端队列（deque）

#!/usr/local/bin/lua

function deque()
local queue = { first = 0, last = -1 }
local obj = {}
function obj.push_front(data)
local first = queue.first - 1
queue.first = first
queue[first] = data
end

function obj.pop_front()
local first = queue.first
if first > queue.last then
error("deque is empty")
end

local data = queue[first]
queue[first] = nil
queue.first = first + 1
return data
end

function obj.push_back(data)
local last = queue.last + 1
queue.last = last
queue[last] = data
end

function obj.pop_back()
local last = queue.last
if last < queue.first then
error("deque is empty")
end

local data = queue[last]
queue[last] = nil
queue.last = queue.last - 1
return data
end

function obj.size()
return queue.last - queue.first + 1
end

function obj.print()
local t = {}
for i = queue.first, queue.last do
t[#t + 1] = queue[i]
end
local s = table.concat(t, ", ")
print(s)
end

return obj
end

local deque = deque()
deque.push_front(1)
deque.push_back(2)
deque.pop_front()
deque.pop_back()


|
1月前
|

lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
22 0
|
8月前
|
C# 数据库
Lua Table转C# Dictionary
Lua Table转C# Dictionary
52 0
|
12月前
|
Java 索引
Lua语言——table(表)
Lua语言——table(表)
97 0
|
XML Java 数据格式
【Lua基础 第4章】Lua的流程控制、#的作用、table的创建方式、table表常用方法、函数、多返回值、可变长参数
Lua的流程控制、#的作用、table的创建方式、table表常用方法、函数、多返回值、可变长参数
102 0
|
XML Java 数据格式
【Lua基础 第2章】lua遍历table的方式、运算符、math库、字符串操作方法
lua遍历table的方式、运算符、math库、字符串操作方法
402 0
|

Lua 语法 Table 与模块｜学习笔记

137 0
Lua Table表实现字典
Lua Table表实现字典
613 0
|

|