【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面向对象编程的起点。

相关推荐
晚风吹长发7 小时前
初步了解Linux中的动静态库及其制作和使用
linux·运维·服务器·数据结构·c++·后端·算法
SWAGGY..7 小时前
数据结构学习篇(10)--- 二叉树基础oj练习
数据结构·学习
千谦阙听7 小时前
双链表:比单链表更高效的增删查改
数据结构·链表·visual studio
xie_pin_an8 小时前
从二叉搜索树到哈希表:四种常用数据结构的原理与实现
java·数据结构
栈与堆9 小时前
LeetCode 21 - 合并两个有序链表
java·数据结构·python·算法·leetcode·链表·rust
viqjeee9 小时前
ALSA驱动开发流程
数据结构·驱动开发·b树
XH华10 小时前
数据结构第九章:树的学习(上)
数据结构·学习
我是大咖11 小时前
二维数组与数组指针
java·数据结构·算法
爱编码的傅同学12 小时前
【今日算法】Leetcode 581.最短无序连续子数组 和 42.接雨水
数据结构·算法·leetcode
wm104313 小时前
代码随想录第四天
数据结构·链表