List = List or {}
function List:InitList(length)
self.length = length
self.m_length = 0
self.table = {}
for i = 0 , length - 2 , 1 do
local list = {cur , data}
self.table[i] = list
self.table[i].cur = i + 1
end
local small_list = {cur , data}
self.table[length - 1] = small_list
self.table[length - 1].cur = 0
return true
end
function List:InitList(length)
self.length = length
self.m_length = 0
self.table = {}
for i = 0 , length - 2 , 1 do
local list = {cur , data}
self.table[i] = list
self.table[i].cur = i + 1
end
local small_list = {cur , data}
self.table[length - 1] = small_list
self.table[length - 1].cur = 0
return true
end
function List:GetSpaceNode()
local space_node = self.table[0].cur
if space_node then
self.table[0].cur = self.table[space_node].cur
return space_node
end
return -1
end
local space_node = self.table[0].cur
if space_node then
self.table[0].cur = self.table[space_node].cur
return space_node
end
return -1
end
function List:ListInsert(index , number)
local last_num = self.length - 1
if index < 1 or index > self.length then
return false
end
local space_node = self:GetSpaceNode()
self.table[space_node].data = number
for i = 1 , index - 1 do
last_num = self.table[last_num].cur
end
self.table[space_node].cur = self.table[last_num].cur
self.table[last_num].cur = space_node
self.m_length = self.m_length + 1
return true
end
local last_num = self.length - 1
if index < 1 or index > self.length then
return false
end
local space_node = self:GetSpaceNode()
self.table[space_node].data = number
for i = 1 , index - 1 do
last_num = self.table[last_num].cur
end
self.table[space_node].cur = self.table[last_num].cur
self.table[last_num].cur = space_node
self.m_length = self.m_length + 1
return true
end
function List:ListDelete(index)
if index < 1 or index > self.length then
return false
end
local lase_num = self.length - 1
for i = 1 , index - 1 do
lase_num = self.table[lase_num].cur
end
local num = self.table[lase_num].cur
self.table[lase_num].cur = self.table[num].cur
self:FreeNode(index)
self.m_length = self.m_length - 1
return true
end
if index < 1 or index > self.length then
return false
end
local lase_num = self.length - 1
for i = 1 , index - 1 do
lase_num = self.table[lase_num].cur
end
local num = self.table[lase_num].cur
self.table[lase_num].cur = self.table[num].cur
self:FreeNode(index)
self.m_length = self.m_length - 1
return true
end
function List:FreeNode(index)
self.table[0].cur = self.table[index].cur
self.table[0].cur = index
self.table[index] = {}
end
self.table[0].cur = self.table[index].cur
self.table[0].cur = index
self.table[index] = {}
end
function List:Show()
for k,v in pairs(self.table) do
if nil ~= v.data then
print("打印静态链表中的结点" , v.data)
end
end
end
for k,v in pairs(self.table) do
if nil ~= v.data then
print("打印静态链表中的结点" , v.data)
end
end
end
function List:main()
List:InitList(10)
List:ListInsert(1 ,1)
List:ListInsert(2 ,2)
List:ListInsert(3 ,3)
List:ListInsert(4, 4)
List:ListInsert(5 ,5)
List:ListInsert(6 ,6)
List:ListInsert(7 ,7)
print(List:GetSpaceNode(), "--------------查看空余结点------------")
List:Show()
end
List:InitList(10)
List:ListInsert(1 ,1)
List:ListInsert(2 ,2)
List:ListInsert(3 ,3)
List:ListInsert(4, 4)
List:ListInsert(5 ,5)
List:ListInsert(6 ,6)
List:ListInsert(7 ,7)
print(List:GetSpaceNode(), "--------------查看空余结点------------")
List:Show()
end
List:main()