链表存储结构的队列,理论上无限插入元素。
以下为链表队列类和其节点类的代码:
Option
Explicit
'-----------------------------------------
' 链表方式队列 by.Shine
'-----------------------------------------
Class
Node
'定义Queue节点类
Private
Data
'数据域
Private
NextP
'指针域
Public
Property
Let
letData
(
da
)
'数据域set方法
Data
=
da
End
Property
Public
Property
Get
getData
'数据域get方法
getData
=
Data
End
Property
Public
Property
Set
setNextP
(
obj
)
'指针域set方法
Set
NextP
=
obj
End
Property
Public
Property
Get
getNextP
'指针域get方法
Set
getNextP
=
NextP
End
Property
End
Class
Class
Queue
Private
Head
'队列头
Private
Tail
'队列尾
Private
count
'队列元素数目
Private
Sub
Class_Initialize
'构造方法初始化
Set
Head
=
New
Node
'开辟表头
Set
Head
.
SetNextP
=
Nothing
'初始化指针
Set
Tail
=
Head
'开辟表尾
count
=
0
End
Sub
Public
Sub
InQueue
(
elem
)
'队尾插入元素,理论上可以无限长
If
IsEmpty
(
elem
)
Then
MsgBox
"elem is empty"
Exit
Sub
Else
If
count
<
1
Then
Head
.
letData
=
elem
count
=
count
+1
Else
Dim
ndobj
Set
ndobj
=
New
Node
Set
ndobj
.
setNextP
=
Nothing
ndobj
.
letData
=
elem
Set
Tail
.
setNextP
=
ndobj
Set
Tail
=
ndobj
count
=
count
+1
End
If
End
If
End
Sub
Public
Function
DeQueue
'队头删除元素
If
count
<
1
Then
'判断是否为空
MsgBox
"Queue is empty"
Exit
Function
Else
If
count
>
1
Then
'元素个数大于1个
DeQueue
=
Head
.
getData
Head
.
letData
=
Head
.
getNextP
.
getData
Set
Head
.
setNextP
=
Head
.
getNextP
.
getNextP
Else
'元素个数等于1个
DeQueue
=
Head
.
getData
Head
.
letData
=
Empty
End
If
count
=
count
-1
End
If
End
Function
Public
Function
IsRaw
'判断是否空队列
If
count
>
0
Then
IsRaw
=
False
Else
IsRaw
=
True
End
If
End
Function
Public
Function
QLength
'取得队列长度
QLength
=
count
End
Function
Public
Function
InitQueue
'清空队列
count
=
0
End
Function
End
Class
'
-------------------------------
'
脚本空间调用类实例
'
-------------------------------
Dim TestLQ,i,str
'
定义变量
Set TestLQ
=
New Queue
'
实例对象
MsgBox TestLQ.IsRaw
'
测试空队列判断
MsgBox
"
Queue length is "
&TestLQ.QLength
'
取得队列长度
TestLQ.InQueue
"
I"
'
测试进入队列
TestLQ.InQueue
"
L"
TestLQ.InQueue
"
O"
TestLQ.InQueue
"
V"
TestLQ.InQueue
"
E"
TestLQ.InQueue
"
Y"
TestLQ.InQueue
"
O"
TestLQ.InQueue
"
U"
MsgBox TestLQ.IsRaw
'
测试空队列判断
MsgBox
"
Queue length is "
&TestLQ.QLength
'
取得队列长度
str
=
"
"
For i
=
1
To TestLQ.QLength Step
1
str
=str
&TestLQ.DeQueue
&
"
"
'
取出队列元素并暂存
Next
MsgBox str
'
打印出对列内容,为FIFO
TestLQ.InitQueue
'
清空队列
MsgBox TestLQ.IsRaw
'
测试空队列判断