تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 7 از 7

نام تاپيک: ايجاد ساختارهاي داده اي در ويژوال بيسيک

  1. #1
    اگه نباشه جاش خالی می مونه ozgor's Avatar
    تاريخ عضويت
    Jun 2006
    پست ها
    492

    پيش فرض ايجاد ساختارهاي داده اي در ويژوال بيسيک

    ايجاد ساختارهاي داده اي در ويژوال بيسيک

    --------------------------------------------------------------------------------

    بخش اول
    مقدمه :

    ساختارهاي داده اي از نظر تعداد اعضا به دو دسته استاتيک و ديناميک تقسيم مي شوند . ساختارهاي استاتيک مثل آرايه هاي يک بعدي و آرايه هاي دو بعدي ، تعداد اعضاي آنها در زمان طراحي برنامه مشخص مي شود و در طول اجراي برنامه ثابت است اما تعداد اعضاي ساختارهاي داده اي ديناميک در طول اجراي برنامه تغيير مي کند . ليست پيوندي ( LinkList ) ، پشته ( Stack ) ، صف ( Queue ) و درختهاي باينري ( Tree Binary) ، نمونه هايي از ساختارهاي داده اي ديناميک هستند .
    ليست پيوندي شامل مجموعه اي از عناصر داده اي است که اضافه و حذف اعضا در هر جاي ليست ممکن است .
    پشته يک ساختار داده اي مهم در کامپايلرها و سيستم هاي عامل است که عمل اضافه و حذف عناصر از ابتداي آن انجام مي شود .
    صف يک ساختار داده اي است که عمل اضافه کردن از انتها و عمل حذف کردن از ابتداي آن انجام مي شود .
    درختهاي دودويي براي جستجوي بسيار سريع ، ذخيره سازي داده ها و کامپايل عبارات استفاده مي شوند .

    نوع داده Variant :
    نوع داده variant براي متغيرهايي بکار مي رود که بطور صريح نوع آنها تعريف نشده است مثال :
    Dim value As Variant
    اين نوع داده مي تواند هر نوع داده اي را در خود ذخيره کند . همچنين براي ايجاد ساختارهاي داده اي مثل ليست هاي پيوندي ، صف ، پشته و درخت مناسب است .
    نوع داده موجود در variant مي توان توسط توابع VarType و TypeName تعيين کرد . تابع VarType يک مقدار صحيح برمي گرداند که نشان دهنده نوع ذخيره شده در variant است .
    مثال :
    Dim value asVariant
    value=”Hello”x
    در اينصورت مقدار بازگشتي ( VarType( value برابر 4 خواهد بود .
    تابع TypeName يک رشته برمي گرداند که نشان دهنده نام نوع داده ذخيره شده در variant است .

    اخذ حافظه بطور ديناميک Dynamic MemoryAllocation :
    براي ايجاد و نگهداري ساختارهاي داده اي ديناميک بايستي در هنگام اجراي برنامه بتوان فضاي بيشتري براي نگهداري داده هاي جديد بدست آورد . با استفاده از کلمه کليدي New مي توان در ويژوال بيسيک حاقظه ديناميک گرفت :
    SetNewNode=New ListNode
    که ListNode يک شي از ساختار داده اي مورد نظر ماست .

    کلاسهاي خود ارجاعي :
    کلاس خودارجاعي نوعي کلاس است که داراي يک اشاره گر ( Pointer ) به يک شي از همان نوع کلاس باشد . براي مثال اگر کلاس ما به اسم ClistNode باشد و متغير زير را در آن تعريف کنيم ، اين کلاس يک کلاس خود ارجاعي است :
    Private mNextNode as ClistNode
    از mNextNode براي لينک دادن اعضاي يک ساختار داده اي ديناميک بهم استفاده مي شود ( بعبارت ديگر گره زدن يک شي از کلاس ClistNode به يک شي ديگر از همان کلاس ) . شي هاي خودارجاعي مي توانند به همديگر لينک شوند و ساختارهاي داده اي مثل ليست پيوندي ، صف ، پشته و درخت را ايجاد کنند .
    شکل زير دو شي خود ارجاعي را نشان مي دهد که بصورت يک ليست بهم لينک شده اند . عبارت NULL بدين معنا است که شي خودارجاعي به شي ديگري اشاره نمي کند ( Nothing ) و نشان دهنده انتهاي ساختار داده است .

  2. #2
    اگه نباشه جاش خالی می مونه ozgor's Avatar
    تاريخ عضويت
    Jun 2006
    پست ها
    492

    پيش فرض ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش دوم

    --------------------------------------------------------------------------------

    ليست پيوندي
    همانطور که گفته شد ليست پيوندي مجموعه اي از يکسري داده است که اين داده ها از نوع اشيا خودارجاعي هستند . ( هر شي خودارجاعي داراي يک متغير نوع variant براي نگهدار مقدار و يک اشاره گر به شي بعدي است ) . هر عضو ليست پيوندي را يک گره گويند . هر ليست پيوندي از طريق يک اشاره گر به اولين گره قابل دسترسي است . گره هاي بعدي از طريق قسمت لينک موجود در هر گره قابل دسترس هستند . همچنين لينک آخرين گره با Nothing تنظيم مي شود که انتهاي ليست را نشان مي دهد .
    مزيت اصلي ليست هاي پيوندي نسبت به آرايه اينست که تعداد عناصر ليست پيوندي قابل تغيير است . بعبارت ديگر ليست هاي پيوندي بصورت ديناميک هستند و طول آنها قابل تغيير است اما سايز آرايه ثابت است . ( البته ويژوال بيسطک از آرايه هاي با سايز متغير نيز پشتيباني مي کند اما اين عمل تغيير سايز اتوماتيک نيست .)
    عمل درج در ليست پيوندي ساده است و تنها بايستي دو اشاره گر تغيير يابد .
    ليست هاي پيوندي را مي توان به سادگي با قراردادن هر عضو جديد در محل صحيح بصورت sortشده نگهداري کرد .
    اعضاي ليست پيوندي در حافظه بصورت پيوسته ذخيره نمي شوند بنابراين نمي توان فوراً به هر عضو ليست دسترسي داشت ( بر خلاف آرايه ) .
    براي ايجاد ليست پيوندي در ويژوال بيسيک نياز به سه کلاس است :

    1 – کلاس ClistNode : کلاسي است که هر گره از ليست را توصيف مي کند :
    private mNodeData as Variant
    privatemNextNode as ClistNode
    public Property Get Data() asVariant
    Data=mNodeData
    End Property
    Public Property Let Dta(ByValvNewValue as Variant)x
    MNodeData=vNewValue
    End Property
    Public PropertyGet NextNode() as ClistNode
    Set NextNode=mNextNode
    End Property
    PublicProperty Let NextNode(Byval vNewValue as Variant)x
    SetmNextNode=vNewValue
    End Property


    2 – کلاس Clist براي توصيف ليست پيوندي .mFirstNode براي اشاره به اولين ClistNode و mLastNode براي اشاره به آخرين ClistNode در يک شي clist بکار می رود . زمانيکه يک Clsit ايجاد مي شود اين دو متغير با Nothing تنظيم مي شوند . روال Property GetIterator يک شي ClistIterator برمي گرداند که مي توان از آن براي حرکت در بين اعضاي ليست استفاده کرد .

    Private mFirstNode asClistNode
    Private mLastNode as ClistNode
    Public Function IsEmpty() asboolean
    IsEmpty=IIf(mFirstNode Is Nothing,True,False)x
    Endfunction
    Public Sub InsertAtFront(insertItem as variant)x
    Dim tempNode asClistNode
    If IsEmpty() then
    Set mFirstNode=New ClistNode
    SetmLastNode=mFirstNode
    Else
    Set tempNode=mFirstNode
    Set mFirstNode=NewClistNode
    MFirstNode.NextNode=tempNode
    Endif
    MFirstNode.Data=insertItem
    End sub
    Public subInsertAtBack(insertItem as Variant)x
    Dim tempNode as ClistNode
    IfIsEmpty() then
    Set mLastNode=New ClistNode
    SetmFirstNode=mLastNode
    Else
    Set tempNode=mLastNode
    Set mLastNode=NewClistNode
    TempNode.NextNode=mLastNode
    Endif
    MLastNode.Data=insertItem
    End sub
    Public functionRemoveFromFront()x
    Dim removeItem as Variant
    If IsEmpty() then
    Msgboxlist is empty
    RemoveFromFront=Null
    Exit function
    Endif
    RemoveItem=mFirstNode.Data
    If mFirstNode Is mLastNode then
    SetmFirstNode=Nothing
    Set mLastNode=Nothing
    Else
    SetmFirstNode=mFirstNode.NextNode
    End if
    RemoveFromFront=removeItem
    Endfunction
    Public Function RemoveFromBack()x
    Dim removeItem asVariant
    Dim current as ClistNode
    If IsEmpty() then
    Msgboc list isempty
    RemovefromBack=Null
    Exit function
    Endif
    RemoveItem=mLastNode.Data
    If mFirstNode Is mLastNode then
    SetmFirstNode=nothing
    Set mLastNode=Nothing
    Else
    Setcurrent=mFirstNode
    While Not current.NextNode Is mLastNode
    Setcurrent=current.NextNode
    Wend
    SetmLastNode=current
    Current.NextNode=nothing
    Endif
    RemoveFromBack=removeItem
    End function
    Public property GetIterator() as variant
    Dim iter as ClistIterator
    Set iter=NewClistIterator
    Iter.StartNode=mFirstNode
    Set Iterator=iter
    Endproperty

    عملکرد روال InsertAtFront :
    a – فراخواني IsEmpty براي تعيين خالي بودن ليست
    b – اگر ليست خالي باشد mFirstNode و mLastNode به New ClsitNode اشاره مي کنند .
    c – اگر ليست خالي نباشد گره جديد توسط اشاره دادن tempNode به اولين گره ليست و سپس اشاره دادن mFirstNode به گره New ClsitNode و سپس اشاره دادن mFirstNode.NextNode به tempNode ساخته مي شود .
    d – تنظيم mFirstNode.Data با مقدار مورد نظر
    عملکرد روال InsertAtBack :
    a – فراخواني IsEmpty براي تعيين خالي بودن ليست
    b – اگر ليست خالي باشد mFirstNode و mLastNode به New ClsitNode اشاره مي کنند .
    c – اگر ليست خالي نباشد گره جديد توسط اشاره دادن tempNode به آخرين گره ليست و سپس اشاره دادن mLastNode به گره New ClsitNode و سپس اشاره دادن tempNode.NextNode به mLastNode ساخته مي شود .
    d – تنظيم mLastNode.Data با مقدار مورد نظر
    عملکرد روال RemoveFromFront :
    a – اگر ليست خالي باشد Null برگشت داده مي شود .
    b – اگر ليست خالي نباشد داده mFirstNode به removeItem اختصاص داده مي شود .
    c – اگر ليست فقط يک گره داشته باشد mFirstNode و mLastNode با Nothing مقدار دهي مي شوند و گره از ليست حذف مي شود .
    d – اگر گره بيش از يک عضو داشته باشد mFirstNode برابر mFirstNode.NextNode مي شود .
    e – مقدار removeItem برگشت داده مي شود .
    عملکرد روال RemoveFromBack :
    a – اگر ليست خالي باشد Null برگشت داده مي شود .
    b – اگر ليست خالي نباشد داده mLastNode به removeItem اختصاص داه مي شود .
    c – اگر ليست يک گره داشته باشد mFirstNode و mLastNode با Nothing مقدار دهي مي شوند و گره از ليست حذف مي شود .
    d – اگر ليست بيش از يک گره داشته باشد متغير current برابر mFirstNode مي شود . سپس با استفاده از current روي گره هاي ليست حرکت مي کنيم تا به گره اي برسيم که به آخرين گره اشاره مي کند . سپس mLastNode را به گره اي که current به آن اشاره مي کند قرار مي دهيم و مقدار current.NextNode را Nothing مي کنيم تا بعنوان آخرين گزه ليست معرفي شود .
    e – مقدار removeItem برگشت داده مي شود .

    3 – کلاس 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 asClistNode
    Private mFirstNode as ClistNode
    Public Property LetStartNode(Byval vNewValue as variant)x
    Set mFirstNode=vNewValue
    SetmBookmark=mFirstNode
    End property
    Public function NextItem()x
    DimtempData as varaint
    IfmBookmark Is nothingthen
    NextItem=Null
    Else
    TempData=mBookmark.Data
    SetmBookmark=mBookmark.NextNode
    NextItem=tempData
    End if
    Endfunction
    Public function HasMoreItems() as boolean
    HasMoreItems=IIf(NotmBookmark Is nothing,True,False)x
    End function
    Public subResetmBookmark()x
    MBookmark=mFirstNode
    End sub

  3. #3
    اگه نباشه جاش خالی می مونه ozgor's Avatar
    تاريخ عضويت
    Jun 2006
    پست ها
    492

    پيش فرض ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش سوم

    --------------------------------------------------------------------------------

    مثالی از استفاده از کلاسهای ليست پيوندی :
    ابتدا کلاسهايي که در جلسه قبل معرفی شد را به پروژه تان اضافه کنيد . سپس در بخش کدنويسی فرمتان ، ابتدا يک شی از نوع کلاس Clist بصورت زير تعريف کنيد :
    Dim list as NewClist

    در فرمتان سه CommandButton با نامهای AddFirst ، AddLast و ShowList و نيز يک TextBox با نام ListMember قرار دهيد .
    کد زير را برای رويداد کليک شدن دکمه AddFirst بنويسيد :

    Calllist.InsertAtFront(ListMember.text)x

    کد زير را برای رويداد کليک شدن دکمه AddLast بنويسيد :

    Calllist.InsertAtBack(ListMember.text)x

    کد زير را برای رويداد کليک شدن دکمه ShowList بنويسيد :

    Dim elements as NewClistIterator
    Set elements=list.Iterator
    If elements.HasMoreItems=falsethen msgbox ("list is empty")x
    Else
    Whileelements.HasMoreItems
    Msgbox(elements.NextItem)x
    Wend
    endif


    پشته :
    پشته نوعي ليست پيوندي است که گره هاي جديد ، فقط به انتهاي آن مي توانند اضافه شوند . بهمين دليل به پشته ، ساختمان داده LIFO مي گويند . قسمت لينک آخرين گره پشته با Nothing مقدار دهي مي شود که نشان دهنده پايين پشته است .
    روالهاي اصلي پشته Push و Pop هستند .
    Push يک گره جديد به بالاي پشته اضافه مي کند و Pop از بالاي پشته گره اي را حذف کرده و مقدار داده آن را بر مي گرداند .

  4. #4
    اگه نباشه جاش خالی می مونه ozgor's Avatar
    تاريخ عضويت
    Jun 2006
    پست ها
    492

    پيش فرض ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش چهارم

    --------------------------------------------------------------------------------

    کلاس پشته :
    همانطور که در بخش قبل گفته شد پشته نوعی ليست پيوندی است که گره هاي جديد فقط به انتهاي آن اضافه شوند . روالهاي اصلي پشته Push و Pop هستند .
    Push يک گره جديد به بالاي پشته اضافه مي کند و Pop از بالاي پشته گره اي را حذف کرده و مقدار داده آن را بر مي گرداند .
    يک کلاس پشته را با استفاده از کلاس Clist و بصورت زير پياده سازي مي کنيم :

    Private list As New Clist
    Public SubPush(value as Variant)x
    List.InsertAtFront(value)x
    End sub
    PublicFunction Pop As Variant
    Pop=list.RemoveFromFront()x
    End Function
    PublicFunction IsStackEmpty() As Boolean
    IsStackEmpty=list.IsEmpty()x
    Endfunction
    Public Property Get Iterator() as variant
    SetIterator=list.Iterator
    End Property

    در اين کلاس ابتدا يک شی از نوع کلاس Clist تعريف شده است . سپس متدهای Push توسط متد InsertAtFront و Pop توسط متد RemoveFromFront پياده سازی شده اند .
    يک برنامه نمونه :
    برای نوشتن يک برنامه برای کار با پشته ابتدا کلاس Stack را که کد آن را در بالا ديديد به پروژه تان اضافه کنيد . سپس در بخش کد مربوط به فرمتان ابتدا يک شی از نوع کلاس Stack بصورت زير تعريف کنيد :

    Dim mStack as NewStack

    سپس در فرمتان سه CommandButton با نامهای Push و Pop و ShowStack و نيز يک TextBox با نام StackMember قرار دهيد .
    کد زير را برای کليک شدن دکمه Push بنويسيد :

    mStack.push(StackMember.text)x

    کد زير را برای کليک شدن دکمه Pop بنويسيد :

    StackMember.text=mStack.Pop()x

    کد زير را برای کليک شدن دکمه ShowStack بنويسيد :

    Dim elements as NewClistIterator
    Set elements=mStack.Iterator
    If elements.HasMoreItems=falsethen msgbox "stack is empty"x
    Else
    While elemets.HasMoreItems
    Msgboxelements.NextItem
    Wend
    __________________

  5. #5
    اگه نباشه جاش خالی می مونه ozgor's Avatar
    تاريخ عضويت
    Jun 2006
    پست ها
    492

    پيش فرض ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش پنجم

    صف :
    صف نوعي ساختار داده اي استکه گره ها از ابتداي صف ( سر صف head ) حذف مي شوند و از انتهاي صف ( ته صف tail ) اضافه مي شوند . بنابر اين ، صف يک ساختار داده اي FIFO است . صف دارای دو متد بهنامهای AddQueue و DelQueue است که اولین متد ، عنصری را به انتهای صف اضافه می کندو دومين متد ، عنصری را از ابتدای صف حذف می کند .
    براي ايجاد کلاس Cqueue ازکلاس Clist استفاده مي کنيم :Private list as New Clist

    Public Sub AddQueue(value as Variant)x
    List.InsertAtBack(value)
    End sub

    Public Function DelQueue() as Variant
    DelQueue=list.RemoveFromFront
    End function

    Public property Get Iterator() as Variant
    Set Iterator=list.Iterator
    End Property

    درخت :
    ليستهاي پيوندي ، پشته ها وصف ها جزو ساختارهاي داده اي خطي هستند در حاليکه يک درخت ، يک ساختار داده اي دوبعدي با خصوصيات ويژه اي است . گره هاي درخت داراي دو يا چند لينک هستند . در اينجادر مورد درختهاي دودويي يا باينري بحث مي کنيم که در آن همه گره ها داراي دو لينکهستند . گره ريشه اولين گره در درخت است . هر لينک گره ريشه ، به يک فرزند اشاره ميکند . به فرزندان يک گره Siblings مي گويند . به گره بدون فرزند ، برگ يا Leaf گفتهمي شود .
    درختهاي جستجوي باينري درخت هايي هستند که در آنها مقدار فرزند چپ هرگره کمتر از گره پدر و مقدار فرزند سمت راست هر گره بيشتر از گره پدر مي باشد.
    __________________

  6. #6
    اگه نباشه جاش خالی می مونه ozgor's Avatar
    تاريخ عضويت
    Jun 2006
    پست ها
    492

    پيش فرض ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش ششم

    --------------------------------------------------------------------------------

    کلاس درختهای جستجوی باينری
    برای ايجاد درختهای جستجوی باينری در ويژوال بيسيک نياز به ايجاد دو کلاس داريم :
    1 - کلاس CTreeNode که هر ند درخت دودويي را توصيف می کند . اين کلاس دارای يک متغير به نام mNodeData از نوع Variant برای نگهداری داده هر گره است . همچنين دارای دو متغير اشاره گر به نامهای mLeft و mRight می باشد که به ترتيب به فرزند چپ و فرزند راست درخت اشاره می کنند .
    متد Get Data مقدار داده هر گره را بر می گرداند و متد Let Data مقدار داده هر گره را تنظيم می کند .
    متد Get Left آدرس فرزند چپ هر گره را برمی گرداند و متد Let Left فرزند چپ هر گره را تنظيم می کند .
    متد Get Right آدرس فرزند راست هر گره را برمی گرداند و متد LetRight فرزند راست هر گره را تنظيم می کند .
    متد Insert برای اضافه کردن فرزند به يک گره به کار می رود . اگر مقدار گره ای که می خواهيم بعنوان فرزند به درخت اضافه کنيم کوچکتر از مقدار خود گره باشد بعنوان فرزند چپ و در غير اينصورت بعنوان فرزند راست به گره اضافه می شود . اضافه شدن نيز بدين صورت است که ابتدا بررسی می شود آیا گره قبلاً فرزندی داشته است يا نه ؟ اگر نداشته باشد ( mLeft و يا mRight برابر Nothing باشد ) اين گره جديد مستقيماً به گره متصل می شود اما اگر گره قبلاً فرزندی داشته باشد متد Insert برای آن فرزند اضافه می شود و اينکار تا جايی ادامه می يابد که به گره ای برسيم که فرزندی نداشته باشد :

    Private mLeft as CtreeNode
    PrivatemRight as CtreeNode
    Private mNodeData as Variant

    Public Property GetData() as variant
    Data=mNodeData
    End property
    Public Property LetData(Byval vNewValue as Variant)x
    MNodeData=vNewValue
    Endproperty
    Public Property Get Left() as variant
    Set Left=mLeft
    Endproperty
    Public Property Let Left(Byval vNewValue as variant)x
    SetmLeft=vNewValue
    End property

    Public Property Get Right() asvariant
    Set Right=mRight
    End Property
    Public Property Let Right(ByvalvNewValue as variant)x
    Set mRight=vNewValue
    End Property

    Public SubInsert(value as variant)x
    If value
    If mLeft Is NothingThen
    Set mLeft=NewCtreeNode
    MLeft.Data=value
    Else
    MLeft.Insert(value)x
    Endif
    Elseif value>mNodeData then
    If mRight Is Nothing then
    SetmRight=NewCtreeNode
    MRight.Data=value
    Else
    MRight.Insert(value)x
    End if
    Endif
    End sub

    2 - کلاس CTree : اين کلاس برای ايجاد درخت بکار می رود . اين کلاس دارای متغيری بنام mRoot از نوع CTreeNode برای تعريف ريشه درخت است . همچنين يک متغير mOutputString برای نمايش دادن اعضای درخت دارد .
    Private mRoot as CtreeNode
    PrivatemOutputString as String

    Public Sub InsertNode(value as Varaint)x
    IfmRoot Is Nothing then
    Set Mnode=NewCtreeNode
    MRoot.Data=value
    Else
    MRoot.Insert(value)x
    End if
    Endsub

    Public PreorderTraversal()x
    MOutputString=””x
    CallPreorderHelper(mRoot)x
    End sub

    Private Sub PreorderHelper(node AsCtreeNode)x
    If node Is nothing Then
    Exit sub
    Endif
    MOutputString=mOutputString & node.Data & “ “x
    CallPreorderHelper(node.left)x
    Call PreorderHelper(node.right)x
    Endsub

    Public Sub InorderTraversal()x
    MOutputString=””x
    CallInorderHelper(mRoot)x
    End sub

    Private Sub InorderHelper(node asCtreeNode)x
    If node Is nothing then
    Exit sub
    End if
    CallInorderHelper(node.Left)x
    MOutputString=mOutputString & node.Data & “ “x
    Call InorderHelper(node.Right)x
    End sub

    PublicPostorderTraversal()x
    MOutputString=””x
    CallPostorderHelper(mRoot)x
    End sub

    Private Sub PostorderHelper(node asCtreeNode)x
    If node Is Nothing then
    Exit sub
    End if
    CallPostorderHelper(node.Left)x
    CallPostorderHelper(node.Right)x
    MOutputString=mOutputString & node.Data & “ “x
    End sub

    Public Property Get Output() asVaraint
    Output=mOutputString
    End Property
    __________________

  7. #7
    اگه نباشه جاش خالی می مونه ozgor's Avatar
    تاريخ عضويت
    Jun 2006
    پست ها
    492

    پيش فرض ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش 7 پايانی

    --------------------------------------------------------------------------------

    انواع روشهای پيمايش عناصر درخت :
    ۱ - روش InOrder : در اين روش ابتدا عناصر نيمه سمت چپ درخت ، سپس ريشه و در آخر عناصر نيمه سمت راست درخت نمايش داده می شوند .
    ۲ - روش PreOrder : در اين روش ابتدا ريشه درخت ، سپس عناصر نيمه سمت چپ و در پايان عناصر نيمه سمت راست درخت نمايش داده می شوند .
    ۳ - روش PostOrder : در اين روش ابتدا عناصر نيمه سمت چپ درخت ، سپس عناصر نيمه سمت راست درخت و در پايان ريشه درخت نمايش داده می شوند .
    بررسی متدهای کلاس CTree :
    متد InsertNode : اگر گره ريشه برابر Null باشد value را برابر مقدار گره ريشه قرار می دهد . در غير اينصورت متد Insert مربوط به گره ريشه فراخوانی می شود .
    متد PreorderTraversal : رشته چاپ عناصر ريشه را خالی می کند و سپس متد پيمايش Preorder را فراخوانی می کند .
    متد InorderTraversal : رشته چاپ عناصر ريشه را خالی می کند و سپس متد پيمايش Inorder را فراخوانی می کند .
    متد PostorderTraversal : رشته چاپ عناصر ريشه را خالی می کند و سپس متد پيمايش Postorder را فراخوانی می کند .
    متد Get Output : عناصر پيمايش شده درخت را برمی گرداند .
    يک برنامه نمونه :
    ابتدا کلاسهای CTreeNode و CTree را به پروژه تان اضافه کنيد . سپس متغير زير را در قسمت کدنويسی فرمتان تعريف کنيد :

    Dim mTree as NewCtree
    سپس در فرمتان يک Textbox با نام Value و دو Command Button با نامهای Insert و Show قرار دهيد .
    کد زير را برای وارد کردن عنصر به درخت برای دکمه Insert بنويسيد :

    mTree.InsertNode(Value.Text)x

    کد زير را برای پيمايش InOrder درخت برای دکمه Show بنويسيد :
    CallmTree.InorderTraversal

    شي Collection :
    ويژوال بيسيک داراي شي پيش ساخته اي به نام Collection است که مي تواند مجموعه اي از مقادير با هر نوع داده اي را در خود ذخيره کند . در واقع عناصر موجود در يک Collection مي توانند داراي نوعهاي داده اي متفاوت باشند . شي Collection قابليت رشد ديناميک دارد .
    شي Collection توسط کلمه کليدي New ايجاد مي شوند . توسط متد Add مي توان به Cllection عضو اضافه کرد و توسط متد Remove مي توان عضوي را از آن حذف کرد . هر عضو از Collection توسط متد Item قابل دستيابي است . با استفاده از خاصيت Count مي توان تعداد اعضاي موجود در Collection را تعيين نمود . بصورت پيش فرض اعضاي جديد به انتهاي Collection اضافه مي شوند ولي توسط آرگومانهاي اختياري متد Add مي توان محل اضافه شدن را تغيير داد .
    متد Remove يک شماره مي گيرد که موقعيت عضوي را که مي خواهيم آنرا حذف کنيم مشخص مي کند .
    توسط دستورات زير مي توان اعضاي يک Collection را نمايش داد :
    Dim mCollection as NewCollection
    Dim element as Variant
    .
    .
    .
    For Each element InmCollection
    Msgbox element

    element متغيري از نوع variant براي اشاره به هر عضو Collection مي باشد .

    __________________

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •