PDA

Click to See Complete Forum and Search --> : Adding Link List code included!


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