計算機二級VB輔導:循環(huán)鏈表以及相關(guān)操作

字號:

循環(huán)鏈表以及相關(guān)操作(VB實現(xiàn))
    首先建立一個工程,然后增加一個類并且命名為(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,以便可以隱式創(chuàng)建對象。如果 New 與 Set 一起使用,則將創(chuàng)建該類的一個新實例。如果 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返回變長字符串的字符串數(shù)據(jù)地址
    End If ’varptr返回變量的地址
    DoEvents’用與獲取變量地址,是函數(shù)。
    Loop While Not pointer Is Nothing
    End Sub
    Private Sub delete_Click()
    Dim a As Long
    Dim b As Long
    a = CLng(InputBox("輸入要刪除的一個數(shù)據(jù)", "輸入數(shù)據(jù)"))
    b = CLng(InputBox("輸入該數(shù)據(jù)的位置", "位置"))
    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("輸入要插入的一個數(shù)據(jù)", "輸入數(shù)據(jù)"))
    b = CLng(InputBox("輸入該數(shù)據(jù)的位置", "位置"))
    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("輸入要刪除的一個數(shù)據(jù)", "輸入數(shù)據(jù)"))
    b = CLng(InputBox("輸入該數(shù)據(jù)的位置", "位置"))
    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返回變長字符串的字符串數(shù)據(jù)地址
    End If ’varptr返回變量的地址
    DoEvents’用與獲取變量地址,是函數(shù)。
    Wend
    End If
    End Sub
    該代碼在VB6.0+WINME中調(diào)試通過。