FB论坛上有人分享了通用链表代码,略做修改整合,并添加使用例子。
1、文件名为CommonList.bi,使用时可以将文件放在工程的modules文件夹内。然后在VFB起始模块页里添加头文件包含声明:#include Once "../modules/list.bi"
2、声明后,使用时需要在始模块页里模板添定义:使用MListTemplate来包含你需要的数据。例如如果你的链表数据是long,则声明MListTemplate(Long)。也可以使用自定义类型,声明方式一样。具体代码如下:
#include Once "../modules/CommonList.bi"
MListTemplate(Long)
Type persion
sname As ZString * 100
age As Long
End Type
MListTemplate(persion)
3、声明后就可以使用该链表了。使用时,需要用【TLIST + 数据类型】作为链表的数据类型,使用【TLISTNODE + 数据类型】来作为节点的数据类型。例如:
Dim Shared deflst As TLISTLong 'Long 型数据
Dim Shared lst As TLISTPersion '自定义Persion数据
4、链表提供了添加、插入、删除等操作,声明如下:
'添加数据
Declare Sub Add(xValue As list_type)
'根据序号插入数据
Declare Sub InsertItemIndex(iIndex As Long , xValue As list_type)
'使用节点插入数据
Declare Sub InsertItem(pItem As TLISTNODE##list_type Ptr, xValue As list_type)
'根据序号删除数据
Declare Sub DeleteItemIndex(iIndex As Long)
'使用节点删除数据
Declare Sub DeleteItem(pItem As TLISTNODE##list_type Ptr)
'全部删除
Declare Sub DeleteAll()
'根据序号设置/更新数据
Declare Sub SetValueIndex(iIndex As Long , xValue As list_type)
'使用节点设置/更新数据
Declare Sub SetValue(pItem As TLISTNODE##list_type Ptr , xValue As list_type)
'根据序号移动/交换数据
Declare Sub MoveItemIndex(iIndexFrom As Long , iIndexTo As Long)
'使用节点移动/交换数据
Declare Sub MoveItem(pItemFrom As TLISTNODE##list_type Ptr , pItemTo As TLISTNODE##list_type Ptr)
'获取第一个节点
Declare Function GetFirst() As TLISTNODE##list_type Ptr
'获取最后一个节点
Declare Function GetLast() As TLISTNODE##list_type Ptr
'获取下一个节点
Declare Function GetNext(pItem As TLISTNODE##list_type Ptr) As TLISTNODE##list_type Ptr
'获取上一个节点
Declare Function GetPrev(pItem As TLISTNODE##list_type Ptr) As TLISTNODE##list_type Ptr
'获取链表大小
Declare Function GetSize() As Long
'根据序号获取数据
Declare Function GetValueIndex(iIndex As Long) As list_type
'使用节点获取数据
Declare Function GetValue(pItem As TLISTNODE##list_type Ptr) As list_type
好了,看看具体例子吧。界面如图: