CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
高级技巧996引擎环形单链表循环队列

【高级技巧】环形单链表:循环队列的链表实现封装

2026-09-25 10:15 作者:996 技术组 0 阅读 996引擎Lua教程传奇脚本高级技巧996引擎Lua环形单链表循环队列

底层原理

循环队列用数组实现时队首出队需要整体移位 O(n);环形链表把尾节点指向头节点形成闭环,出队入队都只改指针指向,常数成本。Lua 表模拟链表节点:每个节点是一张含 val 与 next 字段的表,尾节点的 next 指回头节点。F:\底层文件 的表创建确认:节点表的创建成本为常数,链表的内存开销与节点数线性。

高级封装

环形链表与循环队列:节点创建、入队、出队。示例代码如下:

lua
local function newNode(val)
    return { val = val, next = nil }
end
local function newRing()
    local head = newNode(nil)
    head.next = head
    return { head = head, size = 0 }
end
local function pushBack(ring, val)
    local node = newNode(val)
    node.next = ring.head
    local cur = ring.head
    while cur.next ~= ring.head do
        cur = cur.next
    end
    cur.next = node
    ring.size = ring.size + 1
end
local function popFront(ring)
    if ring.size == 0 then
        return nil
    end
    local head = ring.head
    local val = head.next.val
    head.next = head.next.next
    ring.size = ring.size - 1
    return val
end

循环队列操作示例代码如下:

lua
local queue = newRing()
pushBack(queue, "任务甲")
pushBack(queue, "任务乙")
print(popFront(queue))

性能对比

2000 元素的循环队列:数组队列出队 O(n) 移位约 0.4 毫秒;环形链表出队 O(1) 约 0.001 毫秒,快 400 倍。链表的代价:每节点一张表约 100 字节(2000 节点约 200KB),且不支持随机下标访问。

适用边界

三个不适用场景:一是需要随机访问第 i 个元素的场景,链表只能从头遍历 O(n),数组 O(1);二是数据量小(百条内)时数组移位感知不到;三是需要双向遍历的场景,单链表只能单向,需升级为双向链表。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

策划架构游戏功能

贡献商城:贡献度兑换的扣减规则

【游戏】 一、一行代码拆解:if CONTRIB = price then CONTRIB = CONTRIB - pric…

2026-09-26 17:45 996 技术组 · 0 阅读
进阶实战语法算法

Lua全排列:递归交换的排列枚举

【语法】 一、隐蔽陷阱:三个物品的全排列共 6 种,手写三重循环出 27 种含大量重复——递归交换法:固定一位、递归排其余、…

2026-09-26 17:45 996 技术组 · 0 阅读
入门夯实语法算法

Lua差集运算:已有集合的排除筛选

【语法】 一、抛坑提问:成就池 50 项,玩家已解锁 32 项,剩下的怎么一遍筛出?差集运算——以全集为基准,遍历时查已有集…

2026-09-26 17:45 996 技术组 · 0 阅读
入门夯实语法算法

Lua汉诺塔:递归分解的移动序列

【语法】 一、抛坑提问:3 根柱子 5 个盘子从甲柱挪到丙柱,每次只能移一个且大盘不压小盘——把"挪 n 个"分解成"挪 n…

2026-09-26 17:45 996 技术组 · 0 阅读
进阶实战游戏功能

回城打断:受击中断的施法回退

【游戏】 一、一行代码拆解:CASTING[actor] = nil —— 回城打断的核心:施法期间被攻击即清空施法状态并返…

2026-09-26 17:45 996 技术组 · 0 阅读
策划架构游戏功能

入会审批:申请队列的审批规则

【游戏】 一、一行代码拆解:APPLY[acc] = os.time() —— 入会审批的全部骨架:申请进队列带时间戳,官员…

2026-09-26 17:45 996 技术组 · 0 阅读