ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی “ ورود به حساب” کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمیشود، اینجا را کلیک کنید.





نمایش نتایج: از 1 به 4 از 4
Like Tree1Likes
  • 1 Post By adminmsp

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

  1. #1
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465

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

    ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش اول
    مقدمه :

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

    نوع داده Variant :

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

    اخذ حافظه بطور ديناميک Dynamic Memory Allocation :

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

    کلاسهاي خود ارجاعي :

    کلاس خودارجاعي نوعي کلاس است که داراي يک اشاره گر ( Pointer ) به يک شي از همان نوع کلاس باشد . براي مثال اگر کلاس ما به اسم ClistNode باشد و متغير زير را در آن تعريف کنيم ، اين کلاس يک کلاس خود ارجاعي است :
    کد:
     Private mNextNode as ClistNode
    از mNextNode براي لينک دادن اعضاي يک ساختار داده اي ديناميک بهم استفاده مي شود ( بعبارت ديگر گره زدن يک شي از کلاس ClistNode به يک شي ديگر از همان کلاس ) . شي هاي خودارجاعي مي توانند به همديگر لينک شوند و ساختارهاي داده اي مثل ليست پيوندي ، صف ، پشته و درخت را ايجاد کنند .
    شکل زير دو شي خود ارجاعي را نشان مي دهد که بصورت يک ليست بهم لينک شده اند . عبارت NULL بدين معنا است که شي خودارجاعي به شي ديگري اشاره نمي کند ( Nothing ) و نشان دهنده انتهاي ساختار داده است .
    massud likes this.
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  2. #2
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش دوم

    ليست پيوندي

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

    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)x
    MNodeData=vNewValue
    End Property
    Public Property Get NextNode() as ClistNode
    Set NextNode=mNextNode
    End Property
    Public Property Let NextNode(Byval vNewValue as Variant)x
    Set mNextNode=vNewValue
    End Property


    2 – کلاس 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)x
    End function
    Public Sub InsertAtFront(insertItem as variant)x
    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)x
    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()x
    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()x
    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

    عملکرد روال 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 as ClistNode
    Private mFirstNode as ClistNode
    Public Property Let StartNode(Byval vNewValue as variant)x
    Set mFirstNode=vNewValue
    Set mBookmark=mFirstNode
    End property
    Public function NextItem()x
    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)x
    End function
    Public sub ResetmBookmark()x
    MBookmark=mFirstNode
    End sub
    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  3. #3
    adminmsp
    مدیر کل و موسس سایت
    تاریخ عضویت
    1970 Jan
    محل سکونت
    M.S.P Soft
    نوشته ها
    1,590
    759
    465
    ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش سوم

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

    Dim list as New Clist


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

    کد:
     Call list.InsertAtFront(ListMember.text)x

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

    کد:
     Call list.InsertAtBack(ListMember.text)x

    کد زير را برای رويداد کليک شدن دکمه ShowList بنويسيد :
    کد:
     
    Dim elements as New ClistIterator
    Set elements=list.Iterator
    If elements.HasMoreItems=false then msgbox ("list is empty")x
    Else
    While elements.HasMoreItems
    Msgbox(elements.NextItem)x
    Wend
    end if


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

    با M.S.P Soft به دنياي برنامه نويسي وارد شويد[برای نمایش لینک باید عضو شوید. ]
  4. #4
    massud
    كاربر عادي
    http://up.vbiran.ir/images/rgk38wbh3cfxod62rhr2.gifhttp://up.vbiran.ir/images/qndtfn66fcrrq7cw6yh.gifhttp://up.vbiran.ir/images/qndtfn66fcrrq7cw6yh.gifhttp://up.vbiran.ir/images/qndtfn66fcrrq7cw6yh.gifhttp://up.vbiran.ir/images/qndtfn66fcrrq7cw6yh.gif
    تاریخ عضویت
    2011 Dec
    نوشته ها
    1
    0
    0
    سلام چگونه ميشه در ماي اس كيو ال نويسه هاي فارسي رو با utf8_character_set ست كنيم،اگه كسي راهنمايي كنه ممنون ميشم.
نمایش نتایج: از 1 به 4 از 4

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

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

موضوعات مشابه

  1. نصب ويژوال بيسيک 6 بر روي ويندوز8
    توسط Prof.MohammadGh در انجمن برنامه نویسی در 6 VB
    پاسخ: 3
    آخرين نوشته: 2014-01-24, 06:53 PM
  2. دانلود سورس به دست آوردن All Information ويندوز با ويژوال بيسيک6
    توسط Prof.MohammadGh در انجمن برنامه نویسی در 6 VB
    پاسخ: 0
    آخرين نوشته: 2012-12-07, 10:42 AM
  3. دانلود سورس چک کردن آنلاين يا آفلاين بودن يک id ياهو با ويژوال بيسيک6
    توسط Prof.MohammadGh در انجمن برنامه نویسی در 6 VB
    پاسخ: 0
    آخرين نوشته: 2012-10-28, 09:43 AM
  4. آموزش سورس ماشين حساب ساده (با آرايه) با ويژوال بيسيک6
    توسط Prof.MohammadGh در انجمن برنامه نویسی در 6 VB
    پاسخ: 0
    آخرين نوشته: 2012-10-26, 11:18 AM
  5. آموزش به دست آوردن Max , Min در ويژوال بيسيک6
    توسط Prof.MohammadGh در انجمن برنامه نویسی در 6 VB
    پاسخ: 0
    آخرين نوشته: 2012-10-07, 11:30 AM

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

Content Relevant URLs by vBSEO 3.6.0 RC 2