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