帮我实现一个lua版的双端队列类,使用class创建双端队列类,但不能包含996以及FGUI相关的接口
🤖 回答引擎: 热血江湖Lua |
🕒 时间: 2026-05-11 11:20:41 |
👁️ 阅读: 13
以下是一个使用 Lua 的 class 机制实现的双端队列类,不依赖 996 或 FGUI 相关接口:
```lua
-- 双端队列类
local Deque = class("Deque")
function Deque:ctor()
self._data = {} -- 存储队列元素的表
self._front = 0 -- 队首索引(指向第一个元素前一个位置)
self._rear = 0 -- 队尾索引(指向最后一个元素)
self._size = 0 -- 队列当前元素数量
end
-- 获取队列长度
function Deque:size()
return self._size
end
-- 判断队列是否为空
function Deque:isEmpty()
return self._size == 0
end
-- 清空队列
function Deque:clear()
self._data = {}
self._front = 0
self._rear = 0
self._size = 0
end
-- 在队首添加元素
function Deque:pushFront(item)
self._front = self._front - 1
self._data[self._front] = item
self._size = self._size + 1
end
-- 在队尾添加元素
function Deque:pushBack(item)
self._rear = self._rear + 1
self._data[self._rear] = item
self._size = self._size + 1
end
-- 移除并返回队首元素
function Deque:popFront()
if self:isEmpty() then
return nil
end
local item = self._data[self._front]
self._data[self._front] = nil
self._front = self._front + 1
self._size = self._size - 1
-- 如果队列已空,重置索引
if self:isEmpty() then
self._front = 0
self._rear = 0
end
return item
end
-- 移除并返回队尾元素
function Deque:popBack()
if self:isEmpty() then
return nil
end
local item = self._data[self._rear]
self._data[self._rear] = nil
self._rear = self._rear - 1
self._size = self._size - 1
-- 如果队列已空,重置索引
if self:isEmpty() then
self._front = 0
self._rear = 0
end
return item
end
-- 获取队首元素(不移除)
function Deque:front()
if self:isEmpty() then
return nil
end
return self._data[self._front]
end
-- 获取队尾元素(不移除)
function Deque:back()
if self:isEmpty() then
return nil
end
return self._data[self._rear]
end
-- 转换为数组(按队列顺序)
function Deque:toArray()
local result = {}
for i = self._front, self._rear do
table.insert(result, self._data[i])
end
return result
end
return Deque
```
使用示例:
```lua
-- 创建双端队列
local deque = Deque.new()
-- 添加元素
deque:pushBack("A") -- 队尾添加
deque:pushFront("B") -- 队首添加
-- 获取元素
print(deque:front()) -- 输出: B
print(deque:back()) -- 输出: A
-- 移除元素
print(deque:popFront()) -- 输出: B
print(deque:popBack()) -- 输出: A
-- 检查状态
print(deque:size()) -- 输出: 0
print(deque:isEmpty()) -- 输出: true
```
← 返回问答库