【AHK v2】数据结构LinkedList实现示例

AutoHotkey v2 是一个功能强大的脚本语言,它支持面向对象的编程范式。下面是一个简单的面向对象的链表(LinkedList)实现示例,使用AutoHotkey v2编写:

复制代码
#Requires AutoHotkey v2.0
; 定义节点类
class Node {
    __New(value) {  
        this.value := value
        this.next := ""
    }
}

; 定义链表类
class LinkedList {
    ; 初始化链表
    __New() {
        this.head := ""
    }

    ; 向链表尾部添加元素
    Add(value) {
        _node := Node(value)
        if (!this.head) {
            this.head := _node
        } else {
            current := this.head
            Loop {
                if (!current.next) {
                    break
                }
                current := current.next
            }
            current.next := _node
        }
    }

    ; 根据索引获取元素
    Get(index) {
        current := this.head
        ;这里采用AHK习惯第一个元素索引为1,如果想改成0为第一个的话,可改为 idx := 0
        idx := 1
        while (current) {
            if (idx == index) {
                return current.value
            }
            idx++
            current := current.next
        }
        return -1 ; 索引无效
    }

    ; 移除元素(按值)
    Remove(value) {
        prev := ""
        current := this.head
        while (current) {
            if (current.value == value) {
                if (!prev) {
                    this.head := current.next
                } else {
                    prev.next := current.next
                }
                break
            }
            prev := current
            current := current.next
        }
    }

    ; 获取链表长度
    Length() {
        count := 0
        current := this.head
        while (current) {
            count++
            current := current.next
        }
        return count
    }

    ; 打印链表
    Print() {
        current := this.head
        while (current) {
            MsgBox "Value: " current.value
            current := current.next
        }
    }
}

; 使用示例
list := LinkedList()
list.Add(1)
list.Add(2)
list.Add(3)
list.Print()
MsgBox "原链表长度:" list.Length()
indexValue := list.Get(1) ; 获取索引为1的元素值
MsgBox  "Index 1 Value: " indexValue

list.Remove(2) ; 移除值为2的元素
list.Print()
MsgBox "新链表长度:" list.Length()

这个示例中,我们定义了两个类:NodeLinkedListNode类代表链表中的一个节点,包含一个值(value)和一个指向下一个节点的引用(next)。

LinkedList类代表整个链表,包含以下方法:

  • Add(value): 向链表尾部添加一个新节点。
  • Get(index): 根据索引获取链表中的元素。
  • Remove(value): 移除链表中第一个值为指定值的节点。
  • Length(): 获取链表的长度。
  • Print(): 打印链表中的所有元素。

在使用示例中,我们创建了一个LinkedList实例,添加了几个元素,然后展示了如何获取元素、移除元素和打印链表。这个简单的链表实现可以作为学习AutoHotkey v2面向对象编程的起点。

相关推荐
sugar__salt5 小时前
从栈队列数据结构到JS原型面向对象全解
前端·javascript·数据结构
froyoisle7 小时前
CSP-J 历年复赛 T1 及解析(2019~2025)
数据结构·c++·算法·csp-j·csp·算法竞赛·信息学
喜欢打篮球的普通人8 小时前
LLVM 后端流程与关键数据结构:从 IR 到机器码的入门笔记
java·数据结构·笔记
Misnearch8 小时前
1、数组/字符串
java·数据结构·算法
008爬虫实战录8 小时前
【数据结构】 树、二叉树、完全二叉树,先序遍历、中序遍历、后序遍历
数据结构·算法
AllData公司负责人9 小时前
大模型赋能AllData数据中台,系列升级|通过联合智谱大模型与BiSheng开源项目,建设企业大模型应用开发平台,支持知识库向量检索!
大数据·数据结构·数据库·算法·大模型·向量数据库·智谱ai
梦想的颜色10 小时前
MySQL 数据存储结构与查询执行生命周期深度解析
运维·数据结构·数据库·mysql·线程·优化
Ameilide10 小时前
数据结构 算法解释,排序、查找
数据结构
真实的菜11 小时前
Redis 从入门到精通(二):深入数据结构 —— 从 RedisObject 到 SkipList 的源码级拆解
数据结构·redis·skiplist
小欣加油13 小时前
leetcode41 缺失的第一个正数
数据结构·c++·算法·leetcode