autoit3中链表的实现
昨天,我和几位兄台讨论,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
Global $nodeArray
$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
页:
[1]