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

相关推荐
Mem0rin1 小时前
前缀和:一维与二维
数据结构·算法
鱼子星_1 小时前
【C++】stack和queue的应用及其模拟实现:适配器与容器适配器
数据结构·c++·笔记·stl
白狐_7981 小时前
408数据结构第6章:图——核心考点、算法对比与AOE网真题
数据结构·算法
白狐_7983 小时前
408数据结构第6章:迪杰斯特拉(Dijkstra)算法——真题精讲
数据结构·算法
皓月斯语3 小时前
P2858 [USACO06FEB] Treats for the Cows G/S
数据结构·c++·算法·动态规划
白白白小纯3 小时前
树和二叉树(1)
数据结构
旖旎夜光3 小时前
LeetCode 397:整数替换(贪心问题) —— 题解
数据结构·c++·算法·leetcode·贪心算法
bbq粉刷匠4 小时前
ArrayList 整体认识
java·jvm·数据结构
wabs6664 小时前
关于哈希表【力扣1.两数之和的思考】
数据结构·算法·leetcode·散列表·图论
Hhy_11074 小时前
【从零开始学数据结构 ⑥】:二叉树之堆——打破规则的优先队列
c语言·开发语言·数据结构·学习·visual studio