循环链表以及相关操作(VB实现) 首先建立一个工程,然后增加一个类并且命名为(node,cls), 在node.cls中加入以下代码. Option Explicit Public x As Long Public count As Long Public nextnode As node 在Form1.frm中加入以下代码。 Option Explicit  Dim head As node  Dim pointer As node  Dim newnode As node  Dim n As node Dim counts As Long Dim temp As node Private Sub createlist_Click()  Dim n As node  Dim i As Long  counts = 0  Set head = New node                                            '可选的。通常在声明时使用 New,以便可以隐式创建对象。如果 New 与 Set 一起使用,则将创建该类的一个新实例。如果 objectvar 包含了一个对象引用,则在赋新值时释放该引用   head.x = 8   Set head.nextnode = Nothing   counts = counts + 1   head.count = counts   Set pointer = head   For i = 1 To 15   Set newnode = New node    newnode.x = i    counts = counts + 1    newnode.count = counts    Set newnode.nextnode = Nothing    Set pointer.nextnode = newnode    Set pointer = newnode   Next i  Set pointer.nextnode = head  Set pointer = head   Do         Print pointer.x         Set pointer = pointer.nextnode         If ObjPtr(pointer) = ObjPtr(head) Then                 'objptr返回对象的地址              Exit Sub                                          'strptr返回变长字符串的字符串数据地址         End If                                                 'varptr返回变量的地址         DoEvents                                               '用与获取变量地址,是函数。  Loop While Not pointer Is Nothing End Sub Private Sub delete_Click()   Dim a As Long   Dim b As Long   a = CLng(InputBox("输入要删除的一个数据", "输入数据"))   b = CLng(InputBox("输入该数据的位置", "位置"))    Set pointer = head   If b = 1 Then      Do       Set pointer = pointer.nextnode        If ObjPtr(pointer.nextnode) = ObjPtr(head) Then              Set pointer.nextnode = head.nextnode              Set head = Nothing              Set head = pointer.nextnode             Exit Do        End If       DoEvents      Loop While Not pointer Is Nothing      counts = 1     Set pointer = head     pointer.count = counts     Do         counts = counts + 1         Set pointer = pointer.nextnode         pointer.count = counts       If ObjPtr(pointer.nextnode) = ObjPtr(head) Then              Exit Do       End If       DoEvents      Loop While Not pointer Is Nothing Else       While pointer.count <> b           Set n = New node            Set n = pointer            Set pointer = pointer.nextnode           DoEvents       Wend       Set n.nextnode = pointer.nextnode       Set pointer = Nothing       Set pointer = n    End If      counts = 0    Set pointer = head       counts = counts + 1       pointer.count = counts     Do     counts = counts + 1     Set pointer = pointer.nextnode     pointer.count = counts       If ObjPtr(pointer.nextnode) = ObjPtr(head) Then              Exit Do       End If       DoEvents      Loop While Not pointer Is Nothing End Sub Private Sub insert_Click()   Dim a As Long   Dim b As Long   a = CLng(InputBox("输入要插入的一个数据", "输入数据"))   b = CLng(InputBox("输入该数据的位置", "位置"))   Set pointer = head   If b = 1 Then   head.x = a   Else   While pointer.count <> b   Set pointer = pointer.nextnode     DoEvents   Wend   pointer.x = a   End If End Sub 
Private Sub insert2_Click()   Dim a As Long   Dim b As Long   a = CLng(InputBox("输入要删除的一个数据", "输入数据"))   b = CLng(InputBox("输入该数据的位置", "位置"))   Set pointer = head   If b = 1 Then    Set n = New node    n.x = a    Set n.nextnode = Nothing    Do     Set pointer = pointer.nextnode     If ObjPtr(pointer.nextnode) = ObjPtr(head) Then          Set pointer.nextnode = n          Set n.nextnode = head          Set head = n          Exit Do     End If     Loop While Not pointer Is Nothing     Set pointer = head     counts = 1     pointer.count = 1     Do      counts = counts + 1      Set pointer = pointer.nextnode      pointer.count = counts      If ObjPtr(pointer.nextnode) = ObjPtr(head) Then              Exit Do      End If      Loop While Not pointer Is Nothing    Else    Set n = New node        n.x = a      Set n.nextnode = Nothing     While pointer.count <> b        Set temp = New node        Set temp = pointer        Set pointer = pointer.nextnode        DoEvents      Wend      Set n.nextnode = pointer      Set temp.nextnode = n      Set pointer = n      Set pointer = head      counts = 1      pointer.count = counts      Do       counts = counts + 1      Set pointer = pointer.nextnode       pointer.count = counts       If ObjPtr(pointer.nextnode) = ObjPtr(head) Then                 Exit Do       End If      Loop While Not pointer Is Nothing    End If End Sub 
Private Sub konglianbiao_Click() Set pointer = head Do     Set pointer = pointer.nextnode     If ObjPtr(pointer.nextnode) = ObjPtr(head) Then                Set pointer.nextnode = Nothing                Set n = New node                Set n = pointer     End If    DoEvents Loop While Not pointer.nextnode Is Nothing  Do    Set pointer = head    Set head = head.nextnode   Set pointer = Nothing     If ObjPtr(head) = ObjPtr(n) Then            Set head = Nothing            Set n = Nothing     End If     DoEvents Loop While Not head Is Nothing Form1.Cls End Sub Private Sub leave_Click() End End Sub Private Sub print_Click() Set pointer = head If head Is Nothing Then     MsgBox "链表为空" Else  While Not pointer Is Nothing         Print pointer.x         Set pointer = pointer.nextnode         If ObjPtr(pointer) = ObjPtr(head) Then                 'objptr返回对象的地址              Exit Sub                                          'strptr返回变长字符串的字符串数据地址         End If                                                 'varptr返回变量的地址         DoEvents                                               '用与获取变量地址,是函数。 Wend End If End Sub 该代码在VB6.0+WINME中调试通过。  
 
  |