lua实现list

本文介绍了一个使用Lua语言实现的简单链表数据结构。该链表包括基本操作如添加、删除元素等,并提供了插入指定位置的功能。文章通过具体函数展示了如何初始化链表节点、添加元素到链表尾部、获取指定索引处的元素、在特定位置插入新元素、追加元素到已存在的元素后以及删除指定位置的元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

require("class")
List = class()

local function InitNote(data, prev, next)
local o = {}
o.Data = data
o.Prev = prev
o.Next = next
return o
end

function List:ctor()
self.Head = InitNote(nil)
self.Head.Prev = self.Head
self.Head.Next = self.Head
self.Size = 0
end

function List:AddLast(data)
if self.Size == 0 then
self.Head = InitNote(data, nil, nil)
self.Head.Prev = self.Head
self.Head.Next = self.Head
self.Size = self.Size + 1
return
else
local p = self:GetElement(self.Size)
local q = InitNote(data, p, p.Next)
self.Head.Prev = q
p.Next = q
self.Size = self.Size + 1
end
end

function List:GetElement(index) -- 1 -- size
if (index <= 0 or index > self.Size) then
print("LinkList is empty or Position is error!")
return nil;
end

if (index == 1) then
return self.Head
end

if (index < self.Size / 2) then
local item = self.Head

for i = 1, index do
item = item.Next
end

return item
end

local p = self.Head;

local rindex = self.Size - index + 1

for i = 1, rindex do
p = p.Prev
end
return p
end

function List:Insert(index, data) --����indexǰ
if (self.Size <= 0 or index >= self.Size or index <= 0) then
print("LinkList is empty or Position is error!")
return
end

if (index == 1) then
local note = InitNote(data, self.Head.Prev, self.Head)
self.Head.Prev.Next = note
self.Head.Prev = note
self.Head = note
self.Size = self.Size + 1
else
local inode = self:GetElement(index)
local tnode = InitNote(data, inode.Prev, inode)
inode.Prev.Next = tnode
inode.Prev = tnode
self.Size = self.Size + 1
end
end

function List:Append(index, data) --����index��
if (self.Size <= 0 or index > self.Size or index <= 0) then
print("LinkList is empty or Position is error!")
return
end

local inode = self:GetElement(index)
local tnode = InitNote(data, inode, inode.Next)
inode.Next.Prev = tnode
inode.Next = tnode
self.Size = self.Size + 1
end

function List:Del(index) -- 1 -- size
if (self.Size <= 0 or index > self.Size or index <= 0) then
print("LinkList is empty or Position is error!")
return
end

if (index == 1) then
self.Head.Prev.Next = self.Head.Next
self.Head.Next.Prev = self.Head.Prev
self.Head = self.Head.Next
self.Size = self.Size - 1
return
end
local inode = self:GetElement(index)
if (inode == nil) then return end
inode.Prev.Next = inode.Next;
inode.Next.Prev = inode.Prev;
self.Size = self.Size - 1
end

function List:IsEmpty()
return self.Size == 0
end

function List:ShowAll()
    if self:IsEmpty() then
        print("LinkList is empty!")
    end
    
    local note = self.Head
    
    for i = 1, self.Size do
        print(note.Data)
        note = note.Next
    end
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值