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