找回密码
 加入
搜索
查看: 2199|回复: 1

[AU3基础] autoit3中链表的实现

[复制链接]
发表于 2012-11-12 15:39:54 | 显示全部楼层 |阅读模式
昨天,我和几位兄台讨论,au3中如何实现以下结构体:
struct node
{
   int id;
   node * next;
};
答案请点击http://www.autoitx.com/thread-35849-2-1.html
虽然,DllStructCreate对实现这个结构体游刃有余,但是却无法用来实现链表。因为au3只提供了DllStructGetPtr,却没有提供类似于DllStructFromPtr之类的函数,以至于无法将一个指针转换为对象。我试了一个晚上还是没有成功,如果哪位知道不舍赐教。
后然我求助于AutoItObject,才得以实现列表功能

#include <AutoItObject.au3>
_AutoItObject_StartUp()

Global $head

Init()
output()
Test()
output()

Func Init()
        Local $node1 = node(1)
        $head = $node1
        Local $ptr = $head
        For $i = 2 To 12
                $new = node($i)
                $ptr.addNext($new)
                $ptr = $new
        Next
EndFunc

Func Test()
        Local $ptr = $head
        While $ptr.next <> 0
                $ptr.id = $ptr.id ^ 2
                $ptr = $Ptr.next
        WEnd
EndFunc

Func output()
        Local $ptr = $head
        While $ptr.next <> 0
                ConsoleWrite($ptr.id&@CRLF)
                $ptr = $Ptr.next
        WEnd
EndFunc

Func node($id)
        Local $oClassObj = _AutoItObject_Class()
        $oClassObj.AddProperty("next", $ELSCOPE_PUBLIC, 0)
        $oClassObj.AddProperty("id", $ELSCOPE_PUBLIC, 0)
        $oClassObj.AddMethod("addNext", "addNode")
        Local $oObj = $oClassObj.Object
        $oObj.id = $id
        Return $oObj
EndFunc

Func addNode($self, $newNode)
        $self.next = $newNode
EndFunc

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +20 收起 理由
edisonx + 20 學習了,一點心意不成敬意。

查看全部评分

 楼主| 发表于 2012-11-13 15:29:53 | 显示全部楼层

Global $nodeArray[50]

$stNode = DllStructCreate("int id;ptr next")
DllStructSetData($stNode, 1, 1)
$head = $stNode
$pre = $head

For $i = 2 To 12
        $nodeArray[$i] = DllStructCreate("int id;ptr next")
        DllStructSetData($nodeArray[$i], 1, $i)
        DllStructSetData($pre, 2, DllStructGetPtr($nodeArray[$i]))
        $pre = $nodeArray[$i]
Next

$pre = $head
While DllStructGetData($pre, 1) <> 12
        $point = DllStructGetData($pre, "next")
        $next = DllStructCreate("int id;ptr next", $point)
        $pre = $next
        ConsoleWrite(DllStructGetData($next, 1)&@CRLF)
WEnd

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-22 10:23 , Processed in 0.088755 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表