循环链表以及相关操作(VB实现)

发表于:2007-05-25来源:作者:点击数: 标签:环链以及操作相关实现
循环链表以及相关操作( VB 实现) 首先建立一个工程,然后增加一个类并且命名为(node,cls), 在node.cls中加入以下代码. Option Explicit Public x As Long Public count As Long Public nextnode As node 在Form1.frm中加入以下代码。 Option Explicit Dim

                              循环链表以及相关操作(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中调试通过。

原文转自:http://www.ltesting.net