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

相关推荐
Herbert_hwt10 小时前
C语言零基础入门:循环控制与数据类型详解
c语言·数据结构·算法
晚风醉蝶11 小时前
1-6-插入排序-InsertionSort
java·数据结构·排序算法
Tyler_TXZ11 小时前
C++C语言之——二叉树
c语言·开发语言·数据结构·c++·二叉树
有点。11 小时前
C++二叉树二(练习题)
数据结构·c++·算法·图论
LuminousCPP11 小时前
栈和队列专题(一):LeetCode 20. 有效的括号
数据结构·经验分享·笔记·leetcode·手写栈
白狐_79814 小时前
408 数据结构|线索二叉树两题详解:先序线索化后的空链域 + 中序前驱/后继判断
c语言·数据结构·链表
疯狂打码的少年14 小时前
【数据结构】二叉排序树(BST)的定义与操作
数据结构·笔记·算法
wabs66615 小时前
关于字符串【力扣541.反转字符串II的思考】
数据结构·算法·leetcode·字符串
旖旎夜光16 小时前
LeetCode 30:串联所有单词的子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
白狐_79816 小时前
408 数据结构|完全二叉树两道典型题:第 6 层叶结点数与叶结点总数
数据结构·算法