KatDaddy
Nov 7th, 1999, 09:21 AM
This code will create 2 Link Lists. I want to manipulate these two Link List but I am stuck. How do I reference the two
Link Lists as an object? Should I create another Class file just for adding the 2 Link Lists?
I want to do the following manipulations:
Add Link List 2 in front of Link List 1
Add Link List 2 at the back of Link List1
Remove Link List 2 from the front of Link List1
Remove Link List 2 from the back of Link List 1
The following is code
CListNode:
'Class CListNode
Option Explicit
Private mNodeData As Variant
Private mNextNode As CListNode
Public Property Get Data() As Variant
Data = mNodeData
End Property
Public Property Let Data(ByVal vNewValue As Variant)
mNodeData = vNewValue
End Property
Public Property Get NextNode() As CListNode
Set NextNode = mNextNode
End Property
Public Property Let NextNode(ByVal vNewValue As Variant)
Set mNextNode = vNewValue
End Property
CList
'Class CList
Option Explicit
Private mFirstNode As CListNode
Private mLastNode As CListNode
'determine if the list is empty
Public Function IsEmpty() As Boolean
IsEmpty = IIf(mFirstNode Is Nothing, True, False)
End Function
'insert an element at the beginning of the list
Public Sub InsertAtFront(insertItem As Variant)
Dim tempNode As CListNode
If IsEmpty() Then
Set mFirstNode = New CListNode
Set mLastNode = mFirstNode
Else
Set tempNode = mFirstNode
Set mFirstNode = New CListNode
mFirstNode.NextNode = tempNode
End If
mFirstNode.Data = insertItem
End Sub
'insert an element at the end of the list
Public Sub InsertAtBack(insertItem As Variant)
Dim tempNode As CListNode
If IsEmpty() Then
Set mLastNode = New CListNode
Set mFirstNode = mLastNode
Else
Set tempNode = mLastNode
Set mLastNode = New CListNode
tempNode.NextNode = mLastNode
End If
mLastNode.Data = insertItem
End Sub
'remove an element from the beginning of the list
Public Function RemoveFromFront()
Dim removeItem As Variant
If IsEmpty() Then
Call MsgBox("List is empty")
RemoveFromFront = Null
Exit Function
End If
removeItem = mFirstNode.Data
If mFirstNode Is mLastNode Then
Set mFirstNode = Nothing
Set mLastNode = Nothing
Else
Set mFirstNode = mFirstNode.NextNode
End If
RemoveFromFront = removeItem
End Function
'remove an element from the end of the list
Public Function RemoveFromBack()
Dim removeItem As Variant
Dim current As CListNode
If IsEmpty() Then
Call MsgBox("List is empty")
RemoveFromBack = Null
Exit Function
End If
removeItem = mLastNode.Data
If mFirstNode Is mLastNode Then
Set mFirstNode = Nothing
Set mLastNode = Nothing
Else
Set current = mFirstNode
While Not current.NextNode Is mLastNode
Set current = current.NextNode
Wend
Set mLastNode = current
current.NextNode = Nothing
End If
RemoveFromBack = removeItem
End Function
Public Property Get Iterator() As Variant
Dim iter As CListIterator
Set iter = New CListIterator
iter.StartNode = mFirstNode
Set Iterator = iter
End Property
CListIterator
'Class CListIterator
Option Explicit
Private mBookmark As CListNode
Private mFirstNode As CListNode
Public Property Let StartNode(ByVal vNewValue As Variant)
Set mFirstNode = vNewValue
Set mBookmark = mFirstNode
End Property
'return next item in list
Public Function NextItem()
Dim tempData As Variant
If mBookmark Is Nothing Then
NextItem = Null
Else
tempData = mBookmark.Data
Set mBookmark = mBookmark.NextNode
NextItem = tempData
End If
End Function
Public Function HasMoreItems() As Boolean
HasMoreItems = IIf(Not mBookmark Is Nothing, True, False)
End Function
'reset mBookmark to the beginning to the list
Public Sub ResetmBookmark()
mBookmark = FirstNode
End Sub
Form Code that uses the Classes
'Demostrating Class Clist
Option Explicit
Dim list As New CList
Dim list2 As New CList
Private Sub cmdInsertBack_Click()
Call list.InsertAtBack(txtInput.Text)
txtInput.Text = ""
Call Display
End Sub
Private Sub cmdInsertBack2_Click()
Call list2.InsertAtBack(txtInput2.Text)
txtInput2.Text = ""
Call Display2
End Sub
Private Sub cmdInsertFront_Click()
Call list.InsertAtFront(txtInput.Text)
txtInput.Text = ""
Call Display
End Sub
Private Sub cmdInsertFront2_Click()
Call list2.InsertAtFront(txtInput2.Text)
txtInput2.Text = ""
Call Display2
End Sub
Private Sub cmdRemoveBack_Click()
txtInput.Text = ""
Call list.RemoveFromBack
Call Display
End Sub
Private Sub cmdRemoveBack2_Click()
txtInput2.Text = ""
Call list2.RemoveFromBack
txtInput2.Text = ""
Call Display2
End Sub
Private Sub cmdRemoveFront2_Click()
txtInput2.Text = ""
Call list2.RemoveFromFront
Call Display2
End Sub
Private Sub cmdRemoveFront_Click()
txtInput.Text = ""
Call list.RemoveFromFront
Call Display
End Sub
Private Sub Display()
Dim elements As New CListIterator
Call lstOutput.Clear
Set elements = list.Iterator
If elements.HasMoreItems = False Then
Call lstOutput.AddItem("The list is empty")
Exit Sub
End If
While elements.HasMoreItems
Call lstOutput.AddItem(elements.NextItem)
Wend
End Sub
Private Sub Display2()
Dim elements As New CListIterator
Call lstOutput2.Clear
Set elements = list2.Iterator
If elements.HasMoreItems = False Then
Call lstOutput2.AddItem("The list is empty")
Exit Sub
End If
While elements.HasMoreItems
Call lstOutput2.AddItem(elements.NextItem)
Wend
End Sub
Thanks for any help
Brian
Link Lists as an object? Should I create another Class file just for adding the 2 Link Lists?
I want to do the following manipulations:
Add Link List 2 in front of Link List 1
Add Link List 2 at the back of Link List1
Remove Link List 2 from the front of Link List1
Remove Link List 2 from the back of Link List 1
The following is code
CListNode:
'Class CListNode
Option Explicit
Private mNodeData As Variant
Private mNextNode As CListNode
Public Property Get Data() As Variant
Data = mNodeData
End Property
Public Property Let Data(ByVal vNewValue As Variant)
mNodeData = vNewValue
End Property
Public Property Get NextNode() As CListNode
Set NextNode = mNextNode
End Property
Public Property Let NextNode(ByVal vNewValue As Variant)
Set mNextNode = vNewValue
End Property
CList
'Class CList
Option Explicit
Private mFirstNode As CListNode
Private mLastNode As CListNode
'determine if the list is empty
Public Function IsEmpty() As Boolean
IsEmpty = IIf(mFirstNode Is Nothing, True, False)
End Function
'insert an element at the beginning of the list
Public Sub InsertAtFront(insertItem As Variant)
Dim tempNode As CListNode
If IsEmpty() Then
Set mFirstNode = New CListNode
Set mLastNode = mFirstNode
Else
Set tempNode = mFirstNode
Set mFirstNode = New CListNode
mFirstNode.NextNode = tempNode
End If
mFirstNode.Data = insertItem
End Sub
'insert an element at the end of the list
Public Sub InsertAtBack(insertItem As Variant)
Dim tempNode As CListNode
If IsEmpty() Then
Set mLastNode = New CListNode
Set mFirstNode = mLastNode
Else
Set tempNode = mLastNode
Set mLastNode = New CListNode
tempNode.NextNode = mLastNode
End If
mLastNode.Data = insertItem
End Sub
'remove an element from the beginning of the list
Public Function RemoveFromFront()
Dim removeItem As Variant
If IsEmpty() Then
Call MsgBox("List is empty")
RemoveFromFront = Null
Exit Function
End If
removeItem = mFirstNode.Data
If mFirstNode Is mLastNode Then
Set mFirstNode = Nothing
Set mLastNode = Nothing
Else
Set mFirstNode = mFirstNode.NextNode
End If
RemoveFromFront = removeItem
End Function
'remove an element from the end of the list
Public Function RemoveFromBack()
Dim removeItem As Variant
Dim current As CListNode
If IsEmpty() Then
Call MsgBox("List is empty")
RemoveFromBack = Null
Exit Function
End If
removeItem = mLastNode.Data
If mFirstNode Is mLastNode Then
Set mFirstNode = Nothing
Set mLastNode = Nothing
Else
Set current = mFirstNode
While Not current.NextNode Is mLastNode
Set current = current.NextNode
Wend
Set mLastNode = current
current.NextNode = Nothing
End If
RemoveFromBack = removeItem
End Function
Public Property Get Iterator() As Variant
Dim iter As CListIterator
Set iter = New CListIterator
iter.StartNode = mFirstNode
Set Iterator = iter
End Property
CListIterator
'Class CListIterator
Option Explicit
Private mBookmark As CListNode
Private mFirstNode As CListNode
Public Property Let StartNode(ByVal vNewValue As Variant)
Set mFirstNode = vNewValue
Set mBookmark = mFirstNode
End Property
'return next item in list
Public Function NextItem()
Dim tempData As Variant
If mBookmark Is Nothing Then
NextItem = Null
Else
tempData = mBookmark.Data
Set mBookmark = mBookmark.NextNode
NextItem = tempData
End If
End Function
Public Function HasMoreItems() As Boolean
HasMoreItems = IIf(Not mBookmark Is Nothing, True, False)
End Function
'reset mBookmark to the beginning to the list
Public Sub ResetmBookmark()
mBookmark = FirstNode
End Sub
Form Code that uses the Classes
'Demostrating Class Clist
Option Explicit
Dim list As New CList
Dim list2 As New CList
Private Sub cmdInsertBack_Click()
Call list.InsertAtBack(txtInput.Text)
txtInput.Text = ""
Call Display
End Sub
Private Sub cmdInsertBack2_Click()
Call list2.InsertAtBack(txtInput2.Text)
txtInput2.Text = ""
Call Display2
End Sub
Private Sub cmdInsertFront_Click()
Call list.InsertAtFront(txtInput.Text)
txtInput.Text = ""
Call Display
End Sub
Private Sub cmdInsertFront2_Click()
Call list2.InsertAtFront(txtInput2.Text)
txtInput2.Text = ""
Call Display2
End Sub
Private Sub cmdRemoveBack_Click()
txtInput.Text = ""
Call list.RemoveFromBack
Call Display
End Sub
Private Sub cmdRemoveBack2_Click()
txtInput2.Text = ""
Call list2.RemoveFromBack
txtInput2.Text = ""
Call Display2
End Sub
Private Sub cmdRemoveFront2_Click()
txtInput2.Text = ""
Call list2.RemoveFromFront
Call Display2
End Sub
Private Sub cmdRemoveFront_Click()
txtInput.Text = ""
Call list.RemoveFromFront
Call Display
End Sub
Private Sub Display()
Dim elements As New CListIterator
Call lstOutput.Clear
Set elements = list.Iterator
If elements.HasMoreItems = False Then
Call lstOutput.AddItem("The list is empty")
Exit Sub
End If
While elements.HasMoreItems
Call lstOutput.AddItem(elements.NextItem)
Wend
End Sub
Private Sub Display2()
Dim elements As New CListIterator
Call lstOutput2.Clear
Set elements = list2.Iterator
If elements.HasMoreItems = False Then
Call lstOutput2.AddItem("The list is empty")
Exit Sub
End If
While elements.HasMoreItems
Call lstOutput2.AddItem(elements.NextItem)
Wend
End Sub
Thanks for any help
Brian