Homepage   Forum     WEB     BBS  
Thread List  
Forum Guide Map  
Thread Content             
   
Help in Linked list in VB
Author ybyygu   Views 10   Posted at 2008/8/26 03:39  [View In Forum]
Hello,lqsaqgpt
lqsaqgpt
How to remove and add an item in a linked list anywhere in the listl?lqsaqgpt
lqsaqgpt
I just improve the deitel n deitel code for linked list and it works fine in manipulating at both ends (front and back ends) of teh linked list but no code is given if manipulating (inserting and deleting inside teh list).lqsaqgpt
lqsaqgpt
lqsaqgpt
Please helplqsaqgpt
lqsaqgpt
Here's my improved deitel's and deitels code for VB linked listlqsaqgpt
lqsaqgpt
'Class cListNodelqsaqgpt
' February 10, 2008lqsaqgpt
Option Explicitlqsaqgpt
lqsaqgpt
Private mNodeData As Variantlqsaqgpt
Private mNextNode As cListNodelqsaqgpt
lqsaqgpt
lqsaqgpt
Public Property Get Data() As Variantlqsaqgpt
Set Data = mNodeDatalqsaqgpt
End Propertylqsaqgpt
lqsaqgpt
Public Property Let Data(Data As Variant)lqsaqgpt
Set mNodeData = Datalqsaqgpt
End Propertylqsaqgpt
lqsaqgpt
lqsaqgpt
Public Property Get NextNode() As cListNodelqsaqgpt
Set NextNode = mNextNodelqsaqgpt
End Propertylqsaqgpt
lqsaqgpt
lqsaqgpt
Public Property Let NextNode(Data As Variant)lqsaqgpt
Set mNextNode = Datalqsaqgpt
End Propertylqsaqgpt
lqsaqgpt
lqsaqgpt
lqsaqgpt
lqsaqgpt
' Class Clistlqsaqgpt
' February 12, 2008lqsaqgpt
Option Explicitlqsaqgpt
lqsaqgpt
Private mFirstNode As cListNodelqsaqgpt
Private mLastNode As cListNodelqsaqgpt
lqsaqgpt
Public Function IsEmpty() As Booleanlqsaqgpt
IsEmpty = IIf(mFirstNode Is Nothing, True, False)lqsaqgpt
End Functionlqsaqgpt
lqsaqgpt
lqsaqgpt
Public Sub InsertAtFront(InsertItem As Variant)lqsaqgpt
Dim TempNode As cListNodelqsaqgpt
lqsaqgpt
If IsEmpty() Thenlqsaqgpt
Set mFirstNode = New cListNodelqsaqgpt
Set mLastNode = mFirstNodelqsaqgpt
Elselqsaqgpt
Set TempNode = mFirstNodelqsaqgpt
Set mFirstNode = New cListNodelqsaqgpt
mFirstNode.NextNode = TempNodelqsaqgpt
End Iflqsaqgpt
lqsaqgpt
mFirstNode.Data = InsertItemlqsaqgpt
lqsaqgpt
End Sublqsaqgpt
lqsaqgpt
lqsaqgpt
Public Sub InsertAtBack(InsertItem As Variant)lqsaqgpt
Dim TempNode As cListNodelqsaqgpt
lqsaqgpt
If IsEmpty() Thenlqsaqgpt
Set mLastNode = New cListNodelqsaqgpt
Set mFirstNode = mLastNodelqsaqgpt
Elselqsaqgpt
Set TempNode = mLastNodelqsaqgpt
Set mLastNode = New cListNodelqsaqgpt
TempNode.NextNode = mLastNodelqsaqgpt
End Iflqsaqgpt
lqsaqgpt
mLastNode.Data = InsertItemlqsaqgpt
lqsaqgpt
End Sublqsaqgpt
lqsaqgpt
lqsaqgpt
Public Function RemoveFromFront()lqsaqgpt
Dim RemoveItem As Variantlqsaqgpt
If IsEmpty() Thenlqsaqgpt
RemoveFromFront = Nulllqsaqgpt
Exit Functionlqsaqgpt
End Iflqsaqgpt
lqsaqgpt
RemoveItem = mFirstNode.Datalqsaqgpt
lqsaqgpt
If mFirstNode Is mLastNode Thenlqsaqgpt
Set mFirstNode = Nothinglqsaqgpt
Set mLastNode = Nothinglqsaqgpt
Elselqsaqgpt
Set mFirstNode = mFirstNode.NextNodelqsaqgpt
End Iflqsaqgpt
lqsaqgpt
RemoveFromFront = RemoveItemlqsaqgpt
lqsaqgpt
End Functionlqsaqgpt
lqsaqgpt
lqsaqgpt
Public Function RemoveFromBack()lqsaqgpt
Dim RemoveItem As Variantlqsaqgpt
Dim Current As cListNodelqsaqgpt
lqsaqgpt
If IsEmpty() Thenlqsaqgpt
RemoveFromBack = Nulllqsaqgpt
Exit Functionlqsaqgpt
End Iflqsaqgpt
lqsaqgpt
RemoveItem = mLastNode.Datalqsaqgpt
lqsaqgpt
If mFirstNode Is mLastNode Thenlqsaqgpt
Set mFirstNode = Nothinglqsaqgpt
Set mLastNode = Nothinglqsaqgpt
Elselqsaqgpt
Set Current = mFirstNodelqsaqgpt
lqsaqgpt
While Not Current.NextNode Is mLastNodelqsaqgpt
Set Current = Current.NextNodelqsaqgpt
Wendlqsaqgpt
lqsaqgpt
Set mLastNode = Currentlqsaqgpt
Set Current.NextNode = Nothinglqsaqgpt
End Iflqsaqgpt
lqsaqgpt
RemoveFromBack = RemoveItemlqsaqgpt
lqsaqgpt
End Functionlqsaqgpt
lqsaqgpt
lqsaqgpt
lqsaqgpt
'This is my trouble and also inserting an item inside the listlqsaqgpt
Public Function RemoveFromList(ByVal ItemIndex As Integer)lqsaqgpt
Dim Elements As New cListIteratorlqsaqgpt
Dim count As Integerlqsaqgpt
Dim Item As Variantlqsaqgpt
Dim RemoveItem As Variantlqsaqgpt
Dim CurrentNode As cListNodelqsaqgpt
' Process in removing an item from the listlqsaqgpt
'lqsaqgpt
' 1.) Iterate through the list, and count items until equal to ItemIndexlqsaqgpt
lqsaqgpt
lqsaqgpt
If IsEmpty() Thenlqsaqgpt
Set RemoveFromList = Nulllqsaqgpt
Exit Functionlqsaqgpt
End Iflqsaqgpt
lqsaqgpt
Set Elements.StartNode = mFirstNodelqsaqgpt
lqsaqgpt
count = 0lqsaqgpt
While Elements.HasMoreItemslqsaqgpt
Set CurrentNode = Elements.CurrentNodelqsaqgpt
Call Elements.ToNextNodelqsaqgpt
count = count 1lqsaqgpt
lqsaqgpt
If count = ItemIndex Thenlqsaqgpt
Set RemoveItem = CurrentNode.Datalqsaqgpt
GoTo SHIFT_LISTlqsaqgpt
End Iflqsaqgpt
Wendlqsaqgpt
lqsaqgpt
If count < ItemIndex Thenlqsaqgpt
Set RemoveFromList = Nulllqsaqgpt
Exit Functionlqsaqgpt
End Iflqsaqgpt
lqsaqgpt
lqsaqgpt
SHIFT_LIST:lqsaqgpt
While Elements.HasMoreItemslqsaqgpt
CurrentNode.NextNode = Elements.CurrentNodelqsaqgpt
Call Elements.ToNextNodelqsaqgpt
Wendlqsaqgpt
lqsaqgpt
Set RemoveFromList = RemoveItemlqsaqgpt
End Functionlqsaqgpt
lqsaqgpt
lqsaqgpt
Public Property Get Iterator() As Variantlqsaqgpt
Dim Iter As cListIteratorlqsaqgpt
lqsaqgpt
Set Iter = New cListIteratorlqsaqgpt
Iter.StartNode = mFirstNodelqsaqgpt
Set Iterator = Iterlqsaqgpt
End Propertylqsaqgpt
lqsaqgpt
lqsaqgpt
Public Property Get ItemsCount() As Integerlqsaqgpt
Dim count As Integerlqsaqgpt
Dim Elements As New cListIteratorlqsaqgpt
lqsaqgpt
Elements.StartNode = mFirstNodelqsaqgpt
lqsaqgpt
count = 0lqsaqgpt
While Elements.HasMoreItemslqsaqgpt
Call Elements.ToNextNodelqsaqgpt
count = count 1lqsaqgpt
Wendlqsaqgpt
lqsaqgpt
ItemsCount = countlqsaqgpt
lqsaqgpt
End Propertylqsaqgpt
lqsaqgpt
lqsaqgpt
'Class cListIteratorlqsaqgpt
' February 12, 2008lqsaqgpt
Option Explicitlqsaqgpt
lqsaqgpt
Private mBookMark As cListNode 'lqsaqgpt
Private mFirstNode As cListNode ' Reference nodelqsaqgpt
lqsaqgpt
lqsaqgpt
Public Property Let StartNode(Data As Variant)lqsaqgpt
Set mFirstNode = Datalqsaqgpt
Set mBookMark = mFirstNodelqsaqgpt
End Propertylqsaqgpt
lqsaqgpt
Public Sub ToNextNode()lqsaqgpt
lqsaqgpt
If mBookMark Is Nothing Thenlqsaqgpt
Exit Sub ' end of the listlqsaqgpt
Elselqsaqgpt
Set mBookMark = mBookMark.NextNodelqsaqgpt
End Iflqsaqgpt
End Sublqsaqgpt
lqsaqgpt
Public Property Get CurrentNode() As cListNodelqsaqgpt
Set CurrentNode = mBookMarklqsaqgpt
End Propertylqsaqgpt
lqsaqgpt
Public Function HasMoreItems() As Booleanlqsaqgpt
HasMoreItems = IIf(Not mBookMark Is Nothing, True, False)lqsaqgpt
End Functionlqsaqgpt
lqsaqgpt
Public Sub ResetBookMark()lqsaqgpt
mBookMark = mFirstNodelqsaqgpt
End Sub
      

Reply No. Replier Total Replies 1   [View All Replies]  [New Reply] Replied at
1 hgping i dont know the website but i saw this 2010/7/17 01:19
 Total Replies 1  Thread Per Page 10
Page 1/1  |<  <<   1   >>  >| 
Power by rfeda