تور لحظه آخری
امروز : چهارشنبه ، 14 آذر 1403    احادیث و روایات:  پیامبر اکرم (ص):كسى از شما حق ندارد از هيچ يك از يارانم چيزى به من بگويد؛ زيرا دوست دارم در حال...
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها

تبلیغات

تبلیغات متنی

صرافی ارکی چنج

صرافی rkchange

سایبان ماشین

دزدگیر منزل

تشریفات روناک

اجاره سند در شیراز

قیمت فنس

armanekasbokar

armanetejarat

صندوق تضمین

Future Innovate Tech

پی جو مشاغل برتر شیراز

آراد برندینگ

خرید یخچال خارجی

موسسه خیریه

واردات از چین

حمية السكري النوع الثاني

ناب مووی

دانلود فیلم

بانک کتاب

دریافت دیه موتورسیکلت از بیمه

طراحی سایت تهران سایت

irspeedy

درج اگهی ویژه

تعمیرات مک بوک

دانلود فیلم هندی

قیمت فرش

درب فریم لس

زانوبند زاپیامکس

روغن بهران بردبار ۳۲۰

قیمت سرور اچ پی

خرید بلیط هواپیما

بلیط اتوبوس پایانه

تعمیرات پکیج کرج

لیست قیمت گوشی شیائومی

خرید فالوور

پوستر آنلاین

بهترین وکیل کرج

بهترین وکیل تهران

خرید اکانت تریدینگ ویو

خرید از چین

خرید از چین

تجهیزات کافی شاپ

ساختمان پزشکان

محصولات فوراور

خرید سرور اچ پی ماهان شبکه

دوربین سیمکارتی چرخشی

همکاری آی نو و گزینه دو

کاشت ابرو طبیعی و‌ سریع

الک آزمایشگاهی

الک آزمایشگاهی

خرید سرور مجازی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

لوله و اتصالات آذین

قرص گلوریا

نمایندگی دوو در کرج

خرید نهال سیب

وکیل ایرانی در استانبول

وکیل ایرانی در استانبول

وکیل ایرانی در استانبول

رفع تاری و تشخیص پلاک

پرگابالین

دوره آموزش باریستا

مهاجرت به آلمان

بهترین قالیشویی تهران

بورس کارتریج پرینتر در تهران

تشریفات روناک

نوار اخطار زرد رنگ

ثبت شرکت فوری

تابلو برق

 






آمار وبسایت

 تعداد کل بازدیدها : 1837580469




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

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


واضح آرشیو وب فارسی:سایت ریسک: ozgor13-10-2006, 03:23 AMايجاد ساختارهاي داده اي در ويژوال بيسيک -------------------------------------------------------------------------------- بخش اول مقدمه : ساختارهاي داده اي از نظر تعداد اعضا به دو دسته استاتيک و ديناميک تقسيم مي شوند . ساختارهاي استاتيک مثل آرايه هاي يک بعدي و آرايه هاي دو بعدي ، تعداد اعضاي آنها در زمان طراحي برنامه مشخص مي شود و در طول اجراي برنامه ثابت است اما تعداد اعضاي ساختارهاي داده اي ديناميک در طول اجراي برنامه تغيير مي کند . ليست پيوندي ( 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 ) و نشان دهنده انتهاي ساختار داده است . ozgor13-10-2006, 03:24 AM-------------------------------------------------------------------------------- ليست پيوندي همانطور که گفته شد ليست پيوندي مجموعه اي از يکسري داده است که اين داده ها از نوع اشيا خودارجاعي هستند . ( هر شي خودارجاعي داراي يک متغير نوع 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 ozgor13-10-2006, 03:25 AM-------------------------------------------------------------------------------- مثالی از استفاده از کلاسهای ليست پيوندی : ابتدا کلاسهايي که در جلسه قبل معرفی شد را به پروژه تان اضافه کنيد . سپس در بخش کدنويسی فرمتان ، ابتدا يک شی از نوع کلاس 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 از بالاي پشته گره اي را حذف کرده و مقدار داده آن را بر مي گرداند . ozgor13-10-2006, 03:26 AM-------------------------------------------------------------------------------- کلاس پشته : همانطور که در بخش قبل گفته شد پشته نوعی ليست پيوندی است که گره هاي جديد فقط به انتهاي آن اضافه شوند . روالهاي اصلي پشته 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 __________________ ozgor13-10-2006, 03:27 AMصف : صف نوعي ساختار داده اي استکه گره ها از ابتداي صف ( سر صف 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 گفتهمي شود . درختهاي جستجوي باينري درخت هايي هستند که در آنها مقدار فرزند چپ هرگره کمتر از گره پدر و مقدار فرزند سمت راست هر گره بيشتر از گره پدر مي باشد. __________________ ozgor13-10-2006, 03:28 AM-------------------------------------------------------------------------------- کلاس درختهای جستجوی باينری برای ايجاد درختهای جستجوی باينری در ويژوال بيسيک نياز به ايجاد دو کلاس داريم : 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 __________________ ozgor13-10-2006, 03:29 AM-------------------------------------------------------------------------------- انواع روشهای پيمايش عناصر درخت : ۱ - روش 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 مي باشد . __________________ سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 385]

bt

اضافه شدن مطلب/حذف مطلب




-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن