循环链表以及相关操作(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 &nb