读书人

毕生碰到最难的树型链表(!)

发布时间: 2013-04-02 12:35:26 作者: rapoo

高手请进,毕生碰到最难的树型链表(!!!)
本帖最后由 bcrun 于 2013-03-28 11:56:02 编辑 最近接了一个项目,保存数据时,要用到树型链表,无限层,
经过最新的收集资料,写了简单的链表,还有很多问题没有搞定



我的太至代码如下
和网上的差不多,唯有不同的时候,就是我的 pdata不是一个单纯的数字字符串,
而是一个多参数的集合体,如:Height,Width,X,Y之类的和数组变量
经我测试,自定义类型,它不能定义在类里作公共变量
我现在把它换成子类了(Pining),


'Node.cls
Option Explicit


Public pNext As Node
Public pPrev As Node
Public pdata As Pining


Private Sub Class_Initialize()

Set pdata = New Pining
Set pNext = Nothing
Set pPrev = Nothing
End Sub

Private Sub Class_Terminate()
Set pdata = Nothing
Set pNext = Nothing
Set pPrev = Nothing
End Sub






其中子类(Pining)也不是单纯的类,因为我要用数组来保存数据


'Pining.cls
Public chengpin As ChengPinType
Private kongkuai(1 To 4) As KongType
'要有4个变量,连表时要计算用的,所以一定要数组才能循环计算
Private Sub Class_Initialize()

Set chengpin = New ChengPinType
Set kongkuai(1) = New KongType
Set kongkuai(2) = New KongType
Set kongkuai(3) = New KongType
Set kongkuai(4) = New KongType

End Sub

Public Property Get kong(ByVal Index As Long) As KongType
kong = kongkuai(Index)
End Property

Public Property Let kong(ByVal Index As Long, ByRef Item As KongType)
kongkuai(Index) = Item
End Property





最后调用


    '第一个节点
Set Top = New Node
Top.pdata.chengpin.chang = 33 ' 正常
Top.pdata.kong(2).Height=22 '这行就不行了

因为访问不了内部类的数组,也不能内部类的数组定义成Public

有什么方法解决,或者不用内部内,用直接用自定义类型?
我试过了,提示过几个错误

Private Enum 和用户定义类型不能作为参数、公共过程的返回类型、公共数据成员或公共用户定义类型的字段使用。
只有定义在公共对象模块中用户定义类型能和变体类型相互转换或传递给后期绑定功能。
[解决办法]
对象赋值要用 Set
Public Property Get kong(ByVal Index As Long) As KongType
Set kong = kongkuai(Index)
End Property

Public Property Set kong(ByVal Index As Long, ByRef Item As KongType)
Set kongkuai(Index) = Item
End Property

[解决办法]
改用类和Collection。
[解决办法]
引用:
对象赋值要用 Set


Visual Basic code?1234567Public Property Get kong(ByVal Index As Long) As KongType Set kong = kongkuai(Index)End Property Public Property Set kong(ByVal Index As Long, ByRe……


顶~
[解决办法]
设计思路一开始就是错了。

树形结构,根本不管你一个节点保存多少数据,
你只要抓住一点:节点的本身ID和节点的父节点ID,就可以构造树了。

按你的描述,表结构可以这样
NodeID,ParentID,H,W,X,Y,
就OK了。

加载树的时候,可以一次性递归加载完成。也可以按层加载。

读书人网 >VB

热点推荐