PDA

View Full Version : لیست پیوندی



sgb110
شنبه 01 اردیبهشت 1386, 02:07 صبح
سلام
من یه سری کد در مورد لیست پیوندی از سایت www.dev.ir (http://www.dev.ir) گرفتم که شامل 3 تا کلاس هست
اما یه جاش ایراد داره هر چی باهاش ور رفتم ایرادش رو پیدا نکردم
لطفا یه نگاه بهش بندازید ببینید ایرادش کجاست


1 – کلاس ClistNode : کلاسی است که هر گره از لیست را توصیف می کند :

private mNodeData as Variant
private mNextNode as ClistNode
public Property Get Data() as Variant
Data=mNodeData
End Property
Public Property Let Dta(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 برای توصیف لیست پیوندی .
mFirstNode برای اشاره به اولین ClistNode و mLastNode برای اشاره به آخرین ClistNode در یک شی clist بکار می رود . زمانیکه یک Clsit ایجاد می شود این دو متغیر با Nothing تنظیم می شوند . روال Property Get Iterator یک شی ClistIterator برمی گرداند که می توان از آن برای حرکت در بین اعضای لیست استفاده کرد .

Private mFirstNode as ClistNode
Private mLastNode as ClistNode
Public Function IsEmpty() as boolean
IsEmpty=IIf(mFirstNode Is Nothing,True,False)
End function
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
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
Public function RemoveFromFront()
Dim removeItem as Variant
If IsEmpty() then
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
Public Function RemoveFromBack()
Dim removeItem as Variant
Dim current as ClistNode
If IsEmpty() then
Msgboc 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 : این کلاس برای حرکت روی گره های لیست و دستکاری هر گره بکار می رود . از حرکت کننده ها برای چاپ لیست و یا انجام دادن عملی بر روی هر عضو Clist می توان استفاده کرد . این کلاس دارای دو متغیر از نوع ClistNode به نامهای mBookmark و mFirstNode است . متغیر mFirstNode به اولین گره در Clist اشاره می کند و متغیر mBookmark موقعیت فعلی حرکت کننده بر روی Clist را نشان می دهد . روال Property Let StartNode این دو متغیر را مقدار دهی اولیه می کند . تابع NextItem اگر مقدار mBookmark برابر Null باشد ، Null برگشت می دهد و در غیراینصورت مقدار tempData را برابر mBookmark.Data و مقدار mBookmark را برابر mBookmark.NextNode قرار می دهد . تابع HasMoreItems اگر لیست دارای چندین عضو باشد True برمی گرداند . روال ResetBookmark حرکت کننده را به ابتدای لیست منتقل می کند .

Private mBookmark as ClistNode
Private mFirstNode as ClistNode
Public Property Let StartNode(Byval vNewValue as variant)
Set mFirstNode=vNewValue
Set mBookmark=mFirstNode
End property
Public function NextItem()
Dim tempData as varaint
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
Public sub ResetmBookmark()
MBookmark=mFirstNode
End sub


وقتی به لیست داده اضافه می کنم ارور :
object required
رو می ده