کامپیوتر و IT و اینترنتعلوم مهندسی

ساختمان داده ها به زبان C

صفحه 1:

صفحه 2:

صفحه 3:
جايكاه درس در رشته كامبيود " ضرورت این درس: © ضرورت نیاز به زبانهای سطح بالا صرورت نیاز به زب 2 ۱ " ضرورت ترجمه برنامه های. نوشته شده با زبان سطح بالا به برنامه به زبان ماشین *" تنوع زبانهای برنامه نویسی سطح بالا * دروس پیش نیاز: ۴ نوع درس: اجباری © تعدادکل ساعات تدریس: ۳۰ © تعداد جلسات تدریس:۱۰

صفحه 4:
فصل اول : مفاهیم اساسی اهداف ۴ آشنایی با سيكل زندكى نرم افزار ۴ آشنایی با الگوریتم

صفحه 5:
۱-۱ سیکل زندگی نرم افزار-نیازمندی ها نیازمندیها ۴ تمام پروژه های بزرگ برنامه نویسی با مجموعه ای از مشخصات و خصوصیاتی که اهداف پروژه را مشخص می کند. شروع می شود. © اين نیازمندیها اطلاعاتی را به برنامه نویسان می دهند(ورودی) و نیز نتایجی را که باید ایجاد گردد(خروجی) تعیین می کنند.

صفحه 6:
WY ۱-۱ سیکل زندگی نرم افزار- تحلیل تحلیل: ۴ در این مرحله مساله را به بخشهای قابل کنترل تقسیم می کنند. ۴ در تحلیل یک سیستم دو شیوه وجود دارد : ‎-١‏ شيوه از بالا به يايين ‏۲- شیوه از پایین به بالا } ‎ ‎ ‎

صفحه 7:
-\ ۱ سیکل زندگی نرم افزار- طراحی طراحي این مرحله ادامه کاری است که در مرحله تحلیل انجام می شود. طراح سیستم را از دو نقطه نظر بررسی می کند: از نظرداده های مقصود(ع۳۳اه 0) مورد نیاز برنامه از نظر اعمللی که بر روی ‎UT‏ اتجام می شود. لين ديدكاه به مشخصات امه یی های طراحی الگوریتم نیاز دارد.

صفحه 8:
۱-۱ سیکل زندگی نرم افزار- .. ۳" پالایش(اصلاح) و کدنویسی: در لين مرحله. نمایشی برای داده های مقصد خود انتخاب می شود و برای هر عملی که بر روی آنها انجام می شود. الگوریتم نوشته می شود. بازپینی: در لین مرحله درستی برنامه ها اثبات می شود و برنامه ه با انواع داده های ورودی مختلف تست و خطاهای برنامه رفع می شود. جنبه های مهم بازبینی: ات رتم "تست ‎Bestest‏

صفحه 9:
۱-۱ نمودار سیکل زندگی نرم افزار

صفحه 10:
WY ‏تعریف الگوریتم‎ ۲-۱ الگوریتم مجموعه ای از دستورالعمل ها است که اگر دنبال شوند. موجب انجام کار خاصی می گردد گروه کامپیوتر ساختمان‌داده ها به نباری 7 صفحه: 10

صفحه 11:
۲-۱ شرایط الگوریتم ‎of‏ ورودی: یک الگوریتم می تواند هیچ یا چندین کمیت ورودی داشته باشد که از محیط خارج تامین می شود. ‎EE‏ خروجی: الگوریتم بایستی حداقل یک کمیت به عنوان خروجی داشته باشد. ‏لا قطعیت: هر دستورالعمل باید واضح و بدون ابهام باشد. ‏لا محدودیت: اگر دستوذالعمل های یک الگوریتم را دنبال کنیم .برای تمام حالات . الگوریتم بايد يس از طى مراحل محدودی خاتمه یابد. ‏لا كارليى: هر دستورالعمل بايد به گونه ای باشد که با استفاده از قلم و کاغذ بتوان كن را با دست نیز اجرا نمود. ‎ ‎ ‎ ‎

صفحه 12:
UY ‏مثالی از الگوریتم: الگوریتم مرتب سازی‎ ۲-۱ Por (FO 5 iS sit +){ @renview tet [i] to bet [od] ced suppose that the swulest fateyer is ot lt [erin]; Aeterctscrace tet [+ ] cre bt [srt]; ساختم‌انداده هابه زباری 6 صفحه: 12

صفحه 13:
۲-۱ الگوریتم باز گشتی تابع چیزی است که توسط تابع دیگر فراخوانده می شود ! توابع می توانند خودشان را صدا بزنند (باز گشت مستقیم يا مى توانند توابعى كه تابع فراخواننده را صدا میزنند(باز گشتی غيرمستقيم) را احضار نمايند. گروه کامپیوتر ساختمانداده ها به نبارل 8 صفحه: 13

صفحه 14:
2-1 مثال الگوریتم چستجوي دودويي int binsearch (int list [].int searchnum. int left. int right ) { /* search list [0] <= list [1] <= ... <=list [n-1] for searchnum Return its position if found. Otherwise return -1 */ int middle ; if (left <= right) { middle = ( left + right ) / 2; switch ( COMPARE ( list [ middle ] . searchnum )) case -1: return binsearch ( list . searchnum . middle +1. right ) ; case 0: return middle ; case 1: return binsearch ( list . searchnum . left . middle -1 ( : t return -1; إن |( صفحه: 14

صفحه 15:
۳-۱ آرایه . ساختار و نوع داده ( آوایه [ مجموعه ای از عناصر از يك نوع داده مى باشد ( ساختار [ مجموعه ای از عناصر است که لزومی ندارد داده های آن یکسان باشد ( نوع داد( مجموعه ای از انواع داده مقصد(طام) و عملکردهایی است که بر روی این نوع داده ها عمل می کنند 15 ۰ گروه کامپیوتر

صفحه 16:
WY ‏نوع داده ای مجرد‎ ۲-۱ © نوع داده مجرد يا انتزاعی (900/7)) که شامل مشخصات داده ها و اعمالى كه بر روى آنها انجام مى شود. *جهت جداسازی پیاده سازی و نمایش داده ها از یکدیگر. (aici Joe cere |} ‏گروه کامپیوتر‎ |

صفحه 17:
نوع داده مجرد 94 ۱- ایجاد کننده/ سازنده ۲- تبدیل کنندگان ۳- مشاهده کنندگان / گزارش کنندگان گروه کامپیوتر ساختمان‌داده ها به نباری ] صفحه: 17

صفحه 18:
۴-۱ تحلیل نحوه اجرای یک برنامه معیارهای محک زدن یک برنامه "۳ ن قسمت مربوط © آيا برنامه اهداف اصلى كارى را كه مى خواهيم انجام مى دهد؟ به تخمين های إنا 9 ‎Sas‏ حافظه و زمان © آيا برنامه درست كار مى كند' ‎nets‏ و © آيا برنامه مستند سازى شده است تا نحوه استفاده و طرز كار با آن مشخص شود؟ © آيا برنامه براى ايجاد واحدهاى منطقى . به طور موثر از توابع استفاده مى کند؟ © آيا كد كذارى خوانا است؟ ‎shel‏ برنامه می نامیم. ‏© آيا برنامه از حافظه اصلى و كمكى به طور موثرى استفاده مى كند؟ اميم. ‏آیا زمان اجرای برنامه برای هدف شما قابل قبول است؟ ‎ ‎ ‎ ‎ ‎

صفحه 19:
WY ‏میزان حافظه يا پیچیدگی فضای یک برنامه‎ ۴-۱ میزان حافظه یا پیچیدگی فضای یک برنامه مقدارحافظه مورد نیازبرای اجرای کامل یک برنامه است. میزان یا پیچیدگی زمان یک برنامه مقدار زمان کامپیوتر است که برای اجرای کامل برنامه لازم است. گروه کامپیوتر .. [ ساختم‌ازداده هابه نبا صفحه: 19

صفحه 20:
۴-۱ میزان حافظه فضای مورد نیاز یک برنامه شامل موارد زیر است : یازمندیهای ‎Gre‏ این مطلب به فضای مورد نیازی که به تعداد و اندازه ورودی و خروجی بستگی ندارد. اشاره دارد. نیازمندیهای فضای متغیر این مورد شامل فضای مورد نیاز متغیرهای ساخت یافته ای است که اندازه آن بستگی به نمونه | از مساله ای که حل می شود دارد. | گروه کامپیوتر ساختمانداده هابه نبا إل منت

صفحه 21:
WY ‏میزان حافظه(ادامه)‎ ۴-۱ نیازمندیهای فضای متغیر RP) =e SD نیازمندیهای فضای نیازمندیهای فضای بات ۳ گروه کامپیوتر ساختمانداده ها به نبارل 8 صفحه: 21

صفحه 22:
۴-۱ زمان (100 بنامه دزمان ‎re);‏ برنامه عبارتست ازمجموع زمان ‎gia‏ و ۱ زمان اجرای برنامه. كريد کامپایل مشابه اجزای فضای ابت است زیرابه خصیصه های نمونه بستگی ندارد. (0)ر1 را به صورت زیر تعریف می شود T,(@) =¢,ADQun) + c,SURn) + GLDAn) + ‏عیه‎ 147 گروه کامپیوتر ساختمانداده ها به نبارل 8 صفحه: 22

صفحه 23:
XI : ‏مرحله برنامه‎ ۴-۱ یک مرحله برنامه , قسمت با معنی برنامه است ( از لحاظ معنایی یا نحوی) که زمان اجرای آن مستقل از خصیصه های نمونه باشد | FEE Joe cere |} ‏گروه کامپیوتر‎ |

صفحه 24:
۴-۱علامت گذاری مجانبی(6, 0.6) ‎Asymptotic)‏ ________ انگیزه برای تعیین تعداد مراحل. قابلیت مقایسه پیچیدگی دو برنامه که یک تلبع را اجرا می کنند و پیش بینی رشد و افزلیش زمان اجرا با تغییر صفات نمونه می باشد. ‎(a)=O(q(a)) [Big “ok” [‏ لس خولنده می‌شود ( ۴و ب ‎“PoP ae big ob oP‏ اگر و فقط اگر به ازای مقادیر ثابتی از ‎ly Plo) ODE‏ تمامی مقادیز > کمتر یا مساوی (9) ‎(a2 oD) at‏ ‏گروه کامپیوتر ساختمانداده ها به نبارل 8 صفحه: 24 ‎ ‎ ‎ ‎ ‎

صفحه 25:
۴-۱علامت گذاری مجانبی(6, 0.6) ‎WY‏ ‏م9۳0۵ فلس 0)1(8 :۰ نمان‌محاسبه ثابتی‌را نشانمی‌دهد 8 (0)۳ :۰ یک تابع خطی نامیده می شود 9 (07 تابع درجه دو نامیده می شود قضيه : 2 +62 ...+ 3 < (1)31 د. پنابراین ۰ (0)57 - )1 خواهد بود گروه کامپیوتر ساختمان‌داده ها به نباری ] صفحه: 25

صفحه 26:
۴-۱ علامت گذاری مجانبی(6/ 0.6) 7 »۵ هکم تعریف امگا ‏ ۵0( می دادم شد ( کی( 1 و فقط اگر به ازای مقادیر ثلبت مثبت 7 و ()۰۳)0(2 ۷0 باشد(برای تمام مقادیر ‏ به شرطى كه 02000 باشد) ese 3 f() =a," +...+ aN+ & ‏اگر‎ a, > 0 ‏بود‎ daly: FU) =O7”) gal ple _ گروه کامپیوتر ساختمانداده ها به زبارن آ[ صفحه: 26

صفحه 27:
۴-۱ علامت گذاری مجانبی(0؛ 0.62) ‎(Asymptotic).‏ _________— تعريف ‎sof) = O(g(n) : [Theta]ls‏ باشد (خوانده مي شود ‎FC)‏ 5 («ه)و اگر و فقط اگر به ازاي مقادیر ابت ,6 و ,6 و .بط ‎o9>9 C,g(n)<= f(n) <= c,g(n)‏ داشته باشد (براي تمام ‎M>=N, polis‏ نشلنه گذاری تتا از دو نشلنه گذاری ذکر شده ‏ طه ‎big‏ “9 امگا دقیق تر می باشد . ((9))0 < (20 می باشد اگر و فقط اگر (900 هم به عنوان کرلنه بالا و هم به عنوان کرلنه پایین در (260 باشد. گروه کامپیوتر ساختمانداده ها به نباری 7 صفحه: 27

صفحه 28:
۴-۱ علامت گذاری مجانبی(6/ 0.6) 7 ‎iw (Asymptotic)‏ سم a,,>0 9 Aad =a, 7" +...+ ant a ‏اكر‎ ‏بنابراين (0)27©- (7)/خواهد بود‎ گروه کامپیوتر ساختمان‌داده ها به نباری ] صفحه: 28

صفحه 29:
۴-۱ مثال(پیچیدگی جمع ماتریس ها) ۳ ‎Asymptotic Statement‏ ‎complexity‏ Void add (int a []JMAX- SIZE...) } @(rows) sint Ij @(rows.cols) For(i=0;i<rows ; i++) @(rows.cols) G+For[j=0 ; j<cols ; j اختمانداده هابه ‎Qty‏ صفحه: 29

صفحه 30:
۵-۱روش های اندازه گیری زمان رویدادها در 7 دو روش متفاوت وجود دارد : :ف روش و مدل اول از ساعت (سسها) برای زمان بندی رویدادها استفاده می کند. این تابع . زمان تلف شده از آغاز برنامه به وسیله پردازنده را می دهد. برای زمان بندی یک رویداد دوبار از ساعت استفاده می شود. یک مرتبه در ابتدای رویداد و یک مرتبه در انتهای آن. ف روش یا مدل دوم از استفاده می کند. لین تلبع . زمان را بر حسب ثانیه به عنوان نوع پیش ساخته 4ج برمی گرداند. بر خلاف عه . اساه فقط یک پارامتر دارد که به وسیله آن موقعیتی را که زمان باید نگهداری شود . مشخص می کند.

صفحه 31:
۵-۱ تولید داده های آزمایشی پرای ایجاد بدترین حالت اجرا 7 ایجاد داده های آزمایشی که منجر به بدترین حللت اجرا می شود . همیشه ساده نیست. 9 در بعضی از موارد لازم است که از یک برنامه کامپیوتری برای ایجاد بدتریت حالت استفاده می شود. 9 برای هر مجموعه مقادیر از صفات نمونه مورد نظر . یک داده آزمایشی تصادفی با عددی به اندازه کافی بزرگ ایجاد می کنیم زمان اجرای هر کدام از اين داده های آزمایشی به دست می آید گروه کامپیوتر ساختمان‌داده ها به یبای ] صفحه: 31

صفحه 32:
فصل دوم ۰ آرایه ها در این فصل دانشجو با کاربرد موارد زیر آشنا خواهد شد: ‎all ©‏ ۳ ساختار نا 5 ۴ ماتریس اسپارس 8 رشته ساختمانداده هابه زباری 6 صفحه: 32

صفحه 33:
فصل دوم ‎alt:‏ ها 9 ساختارها > آرایه مجموعه ای از زوج ها . شامل اندیس و مقدار است (<صلس . »طكح:>) . به ازاى هر انديس یک مقدار مربوط به آن اندیس وجود دارد که به زبان ریاضی آنرا تناظر یا انگاشت نامیده می شود. در رابطه با آرایه به دو عمل اساسی نیاز است :

صفحه 34:
۱-۲ آرایه ها < تابع (ا [)2) :یک آرایه جدید تهی با طول مناسب را تولید می کند. تمتم مقادیر در ابتدا تعریف نشده اند. ‎Ke: Retrieve abi‏ آرايه ويى انديس رابه عنوان ورودى دريافت مى كند و يك مقدار مربوط به انديس را اكر انديس معتبر باشد برمیگرداند و گرنه یک خطا را بازمی گرداند. ‏تلبع و : برای وارد کردن زوج جدیدی شامل < اندیس, مقدار > به كار مى رود و آرايه اوليه افزايش يافته با زوج جديد.<مقدارءانديس > را بازمى كرداند. ‏گروه کامپیوتر ساختمان‌داده ها به یبال ] صفحه: 34 ‎ ‎ ‎ ‎ ‎ ‎

صفحه 35:
WY ‏آرایه ها‎ ۱-۲ آرایه در زبان © به صورت مثال در زیر آمده است : ‎int list [5]‏ C= در زبان 2) تمام آرایه ها از اندیس ۰ شروع می شوند. ساختمانداده ها به زباری ‏ صفحه: 35

صفحه 36:
ساختارها 8 آرایه ها مجموع داده های از یک نوع می باشند. در 0 روش دیگری برای دسته بندی گروهی از داده وجود دارد . اين روش اجازه می دهد تا داده ها از انواع متفاوتی باشند. اين امکان را ‎ virwt‏ گویند كه مختصر جاص اح است. قا يى ساختار مجموعه اى از اقلام داده ها مى باشد كه هر قلم داده به وسيله نوع و نام آن مشخص كرديده است. | گروه کامپیوتر ساختمانداده هابه نبا إل عتما

صفحه 37:
WY ساختارها ‎Struct{‏ ‎char name[10];‏ ‎int age;‏ ‎float salary;‏ ‎}person‏ متغیری به نام 0 ایجاد می کند که دارای سه فیلد متفاوت است : © نام شخص به صورت یک آرایه کاراکتری است . ۶ یک مقدار صحیح که نشان دهنده سن همان شخص است.

صفحه 38:
یونیون ها اعلان یونیون مشلبه تعریف و اعلان یک ساختار است با این تفاوت که فیلدهای یک یونیون باید در حافظه با هم مشترک باشند یعنی فقط یک فیلد یونیون در هر زمان فعال می گردد.

صفحه 39:
WY ۳ ‏ساختارهای خود ارجاعی‎ یک ساختار خودارجاعی ساختاری است که در آن یک جز پا بیشتر ۰ اشاره گری به خود آن می باشد. ساختارهای خود ارجاعی معمولا به روالهای مدیریت حافظه پویا احتیاج دارند (عص عصاهجم) تا به راحتى حافظه را گرفته و آزاد کنند.

صفحه 40:
WY ساده ترین و متداول ترین نوع ساختمان داده ها . لیست های مرتب شده یا خطی هستند. ليست ها شامل اقلام داده په صول(بع617ر... 66171 ,وتعط) باشند. مثال : a * روزهای هفته ( شنبه ... جمعه ) ۳۹ Joe cere |} ‏گروه کامپیوتر‎ |

صفحه 41:
اعمال صورت كرفته بر روى ليست ها 5 ‎lay &‏ كردن طول یک ليست ‏© خواندن اقلام داده يى ليست از جب به راست يا بر عكس ‏۶ بازیابی !امین عنصر از یک لیست (۰2<۰ > 4 ‏# تعویض یک قلم اطلاعاتی در !امین موقعیت یک لیست (۰< ۰ 5 4 ‏#۶ درج یک قلم داده جدید در !امین موقعیت یک ليست (20 ه > 4. ‏( اقلام داده ای که قبلابه صورت .... ۰+0 ! شماره گذاری شده لند به صورت) ه..... 6+ )+ در مى آيند) ‎Gio &‏ يك قلم اطلاعاتى از ‎١‏ امين موقعيت يك ليست ‎<2١(‏ > > 4 . اقلام داده , ).ءءء به اقلام داده با شماره ...1+0 تبدیل می شود. ‏كروه كامبيوتر اساعتبازد انف هيه زبار©) اك ‎ ‎ ‎ ‎ ‎

صفحه 42:
متداول ترین پیاده سازی . نمایش یک لیست مرتب شده به صورت یک آرلیه می باشد به نحوی که عنصر لیست 161۲ با اندیکس ! آرایه متناظر باشد. این مطلب یک نگاشت ترتیبی نامیده می شود. | FE Joe cere |} ‏گروه کامپیوتر‎ |

صفحه 43:
WY ‏ماتریسسپلیس‎ ADT به طور کلی در ریاضیات . یک ماتریس شامل ۰۶ سطر و » ستون بوده و می تواند مانند شکل زير نمایش داده شود. &€ 9 -6۶ | 0 ربهر ‎QO 08 ©-‏ | 0 هر ‎٩ | 09 68- 0‏ ,سر © © 8 | 9 هر ‎rw F \ FO CP‏ ‏ميو هده ‎ ‎

صفحه 44:
1077 ماتریسسپایس در علوم کامپیوتر متداول ترین نمایش برای ماتریس آرایه دوبعدی است که به صورت [,0/000(_)00[000:00 نمایش داده می شود. هر عنصر ماتریس به صورت 0 نمایش داده می شود. ماتریسی که عناصر صفر ن زیاد بوده ماتریس اسپارس نامیده می شود. حدلقل اعمال ممکن شامل ایجاد. جمع ۰ ضرب و نرانهاده مانریس می باشد. | گروه کامپیوتر ساختمانداده هابه نبا إل |

صفحه 45:
WY ‏ماتريسراسيايوس‎ 077 مى توان هر آرايه رابا استفاده از سه كلنه ذخيره نمود اين بدان معنا مى باشد كه مى توان يك آرايه از سه كانه ها را براى نمايش يك ماتريس اسيارس بيشنهاد كرد. ‎J‏ گروه کامپیوتر ‎J Os ob stor. J‏ مستا ‎ ‎

صفحه 46:
ترانهاده یک ماتریس برای پیدا نمودن ترانهاده یک ماتریس بلید جای سطرها و ستون ها را عوض کرد بدین مفهوم که هر عنصر |[ در ماتریس اولیه به عنص راط در ماتريس ترانهاده تبديل مى شود. ” الكوريتم زير براى بيدا كردن ترانهاده يك ماتريس ‎٠‏ الكوريتم مناسبى است : واد خ ‎Por dl ebwed‏ + حصله ‎phae ebwed <1. j‏ حصامس . | > مومحاد | گروه کامپیوتر ال ساختمانداده هب ‎JO‏ |

صفحه 47:
ترانهاده یک ماتریس الگوریتم بیان شده نشان می دهد که ‎plod tab‏ عناصر در ستون ۰ را بيدا و آنها را در سطر ۰ ذخیره کرد همچنین تمام عناصر ستون ‎١‏ را بيدا و در سطر ۱ قرار داد و همین فر آیند را ادامه داد. از آنجا که ماتریس اولیه سطری بوده لذا ستون های داخل هر سطر از ماتریس ترانهاده نیز به صورت صعودی مرتب می شود. گروه کامپیوتر ساختمانداده ها به زبارن ‎Bh‏ صفحه: 47

صفحه 48:
تحلیل ترانهاده ۳ تعیین زمان اجرای لین الگوریتم از آنجا که حلقه های تودرتوی ۳۲ عامل تعیین کننده می باشد . آسان است. حلقه ۳ خارجی اص.[0]0 مرتبه تکرار می شود که اص,[010 حاوی تعداد ستون های ماتریس اولیه است. علاوه بر لین . یک یک تکرار حلقه داخلی ۳۳ به زملنی برابر باصالسد[0/0 نیاز دارد که در اینجا , صالد[0/ تعداد عناصر در ماتریس اولیه است. بنابراین زمان کلی برای حلقه های تودرتوی 0 برابر با حاصل ضرب ستون ها در عناصر (5-طك./ح-) مى باشد. بنابراین زمان اجرا به صورت ۰ (حفسحاه ادم) خواهد بود. گروه کامپیوتر ساختمانداده ها به نبارل 8 صفحه: 48

صفحه 49:
WY ‏ضرب ماتریس‎ با توجه به ماتریس های مشخص و معلوم 9 وظ) . فرض کنید که © یک ماتریس 7*7 و 0 یک ماتریس 77 باشد آنگاه ماتریس حاصل ضرب 00 دارای ابعاد 2 است و عنصر <ز> آن به صورت زیر تعریف مى شود : برای ۰< 0 > [ و ۰ < ۲ > [ اقلا نکته : حاصل ضرب دو ماتریس اسپارس ممکن است یک ماتریس اسپارس نباشد.

صفحه 50:
روال1101101116 در روال الك ماتريس هاى 09 و©) را ضرب كرده و با توجه به توضیحات حاصل ضرب را در 0) قرار می دهیم. 0 ۵«) به عنولن‌ماتریس‌هایلسپایس‌به ترتیبدر آرلیه های 4 ۰۳ ) ذخیره می‌شوند ا گروه کامپیوتر }| ‎Joe cere‏ م

صفحه 51:
نمایش آرایه های چند بعدی روش سطری دو راه متداول برای نمایش آرایه های چند بعدی وجود دارد : روش ستونی در روش سطری آرلیه های چند بعدی را به وسیله سطرهای آن ذخیره می کنیم. ‎er‏ آرلیه دو بعدی 0۳067[]110۳6نلن می دهد که دارای سط )11212 )1 ‎TOW, FOY,...TOW po.‏ به نحوى كه هر سطر ‎bb ee HABE alts‏ | گروه کامپیوتر }| ‎Joe cere‏ م

صفحه 52:
نمایش آرایه های چند بعدی اگره آدرس ۸00 باشد. بنابراین آدرس ۱۰ +6 , [۸]۱[]0 0 خواهد بود. 8 برای نمایش یک ‎|Adppetluppeltuppegis, a. all‏ به عنوان ‎WAP BiaLT‏ با ابعاد در ‎UPPEESIDP Bs‏ ل كروه كامبيوتر _ألساختمانداده ماب نبا إل صفحه 32 ]

صفحه 53:
نوع داده مجرد رشته ای(۸۳ ‎(STRING‏ از دیدگاه ۸4/27 یک رشته به ‎Bot yuo‏ ريف می گردد به نحوی که کارازلگرهای اخذ شده از مجموعه کاراکترهایزبان برنامه نویسی می باشد. اگر 0 باشد.5 یک رشته تهی می باشد. گروه کامپیوتر ساختمانداده ها به نبارل 8 صفحه: 53

صفحه 54:
نوع داده مجرد رشته ای(۸ ‎(STRING‏ عملکردهای مناسب و مفیدی وجود دارد که می توان برای رشته ها تعریف کرد مانند : ایجاد یک رشته تهی جدید اندن یا نوشتن یک رشته ضمیمه کردن دو رشته به یکدیگر سس کپی کردن یک رشته مقایسه رشته ها درج كردن يك زير رشته به داخل رشته برداشتن یک زیر رشته از یک رشته مشخص مختص = = = ل ل ل ل 1 بيدا كردن يك الكو( حهح) يا عبارت در يك رشته

صفحه 55:
نوع داده مجرد رشته ای(۸7 6117016) نحوه ذخیره سازی در حافظه : ‎char s[{] = {"dog’{ ;‏ ‎ s[2]‏ [5]1 [5]0 ‎q 2 d‏ لا ‎ ‎ ‎ ‎ ‎ ‏نمایش رشته در زبان 6 ‎J‏ گروه کامپیوتر ‎J Os ob stor. J‏ 5م ‎ ‎ ‎ ‎

صفحه 56:
مثال ۰ درج رشته ۳ می خواهیم رشته ا را در موقعیت رشته < جای دهیم : 2 ۱۱۱۸۰۱ ۰۱۱6۱ ° ‎-llo| t|u‏ : ۱ 5 02 |— 7ج ‎After‏ ‏۳۱۳۹ غلا مب موی ‎after‏ ۲ ‎str¢at| a ۳3[‏ اب مج ۷۱ ۱ ۶ 0۱ ۰1161111010۱8۱ گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 56

صفحه 57:
(Pattern Matching), 3.U5 فرض كنيد که دو رشته داریم ۰ 2۷۱ ولج به نحوی ۳ یک الگو يا «طاه۲ بوده و باید در 2۳ پیدا شود. ساده ترین ‎Gly oly‏ تعیین اينکه آیا ۵ در رشته وجود دارد یا خیر . استفاده از تابع کتابخانه ای 2۲24 می باشد. با وجود اينکه 290 برای تطلبق عبارت مناسب به نظر می رسد . دو دلیل عمده برای نوشتن تابع تطابق الگو وجود دارد : ‎ali‏ فصو ‎ly‏ ) 0069). جدید بوده و ممکن است که در کامپایلر موجود نباشد. ‏چندین روش برای پیاده سازی تابع تطابق الگو وجود دارد. ‏گروه کامپیوتر ساختمانداده ها به نباری 7 صفحه: 57 ‎ ‎ ‎ ‎ ‎ ‎

صفحه 58:
c- غیر موثرترین روش . تست متوللی هر کاراکتر رشته تا زمان پیدا شدن الگو و یا رسیدن به انتهای رشته . می باشد. اگر ۲ در ود نباشد. این روش دارای زمان محاسباتی ۳(۰») خواهد بود که در آن " طول او طول 9۲۱ می باشد. | گروه کامپیوتر }| ‎Joe cere‏ منتها

صفحه 59:
فصل سوم : صف وپشته ۴ آشنایی با پشته © آشنایی با صف ۴ ارزشیابی عبارات

صفحه 60:
WY ‏فصل سوم : پشته و صف‎ پشته و صف . حالات خاصی از نوع داده عمومی یعنی لیست های مرتب شده , می باشند. پشته یک لیست مرتب شده ای است که جایگذاری و حذف از یک سمت آن که 9 (بالا) نامیده می شود , صورت می گيرد. "در يشته اى مانند,ق....,ر2 5 عنصاو بايبنى و عنصر بالاياقٌ مى باشد. | گروه کامپیوتر ال ساختمانداده هب نیال | تع

صفحه 61:
*#*محدودیت کار با پشته ما را ملزم می کند که اگر عناصر »,2 رابه ترتیب به پشته اضافه کنیم . 2 اولین عنصری خواهد بود که که از پشته حذف می گردد. **از آنجا که آخرین عنصر وارده به پشته , اولین عنصر حذف شده از آن می باشد . پشته را به عنوان یک لیست ۲/۳0 (آخرین ورودی . آخرین خروجی ) می شناسیم. گروه کامپیوتر ساختمانداده ها به نبارل ۴ صفحه: 1

صفحه 62:
‎ #‏ | 6۵8 | سا ‎0 0 ۳ top |D ‏بع‎ C |top |C c 3 8 ۱۴۰۵ 8 8 B B top A A A A A A ‏حذف و جایگذاری عناصر در یک پشته ‏| گروه کامپیوتر ال ساختمانداده هب ‎JO‏ ‎ ‎ ‎ ‎ ‎

صفحه 63:
5 ‏ساختار نوع داده مجرد پشته‎ 5 ructure ack is, fue 5: ‏نت‎ ordered list with zero or more elements. Silas tack Stack item — element .max Stack, size positive Sta reateS(max si Sti ick size)::= Creat an em stac se maxi eeu IsFull 1 ck.max_stack size Dumb er of elements‘in stat! return TRU. e 59 jume size is max_stack_size ax_stack_size) IsFu eh full else Insert ite! ag Fop of stack and return Boolean jean cea 5 ‏ی‎ 1 n turn max_s stack_size) El nant an re Em, erect return else rer ve and return the item on the top of the stack گروه کامپیوتر ساختمانداده ها به نباری

صفحه 64:
پیاده سازی پشته راحت ترین روش پیاده سازی لین 902 . استفاده از یک آرایه ‎cue! Stack[MAX_STACK_SIZE] pli 4s 530 Ss‏ ‎aSla> (MAX STACK SIZE] s‏ تعداد عناصر آرلیه مى باشد. اولین یا پایین ترین عنصر پشته در[5]316]0 ذخیره . دومی در [6]1» و !امین عنصر در ‎Stack[i-1]‏ ذخیره می گردد.همراه با آرلیه . یک متغیر به نام 7 وجود دارد که به عنصر بالایی پشته اشاره می کند. در ابتدا به 9۳ مقدار ۱- داده می شود که نشان دهنده یک پشته خللی است. با این نمایش . می توانیم عملکردهای ساختار را به صورت زیر پیاده سازی کنیم : گروه کامپیوتر ساختمانداده ها به نبارل 8 صفحه: 64

صفحه 65:
پیاده سازي پشته ۳ Stack CreatS(max_stack_size)::= #define MAX_STACK SIZE 100 /* maximume stack size*/ 3 3 typedef struct { int key; /* other fields*/ }yelement; Element stack [MAX_STACK_SIZE]; int top = -1; Boolean IsEmpty(Stack)::=top<0; BRR SAA CK siZehwlliStack)ie= top >=

صفحه 66:
جايگذاري به یک پشته Void add (int *top «element item) { /* add an item to the global stack */ if (* top > = MAX_STACK_SIZE-1) { stack_full(); return; } stack [++*top] = item; }

صفحه 67:
حذف از یک پشته element delete (int * top ) { ‎the top element from the‏ را ‎if (* top == -1)‏ ‎tack t > /* ret eS a _empty (); /* returns an ‎return stack [( * top)--]; ‎} ‏| گروه کامپیوتر }| ‎Joe cere‏ صع ۳3 ‎ ‎ ‎

صفحه 68:
WY صف 22و صف یک لیست مرتب شده است که تمامی جایگذاری آن از یک سمت و تمام حذف های آن از سمت دیگر انجام می شود. درصف 2.۰.۰2۱ 2 شاصر اقتدا (۳۵) و دوه عنصر انتها (#) مى باشد و :1د كنار قرار داد ‎a<72-)‏ | گروه کامپیوتر }| ‎Joe cere‏ صعب |

صفحه 69:
WY is ‏صف‎ محدودیت صف این است که ما ‎BOOM‏ را به ترتیب اضافه مى کنیم در حالی که 9 اولین عنصری است که حذف می شود. ‎rea‏ زم وهم ها مومهم ها ‎C c D‏ | ۲و6 ‎Bic ce‏ » م ۳63۳8 ‎front front front front‏ ‎A front| A A A B‏ ‏درج و حذف عناصر از یک صف ‏_ گروه کامپیوتر ساختمانداده ها به یبای ] صفحه: 69 ‎ ‎ ‎ ‎ ‎ ‎

صفحه 70:
از آنجا که اولین وارد شده به یک صف . اولین عنصری است که خارج مى شود . صف را به عنوان ليست های ۴1۴0 ( اولین ورودی. اولین خروجی ) در نظر می گيرند.

صفحه 71:
WY ۱ ‏جايگذاري در صف‎ Noid addq ( int * rear « element item ) { /* add an item to the queue */ nt if (* rear ==MAX_QUEUE SIZE - queue_full(); retyrn; } queue[++* rear] = item; گروه کامپیوتر ساختمان‌داده ها به نباری ] صفحه: 71

صفحه 72:
حذف عنصري از یک صف element deleteq (int *front .int rear ) { /* remove element at the front of the queue */ if (* front == rear ) return queue_empty (); /* return an error key */ return queue [==* front]; } | گروه کامپیوتر ال ساختمانداده هب ‎(acs JO‏

صفحه 73:
WY (MAZING) p> 9 ‏مساله مسیر پر پیچ‎ " بهترین راه نمایش مسیر فوق یک آرلیه دو بعدی است که صفرهای آن نشان دهنده پیچ و خم های مسیر می باشد. " يى مسير ير بيج و خم («2م) با ابعاد #۳ به یک آرایه (۵+)(۳+۲)_نیاز دارد. ورودی در موقعیت [۱[]1] و خروجی در موقعیت [][0]] می باشد. | گروه کامپیوتر ال ساختمانداده هب نیال | منت

صفحه 74:
WY اندازه ‎pane Leal Ole} (are) pF 9 Sey seme‏ را تعیین می کند . از آنجا که هر موقعیت درون مسیر بیش از یک بار مشاهده نمی شود . بدترین حللت پیچیدگی الگوریتم به صورت + ‎est (Wp)‏ باشد به نحوى كه © و م۲ تعداد سطرها و ستون های مسیر است. | EE Joe cere |} ‏گروه کامپیوتر‎ |

صفحه 75:
WY ‏ارزشیاپی عبارات‎ در هر زبان برنامه سازی برای ارزیاپی صحیح عبارات . به هر عملگر اولویتی نسبت می دهیم. حال در هر جفت پرانتز ؛ اول عملگرهایی که دارای اولویت بالاتر هستند ‏ ارزشیابی می شوند . | گروه کامپیوتر }| ‎Joe cere‏ تست

صفحه 76:
/ اولویت عملگرها 7 1 شکل مقابل نشان دهنده اولویت ‎ae‏ ‏عملگرها در زبان ۲ می باشد. ‎wi‏ | گروه کامپیوتر }| ‎Joe cere‏ سحتتت|

صفحه 77:
WY infix ‏روش‎ روش استاندارد نوشتن عبارات به عنوان ۳ معرفی و شناخته می شود چرا که در این روش عملگرهای دودویی را در بین دو عملوند قرار می دهیم. | گروه کامپیوتر ال ساختمانداده هب نیال | م

صفحه 78:
نشانه گذاری ‎postfix‏ WY دراین روش هر عملگر بعد از عملوند های مربوطه ظاهر می شود Infix Fever a*b+5, Var(Ver) a*b/c cx(e-a)sx(a/(b-c+d))) a/b-c+d*e-a*c گروه کامپیوتر Postfix +۴۲ vab*5 Brey) ab*c swabc-d+/ea-*c ~xab/c-de*+ac

صفحه 79:
خصوصیات. > 005 عبارات برای ارزیلبی از چپ به راست پویش می شوند. عملوندها تا مشاهده یک عملگر, داخل پشته قرار می گیرند. سپس تعداد لازم از عملوندها را از پشته خارج و پس از انجام عملکرد مربوطه . نتیجه را دوباره به داخل پشته منتقل می کنیم . لین کار را ادامه پیدا می کند تا به انتهای عبارت برسیم. | گروه کامپیوتر ال ساختمانداده هب ‎EE JO‏ |

صفحه 80:
UY postfix 4, infix ‏الگوریتم تبدیل‎ می توان الگوریتمی برای تبدیل یک عبارت »۳ به و۳ به صورت زیر بیان نمود : ۱- پرانتزگذاری کامل عبارات ۲- انتقال همه عملگرهای دودویی به نحوی که با پرانتز بسته مربوطه سنمت رانت آن تعویض شوند ۳- حذف تمام پرانتزها | FEZ Joe cere |} ‏گروه کامپیوتر‎ |

صفحه 81:
تبدیل عبارت ۲*ط0۴۳ به نشانه گذاری ۳۳۶۸ Token eos Top Output a a ab ab abc abe WY

صفحه 82:
مثال تبدیل ٩*(۲)*ه‏ به نشانه گذاری ‎posPix‏ Token elo ‏سواه‎ C1 Stack 1 11 Top Output WY

صفحه 83:
postfix ‏تحلیل‎ فرض كنيد تعداد نشلنه ها در عبارت باشد , برای خارج ساختن نشانه ها و انتقال آنها به خروجی نیاز به (0)0 می باشد. بنابراین بيجيدكى تابع »*#ومم به صورت (0)0 خواهد بود. | گروه کامپیوتر }| ‎Joe cere‏ مم

صفحه 84:
فصل جهارم: ليست ها = آشنايى با اشاره كر ها 7 ليست ها و لییست حلقوی ۴ روابط هم ارزی 7 لیست پیوندی دوگانه

صفحه 85:
فصل چهارم : لیستها ۱ ویژگی های نمایش ساختمان داده ها با استفاده از آرایه و نگاشت ترتیبی: خاصیت لین نحوه نملیش آن بود که عناصر پشت سرهم داده مقصود با فواصل ثابت ومعینی ذخیزه می شدند. بتابراین:: # گرا ‎LOG sigs yo Go pate gual‏ باشد. (1+1) امین عنصر. در نمایش حلقوی در موقعیت+(2 ‎Aes ( 9060606086‏ گرفت . # اكر بالاترین عنصر پشته در مکان ‎kdl‏ يايين ترين عنصر در مکان خواهد بود. ‎‘OP‏ LOGop- گروه کامپیوتر ساختمان‌داده ها به نباری ] صفحه: 85

صفحه 86:
مشکلات نمایش ترتیبی ۱- حذف و درج عناصر در آرایه ها بسیار وقت گیر است وقتی‌دارلی‌چندین!_یستعرتبشده با طول‌هایم تفاوت 6 هستیم باذخیره کردن‌هر لیستهر آرلیه لعبا حداکثر اندازه , حافظه هدر می رود ۳- با نگهداری لیستها در یک آرایه . انتقال حجم زیادی از داده ها لازم است. | گروه کامپیوتر ال ساختمانداده هب نیال | م

صفحه 87:
نمایش پیوندی ۳ راه حل مناسب برای حل مشکل شیفت داده ها در نگاشت ترتیبی . استفاده از نمایش پیوندی می باشد. بر خلاف نمایش ترتیبی که عناصر در فواصل ثابتی از هم قرار می گرفتند. در لیست پیوندی عناصر می توانند در هر جای حافظه قرار گيرند. برای دستیابی صحیح به عناصر یک لیست . بایستی به همراه هر عنصر. آدرس یا موقعیت عنصر بعدی نیز ذخیره شود. بنابراین برای هر عنصر » اشاره گری به عنصر بعدی در لیست وجود دارد. | گروه کامپیوتر ساختمانداده هابه نبا إل |

صفحه 88:
UY ‏اشاره گرها‎ مهمترین عملگرهای استفاده شده با نوع اشاره گر عبارتند از : © © عملگر آدرس © * عملكر غير رجوعى (وواصمحم ىواصلا عم مشسطم) te pit te" pt آنگاه !یک متفیر صحیح و ام یک اشاره گر به یک متغیر صحیح است. نه حامر ۷ آدرس ؛ را بركشت و به ان مقدار ام را نسبت مى دهد.

صفحه 89:
خطر استفاده از اشاره گرها در هنگام برنامه نویسی به زبان 2) بهتر است که تمام اشاره گرهایی را که عملابه جایی اشاره نمی کنند را برابر مابل060) قرار دهیم. این عمل از تلاش برای دستیابی به قسمتی از حافظه که خارج از دامنه برنامه شما بوده و یا شامل اشاره گری به یک داده مقصود قابل دسترسی نیست . جلوگیری می کند. | گروه کامپیوتر ال ساختمانداده هب نیال | عتما

صفحه 90:
استفاده از حافظه پویا( استفاده از60ظ) 5 در یک برنامه ممکن است خواسته باشیم فضای لازم برای ذخیره کردن اطلاعات را در نظر بگيریم. هنگام برنامه نویسی ممکن است ندانیم چه میزان فضا لازم داشته یا نخواسته باشیم فضای بسیار زیادی که احتمال دارد استفاده نشود را تخصیص دهیم. برای حل این مشکل . زبان) در زمان اجرا از مکانیزمی به نام چم ‎ly‏ ‏تخصیص حافظه استفاده می کند.

صفحه 91:
استفاده از حافظه پویا( استفاده از 850) 3 هر زمان که نیاز به حافظه جدیدی باشد . می توان تابعی به نام -ط را فراخوانی و مقدار فضای لازم را درخواست کرد. اگر حافظه لازم وجود داشته باشد . اشاره گری به ابتدای ناحیه حافظه مورد نیاز بر گردانده می شود. زملنی که دیگر نیازی به آن حافظه نباشد . می توان ن رابا فراخوانی تابعی به ‎Pree pl‏ آزاد نمود. | گروه کامپیوتر ال ساختمانداده هب ‎FE JO‏

صفحه 92:
لیست های تک پیوندی ليست های پیوندی معمولا به وسیله گره هایی متوللی با اتصالاتی که به صورت فلش هایی نشان داده شده اند ارایه می گردند. از نام اشاره كر به اولين عنصر ليست به عنوان نام كل ليست استفاده مى شود. بنابراین لیست شکل زیر 28 نامیده می شود. | گروه کامپیوتر }| ‎Joe cere‏ م

صفحه 93:
ليست هاى بيوندى روش معمول برای ۱ لیست پیوندی vat, ‘NULL هرد sat cat WY (۱) گره ها واقعا در مکانهای پشت سر هم حافظه قرار نمی گیرند (۲) موقعیت گره ها در اجراهای مختلف می تواند تغییر کند FEZ Joe cere |} ‏گروه کامپیوتر‎ |

صفحه 94:
مثال مراحل درج کلمه ۳ بین لت و 9 به صورت زیر است : ۱- گره ای را که اخیرا استفاده نشده در نظر گرفته , فزض کنید که آدرس آن للحم باشد. ۲- فیلد داده این گره را برابر با 0 قرار دهيد ۲- فیلد اتصال ۸۹ را طوری تنظيم كنيد که به ادرسی که در فیلد اتصال گره حاوی ‏ می باشد. اشاره کند ۴- فیلد اتصالء گره حاوی ۱" را طوری تنظیم کنید که به ۵ اشاره کند. و گروه کامپیوتر WY

صفحه 95:
(Cat 51s, mat ‏مثال(درج گره‎ نحوه تغییر لیست بعد از اضافه كردن 4 در شکل زیر نشان داده شده است :

صفحه 96:
حذف ]102 از لیست برای انجام لین کار فقط لازم است که عنصر قبل از 4 یعنی ل را پیدا و فیلد اتصال آنرا طوری تنظیم کنیم که به گره ای اشاره کند که در حال حاضر اتصال كره 4 به ان اشاره دارد( شکل زیر ) f= NULL | گروه کامپیوتر ال ساختمانداده هب ‎FEZ JO‏

صفحه 97:
WY ‏امکانات لازم برای ایجاد لیست پیوندی‎ 9 مکانیزمی برای تعریف ساختار گره ها یعنی فیلدهایی که در گره وجود دارد 9 روشی برای ایجاد گره هایی که مورد نیاز می باشد 9 روشی برای آزاد کردن گره هایی که دیگر مورد نیاز نمی باشد | FE Joe cere |} ‏گروه کامپیوتر‎ |

صفحه 98:
جاب يك ليست ۳ Void print_list (list_pointer ptr) print f (" The list contains: " ); for (; ptr; ptr = ptr -> link) print f (" %4d ۳ ۰ 0۲۲ - >data); print f ("\n" ); گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 98

صفحه 99:
top 1 elemen_link front | elemen link انداده ها به زباری

صفحه 100:
WY delete ‏تابع 200 و‎ تولبع له و صعط عناصری را به پشته اضافه و از آن حذف می كنند. كد کردن هر یک از این تولبع . کار ساده ای می باشد. در هر دو تلبع آدرس ۲ط رابه گونه ای تغییر می دهیم که به عنصر بالایی پشته اشاره کند. تابع له یک گره جدید به نام مسا ایجاد نموده . ‎tee‏ ‏را در فیلد داده و م9 را در فیلد اتصال قرار می دهد سپس متغير 7ط براى اشاره كردن به 677 تغيير مى كند گروه کامپیوتر ساختمانداده ها به نباری ‏ صفحه: 100

صفحه 101:
تابع 06186 تلبع صعاط . عنصر را برگشت و 9۳۲ را عوض می کند تا به آدرسی که در فیلد اتصال ن قرار دارد , اشاره کند سپس گره حذف شده به حافظه سیستم بر گشت داده می شود. | گروه کامپیوتر ‎ob ttre‏ نبا سنج 202 |

صفحه 102:
نایم اضافه کردن به یک پشته پيوندي ۳ ‎Void add (stack_pointer * top « element‏ ‎item)‏ { /* add an element to the top of the stack */ stack pointer temp = (stack_pointer ) malloc (sizeof (stack)); if (IS_FULL(temp )) { fprint f (stderr «" The memory is full \ n"); exit(1); } ۳ it it TE ‏امبیزترم 0 اف‎

صفحه 103:
حذف از یک پشته پيوندي 5 element delete (stack_pointer * top ){ /* delete an element from the stack */ stack_pointer temp = * top ; element item ; if (IS EMPTY (temp)) { fprintf (stderr «" The stack is empty \ n"): exit(1); } item = temp - >item ; * top = temp - > link; Free (temp) ; return item ; گروه کامپیوتر ساختمانداده ها به نباری ‏ صفحه: 103

صفحه 104:
اضافه کردن گره اي به انتهاي یک صف پيوندي Void addq (queue pointer * front ٠ ueue_pointer *rear «efement item) 7 add an element tothe rear of the queue queue pointer femp = (queue_pointer ) malloc (sizeof (queue )); if (IS_full (temp)) fprint f (stderr «" The memory is full \ n"); exit(1); temp - > item = item ; temp - > link = NULL; if (* front) (* rear) - > link = temp; else * front = temp; * rear = temp; كروه كامبيوتر | ساختمانداده هابه زبارل || صفحه. 104

صفحه 105:
حذف از ابنداي یک صف پيوندي element deleteq (queue_pointer * front ) 1 delete an element from the queue */— queue pointer temp = * front ; element item ; if (IS EMPTY (* front )) { ۱ fprint? ( stderr «" The queue is 0 لك item = temp - >item * front = temp - > link ; كروه كامبيوتر | ساختؤ90 06 نونجم 105

صفحه 106:
نمایش چند جمله ای ها به صورت لیست های تک پیوند: 3 در اينجا مى توان هر جمله رابه صورت يى كره نمايش داد. در اين ارتباط هر گره دارای سه فیلد برای نمایش ضریب . توان و اشاره گری به گره بعدی می باشد. a=3x4+2% +1 گروه کامپیوتر ] ساختمانداده ها به نباری ] صفحه: 106

صفحه 107:
جمع چند جمله ای ۳ برای جمع دو چند جمله ای . ابتدا فرض می کنیم که هت و ۲ اشاره گری به ابتدای چند جمله ای ها می باشند. 8 اگر توان دو چند جمله ای با هم برایر باشد . ضرایب با هم جمع می شهند و گره جدیدی تشکیل می شود . همچنین اشاره گرها را به گره های بعدی در هو طحرکت می دهیم. 8 اگر توان چند جمله ای ه کمتر از توان متناظر در چند جمله ای ع باشد. آنگاه یک جمله شبیه به لین جمله ایجاد و آنرابه نتیجه . یعنی ‎od‏ اضافه می کنیم و اشاره گر رابه جمله بعدی در ۲ منتقل می کنیم. همين عمل را اكر ‎o> expo >b- > expo‏ باشد بر روی * انجام می دهیم . گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 107

صفحه 108:
WY ‏تحلیل جمع چند جمله ای ها‎ برای محاسبه زمان لازم اجرای جمع چند جمله ای . اولین نکته تعیین عملیاتی است که بر زمان اجرایی اثر می گذارد. @ جمع ضرایب برای این الگوریتم باید سه معیار در نظر گرفته شود ‎ :‏ © مقایسه توان ها ایجاد گره جدید برای 1 ” الگوریتم جمع چند جمله ای با فاکتور ثابت بهینه است. | گروه کامپیوتر ‎ob tuto‏ نبا سنج 208[

صفحه 109:
WY ‏رابطه هم ارزی‎ ‎abl,‏ = )59 هر مجموعه 69 رابطه هم ارزی گفته می شود اگر دارای خواص انعکاسی . تقارن و تعدی روی 2۵) باشد. ‎ie ‏" تساوی" (-). یک رابطه هم ارزی است زیرا : ‏(0) « < «لست ‏(6) 27 « تسصریح می‌کند که « 2 7 می‌ب‌اشد (9) 2 «و < 2 بر نتیجه می‌دهد که < < «لست ‏گروه کامپیوتر ] ساختمان‌داده ها به نباری ] صفحه: 109 ‎ ‎ ‎ ‎

صفحه 110:
الگوریتم تعیین کلاس های هم ارزی الگوریتم تعیین کلاس های هم ارزی , دو مرحله است : در مرحله اول . زوج های هم ارزی <4 (> . را خوانده و ذخیره می کند. در مرحله دوم از ‎٠‏ شروع کرده و تمام زوج های که به شکل < ۰ .> می باشد ( به نحوی که ۰ و در یک کلاس هم ارزی می باشند ) را پیدا می کند.

صفحه 111:
WY ‏الگوریتم هم ارزی‎ بر اساس خاصیت تعدی همه مقادیر به شکل < ۰ ز > با ا در یک كلاس قرار مى كيرند. | كروه كامبيوتر [لساختمائداده هابه وبا إل صفح |

صفحه 112:
نمایش ماتریس های اسپارس به وسیله لیست پیوندی ۳ در نمایش داده ها , هر سطر و ستون ماتریس اسپارس با یک لیست پیوندی حلقوی با گره لص ارایه می شود. هر گره دارای یک فیلد برچسب () خواهد بود که وجه تمایز بين گره های ل۲ و گره هایی که عناصر مخالف صفر را ذخیره می کنند . می باشد. 8 هر گره لصا دارای سه فیلد دیگر نیز می باشد : اوه تن بط 8 هر گره وارده دارای پنج فیلد دیگرمی باشد : ‎row‏ امد : موی ‎udu aright‏ گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 112

صفحه 113:
WY ‏نمایش ماتریس های اسپارس به وسیله لیست پیوندی‎ 8 از فیلد سبط برای اشاره به عنصر مخالف صفر بعدی در همان ستون @ از فیلد ۲۲۸۷ برای اشاره به عنصر مخللف صفر بعدی در همان سطر استفاده می شود. هر كره لا در سه ليست قرار مى كيرد : #" ليست سطرها # لیست ستون ها 8 لیست گره های ‎head‏ گروه کامپیوتر ‏ ساختمانداده هابه نباری ] صفحه: 113

صفحه 114:
UY ‏نمایش ماتریس های اسپارس به وسیله لیست پیوندی‎ اگر بخواهيم یک ماتریس اسپارس عامه_ممه.عصص_سم با عسط_مسه عنصر مخللف صفر را نمایش دهیم . تعداد گره ها »هم الوص طا_جصسم + ( طاود_جصسم: عبو_مسم ) خواهد بود. ] ete Jt biol. ‏گروه کامپیوتر‎ |

صفحه 115:
لیست های پیوندی دوگانه لیست های تک پیوندی تنها بعضی از مشکلات را حل می کند چرا که فقط به راحتی می توانیم در جهت پیوندها حر کت کنیم. فرض کنید که به یک گره مشخص مانند ۳#. اشاره کنیم و بخواهیم گره قبل از 2۷ را پیدا کنیم . تنها راه یافتن گره ماقبل 28 پیمایش از ابتدای لیست می باشد. گروه کامپیوتر ‏ ساختمانداده هابه زباری ] صفحه: 115

صفحه 116:
WY ‏لیست های پیوندی دوگانه‎ یک گره در یک لیست پیوندی دوگانه حداقل دارای سه فیلد می باشد : فیلد ول فیلد 0 (اشاره گر به چپ ) ۵ فیلد ۷۷۰( اشاره گر به راست ) گروه کامپیوتر ‏ )| ساختمانداده هابه نباری آ صفحه. 116

صفحه 117:
UY Is ‏ليست هاى بيوندى دوگانه‎ 2. یک لیست پیوندی دوگانه به دو صورت است ۰ ۲ * حلقوی لصا ‎llink item‏ _- . عير حلقوی Head Node 0 | آ cS لیست پیوندی دوگانه حلقوی با گره اج درج و حذف از یک لیست پیوندی دوگانه بسیار ساده می باشد.

صفحه 118:
درج دریک لیست پيوندي دوگانه حلقوي وه ‎Void dinsert ( node_pointer node‏ ‎node_pointer newnode )‏ { /* insert newnode to the right of node */ newnode-> Ilink = node ; newnode-> Ilink = node-> r link ; node -> r link -> | link = newnode; node -> r link = newnode ; گروه کامپیوتر ساختمان‌داده ها به زباره) || صفحه: 118

صفحه 119:
حذف از یک لیست پيوندي دوكانه حلقوي Void delete ( node_pointer node ۰ node_pointer deleted ) { /* delete from the doubly linked list */ if (node = = deleted ) print f (" Deletion of head node not permitted .\n") else { deleted -> | link - > r link = deleted - < ۶ deleted -> r link - > 1 link = deleted - >I link; ساختمان‌داده ها به نباری

صفحه 120:
ایی با درخت "" درخت های دودویی © پیمایش درختان

صفحه 121:
WY ws yo: ‏فصل پنجم‎ ee ساختار درختی یعنی مجموعه داده های سازماندهی شده ای که عناصر اطلاعاتی شان به وسیله انشعاباتی با هم رابطه داشته باشند. گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 121

صفحه 122:
مفهوم درخت درخت مجموعه محدودی از یک یا چند گره به صورت زیر می باشد : ۲ دارای گره خاصی به نام ريشه باشد. ‎Bl‏ بقیه گره هابه 0 2 ۰" مجموعه مجزا «- للم شده که هر یک از لين مجموعه ها خود يى درخت هستند. ‎Ep‏ درجائان ريشه ناميده مى شوند. ‎| 222 ote J Oty bso 7۳7 ‏ا‎ ‎ ‎ ‎ ‎

صفحه 123:
6 وللا 0.0 0)لست ۰0.600 0) همزادند گروه کامپیوتر . | ساختمانداده ها به نباری ‎amino‏ 123

صفحه 124:
اصطلاحات درخت ها گره : گره به عنصر حاوی اطلاعات و انشعابات به دیگر عناصر . اطلاق می شود. درچه گره : تعداد زیر درخت های یک گره را درجه آن گره می نامند. والد ۰ گره ای که دارای زیر درختانی است را والد ريشه های زیر درختان گویند . فرزندان گره : ريشه های زیر درختان . فرزندان آن گره نامیده می شوند.

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

صفحه 126:
یک راه نمايش درخت . استفاده از لیست است . شکل ۵-۱ را می توان به صورت زیر نشان داد : (A(B(E(K .L).F).C(G).D(H(M).1J))) گروه کامپیوتر ] ساختمان‌داده هابه نباری ‏ صفحه: 126

صفحه 127:
نمایش لیست ممکن برای درختان WY شکل زیر یک ساختار ممکن برای نمایش لیست را نشان می دهد : data link 1 link 2 ساختمانداده ها بسه ‎Qu‏ Link n

صفحه 128:
UY ‏نمایش دودویی یک درخت‎ برای نمایش درختان دودویی . دقیقا نیاز به دو اتصال یا اشاره گر به ازای هر گره است. Data right sibling left child [228 te J ‏گروه کامپیوتر اس اندادد هاب نبا‎ J

صفحه 129:
۲-۵ درخت های دودویی ۳ => یک درخت دودویی یا تهی است یا حاوی مجموعه ای محدود از گره ها شامل یک ریشه و دو زير درخت دودویی است. این درخت ها زیر درخت های چپ و راست نامیده می شوند. ** مشخصه اصلی یک درخت دودهیی بدین شکل است که هر گره آن حداکثر دو انشعاب دارد یعنی گره هایی که درجه ای بیشتر از دو نداشته باشند. * برای درخت های دودویی زیر درخت سمت چپ و راست با یکدیگر متمایز است.

صفحه 130:
۳ ‏ساختار درخت دودوبي‎ 2-5 structure Binary_tree (abbreviated BinTree ) is objects : a finite set of nodes either empty or consisting of a root node « left Binary_tree«and&right Bina&y_tree. functions : for all bt« btl«bt2 BinTree «item element BinTree Create() Boolean |sEmpty (bt) BinTree MakeBT(bt1 « item « bt 2) [poeBipdiee LAID cos |

صفحه 131:
UY ‏تفاوت درخت عادی با درخت دودویی‎ ۲-۵ © در هیچ درخت عادی صفر گره وجود ندارد . اما درخت دودویی تهی وجود دارد. در یک درخت دودویی ترتیب فرزندان دارای اهمیت بوده در حالی که در درخت عادی به این صورت نیست. | 132 ‏گروه کامپیوتر اس اندادد ماب نبا ]رصن‎ J

صفحه 132:
۲-۵ خواص درختان دودویی * حداکثر تعداد گره ها در سطح !ام یک درخت دودویی است :4 ۰12 " حداکثر تعداد گره ها در یک درخت دودویی به عمق ۰ است . 4 2 1

صفحه 133:
۲-۵ خواص درختان دودویی برای هر درخت دودويى غير تهى مانند 7 . اگر 0تعداد گره های پایانی و تعدولگره های درجه ۲ باشد . آنگاه خواهیم داشت : =n, +1

صفحه 134:
WY ‏خواص درختان دودویی‎ ۲-۵ یک درخت دودویی پر به عمق ۰ یک درخت دودویی است که دارای گره باشد 0 2 . 8 یک درخت دودویی با ه گره و عمق ۲ کامل است . اگر و تنها اگر گره هایش مطابق با گره های شماره گذاری شده در یک درخت دودویی پر به عمق ۲ باشد. | كروه كامبيوتر ‎bso‏ نبا إل صفحه 234 |

صفحه 135:
WY ‏نمایش درخت دودویی‎ ۲-۵ نمایش آرایه نمایش درخت دودویی به دو صورت است : نمايش ليست

صفحه 136:
WY ‏نمایش آرایه‎ ۲-۵ شیوه شماره گذاری ارایه شده در شکل زیر . اولین نمایش یک درخت دودویی در حافظه را مطرح و پيشنهاد می کند . از آنجایی که گره ها از ۱ تا » شماره گذاری شده لند . یک آرلیه یک بعدی می تواند برای ذخیره سازی گره ها استفاده شود . گروه کامپیوتر ] ساختمانداده ها به نباری 8 صفحه: 136

صفحه 137:
WY ‏نمایش آرایه‎ 2-5 الما ام ‎Pl‏ ‏عا كا ع 6 ‎el‏ ‎rl‏ ‏ام ‏6 نمایش آرایه اي درخت دودويي.

صفحه 138:
۲-۵ نمایش ‎abt‏ ‏اكثر يى درخت دودويى كامل با ع كره ( يعنى ‎=llog a1‏ ترتیب بالا تعریف شده باشد . آنگاه براى هر كره با انديس / و 2 1 7 20 , داریم (۱) اگر #0 . آنگاه پدر !در [60/] است . اگر ۰۱ ۱20 ريشه است و پدری نخواهد داشت. (۲) اگرهک9 . آنگاه فرزند چپ !در 6 است. اگر 0<۰ . آنگاه ۱ فرزند چپ ندارد. (۳) اگر 6۱۲5۰ . آنگاه فرزند راست ! در ۱۷۲۵ است. اگر 6۳۲<۰. آنگاه ! فرزند راست ندارد ساختمانداده ها به نباری ۴ صفحه. 138 گروه کامپیوتر

صفحه 139:
UY ‏نمایش آرایه‎ ۲-۵ 2۴-1 7 در بدترین حالت . یک درخت مورب به عمق .به محل و موقعیت نیاز دارد که از اين مقدار, فقط ۲ محل اشغال می شود. گروه کامپیوتر ساختمان‌داده ها به نباری ‏ صفحه: 139

صفحه 140:
8-7 نمايش ليست بيوندى ماداميكه نمليش ترتيبى (آرليه اى) براى درختان دودويى كامل مناسب به نظر می رسد . ما برای بسیاری از درختان دیگر باعث اتلاف حافظه می شود به علاوه . اين روش از نارسایی های موجود در نمایش ترتیبی نیز برخوردار است. درج یا حذف گره های یک درخت . مستلزم جلبه جلیی گره هاست که خود باعث تغییر شماره سطح گره ها می شود. لین مسایل می تولند با به کار گیری نمایش پیوندی به آسانی حل شود.

صفحه 141:
١ ‏نمايش ليست بيوندى‎ ١-0 با اين روش هر كره سه فيلد خواهد داشت ‎٠‏ ‎left_child .data . right_child‏ که در زبان 6 به شرح زیر تعریف می شوند : typedef struct node *tree_pointer ; typedef struct node { int data ; tree_pointer left_child . right_child ; 1 گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 141

صفحه 142:
‎١-0‏ نمايش ليست بيوندى ‎right_child | aata | left_child ‏بخ‎ ‎PL cht ‏لاس مزر‎ ‏نمایش یک گره درخت دودویی ‎ ‎ ‎ ‎ ‎

صفحه 143:
۲-۵ پیمایش درخت دودویی به هنگام پیملیش یک درخت دودویی .با هر گره و زیردرختلنش به طرز مشابهی رفتار کنیم. اگر ‎CL‏ ۰۷ 8 جه ترتیب حرکت به چپ . ملاقات کردن یک گره ( برای مثال . چاپ فیلد داده آن گره) و حرکت به راست باشد. آنگاه شش تر کیب ممکن برای پیملیش یک درخت خواهیم داشت : RLV .RVL.VRL.VLR .LRV .LVR گروه کامپیوتر ساختمازداده ها به زباره) || صفحه: 143

صفحه 144:
۲-۵ پیمایش درخت دودویی مر اگر تنها حالتی را انتخاب کنیم که ابتدا به سمت جب و بعد به ‎Cal Cros‏ ۱ خواهیم داشت. لین سه حللت رابا توجه به موقعیت ۷ نسبت به ا ‎aR >»‏ ترتیب ۰۱۳۵۲06۲ 0۵5۵۲06۲ : ۳۲۵۵۲۵۲ می نامیم. كروه كامبيوتر ساختمازدادم ها به زباره) || صفحه: 144

صفحه 145:
۲-۵ پیمایش درخت دودویی در بیش 207107۲ یک گره موقعی ملاقات و جاب مى شود که زیردرختان چپ و راست آن قبلا ملاقات شده باشند. © در بيمايضش ‎SG. preorder‏ گره قبل از پیمایش زیردرختان چپ و راست . ملاقات می گردد. گروه کامپیوتر ‏ ساختمانداده هابه نباری ] صفحه: 145

صفحه 146:
WY ‏پیمایش درخت دودویی‎ ۲-۵ درخت زیر حاوی یک عبارت ریاضی است ‎A/B*C*D*+E‏ مک درخت دودویی برای یک عبارت محاسباتی [246 se Qs ‏گروه کامپیوتر اس اندادد ماب‎ J

صفحه 147:
۲-۵ پیمایش 1۳001۳06۲ 5 هنگامی که این پیمایش انتخاب می شود , حر کت به سمت پایین به طرف چپ انجام می شود و اين عمل تا آخرین گره صورت می گیرد سپس می توان گره را بازیلبی کرد و بعد به سمت راست رفته و به همین ترتیب کار را ادامه پیدا می کند. این متناظر با شکل 10۴32 یک عبارت است. گروه کامپیوتر ‏ ساختمازداده هابه نباری | صفحه: 147

صفحه 148:
WY ۰ ‏پیمایش 120۲016۲آیک درخت دودويي‎ 3-5 Vide inorder (tree_pointer ptr) /* inorder tree traversal */ if (ptr) { inorder ( ptr -> left_child ); printf (“ %d” .ptr -> data ); inorder (ptr -> right_child); گروه کامپیوتر ساختمازداده ها به زباره) || صفحه: 148

صفحه 149:
۲-۵ پیمایش 1۳۳۲۵0۲06۲ 5 تلبع 0۲۵0۵۲۵6۲] حاوی دستورات لازم برای شکل دوم پیمایش است. بر اساس این پیمایش . گره را ابتدا بازیابی و ملاقات نموده و سپس انشعابات چپ را دنبال و تمام گره ها را بازیابی می کنیم. اين فرآیند ادامه پیدا می کند تابه یک گره تهی برسیم. در لین نقطه . به نزدیکترین جدی که دارای یک فرزند راست باشد مراجعه و با اين گره شروع خواهیم نمود. گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 149

صفحه 150:
۲-۵ پیمایش 1۳۳۲۵0۲06۲ با پیمایش ۲۵۵۲۵6۲ گره های درخت زیر خروجی به شك زیر خواهند داشت : + * * ۸۵ 8 DE اين به شکل یک عبارت ۲6۵32 است. گروه کامپیوتر ‏ ساختمانداده هابه نباری ] صفحه: 150

صفحه 151:
۲-۵ پیمایش ۳۲60۲06۲ یک درخت دودویی 7 Vide preorder (tree_pointer ptr ) /* preorder tree traversal */ { if (ptr) { printf (“ %d” .ptr -> data ); preorder ( ptr -> left_child ); preorder (ptr -> right_child); گروه کامپیوتر ساختمانداده ها به نباری ‏ صفحه: 151

صفحه 152:
۲-۵ پیمایش 1۳0510۲06۲ لین پیمایش دو فرزند یک گره را قبل از بازیلبی آن گره ملاقات و چاپ می کند. این مساله بدین منهوم است که فرزندان یک گره قبل از خود آن گره بازیایی می گردد. [152 ote J ‏نبا‎ be tuto ‏گروه کامپیوتر‎ |

صفحه 153:
۲-۵ پیمایش 1۳0510۲06۲ خروجی حاصل از پیملیش 050۲06۲ شکل زیر به صورت زیر است : ==) AB/C*D*E + این خروجی مانند یک عبارت 051۴2 است. گروه کامپیوتر ساختمان‌داده ها به نباری 7 صفحه: 153

صفحه 154:
۳-۵ پیمایش 1100۳0167 غیرباز گشتی Void iter_pointer (tree_pointer node ) int top = -1; /* initialize stack */ ‏رعو أممجقة رمم‎ stack ۴0۲ )۶:( » >left chilafor G node ; node = - stack */ add ( &top « node ); /* add to stacknode = delete (&top); /*delete from stack*/ if (! Node) break ; /* empty printf (“ %d”: node-> data ) ; node = node -> right_child; 2) گروه کامپیوتر ساختمان‌داده ها به نباری ‎٩‏ صفحه: 2

صفحه 155:
۳-۵ پیمایش 11001016۲ غیرباز گشتی ۳ حليل 1110151612 : فرض كنيد تعداد كره هاى درخت »" باشد . اگر عمل 66۲_1۳0۲۳06۲ را در نظر بگیریم . مشاهده می شود که هر گره درخت فقط یک بار در پشته قرار گرفته و يا از آن خارج می شود. بنابراین اگر تعداد گره های درخت » باشد . پیچیدگی زمان تلبع برابر با (0)13 مى باشد. حافظه مورد نیاز برابر با عمق درخت است که مساوی با (0۵)۳0 می باشد. گروه کامپیوتر ساختمانداده ها به نباری ‏ صفحه: 155

صفحه 156:
۲-۵ پیمایش ترتیب سطحی 5 پیملیش ‎inorder .preorder .postorder (sla‏ 4 به صورت بازگشت پذیری نوشته یابه صورت غیرباز گشتی . همگی نیازمند پشته می باشند. اين پیمایش . ترتیب سطحی . ابتدا ريشه را بازیلبی . سپس فرزند جب ريشه وبه دنبال آن فرزند راست ریشه بازیلبی می گردد. اين شیوه با بازیلبی از گره منتهی الیه سمت جب به سمت راست هر سطح جدید تکرار می گردد. این پیمایش از صف استفاده می کند. گروه کامپیوتر ساختمازداده ها به زباره) || صفحه: 156

صفحه 157:
W ‏پیمایش ترتیب سطحی‎ ۳-۵ پیمایش ترتیب سطحی درخت زیر به صورت زیر است : om + ‏عم‎ D/C AB گروه کامپیوتر ] ساختمانداده ها به نباری ] صفحه: 157

صفحه 158:
WY ‏اعمال مفید بر روی درختان دودوبی‎ ۴-۵ Satisfiability Ju. -y | كروه كامبيوتر [لساختمانداده هابه وبا إل صفحه 228[

صفحه 159:
۵-۵ درختان نخی دودویی ۳ تعداد اتصالات تهی در یک درخت دودویی بیشتر از تعداد اشاره گرهای غیرتهی است. در یک درخت دودویی تعداد 0 + > اتصال از کل اتصالات آن یعنی ۰ ۰ تهی است. یک راه برای به کارگیری این اتصالات توسط پرلین و تورنتن پيشنهاد شد. راه حل لین بود که از اتصالات تهی برای ارتباط با دیگر گره های یک درخت استفاده شود که در اين صورت درخت را درت نب مى نامند. | كروه كامبيوتر | كه اندادد هاب ‎ete J Oy‏ 239 |

صفحه 160:
۵-۵ درختان نخی دودویی ۳ صالات نخ قو بر استفاده می شو \( اگر ۱6۲۲_110 ‎ptr->‏ تهی باشد . آن را طوری تغییر می دهیم که به گره ای که در پیمایش 180۲06۲ قبل از 0۳ قرار دارد . اشاره کند. ۲ اگر ۲۱9۳۲۱0 <-۲۲ تهی باشد . آن را طوری تغییر می دهیم که به گره ای که در پیملیش 10۳06۲ بعد از 0۷۳ قرار دارد . اشاره کند. گروه کامپیوتر ساختمانداده ها به نباری ‏ صفحه: 160

صفحه 161:
۵-۵ درختان نخی دودویی \ هنگامی که درختی را در حافظه نملیش می دهیم . بایستی بتوانیم بين اتصالات نخی و واقعی تفاوتی قایل شویم. این کار را با افزودن دو فیلد اضافی به هر گره انجام می دهیم که آنها را ‎pul right_thread .left_thread‏ گروه کامپیوتر ساختمان‌داده ها به نباری 7 صفحه: 161

صفحه 162:
WY ۵-۵ درختان نخی دودویی

صفحه 163:
۵-۵ پیمایش 11201۳06۲ یک درخت نخی -دودویی برای هر گره مانند 0۳ . در یک درخت دودویی . چنانچه ۴۴ 2 ۲۱۲۵۵0 _۲۱0۳۲<-0]۲ باشد . طبق تعریف ‎Ptr cay oF‏ در پیمایش ‎inorder . ptr-‏ > ۳۱< می باشد . در غیر لین صورت گره بعدی ۴ با پایین رفتن روی مسیر فرزندان جب 6617 از طرف فرزند سمت راست 0۲ تا وقتی که به گره ای با وضعیت ‎paw left_thread = TRUE‏ « تعیین می شود . گروه کامپیوتر ساختمانداده ها به نبارل ‏ صفحه: 163

صفحه 164:
۵-۵ پیمایش 11201۳06۲ یک درخت نخی -دودویی ‎INSUCC al‏ بدون استفاده از پشته , گره بعدی در پیمایش ‎inorder‏ را در یک درخت نخی دودویی پیدا می کند. ‏براى بيمايش 10۲016۲ می توانیم با فراخوانی مکرر ۲ تمام گره ها را بازیابی کنیم . ‏گروه کامپیوتر ساختمانداده ها به نبارل 8 صفحه: 164 ‎ ‎ ‎ ‎ ‎

صفحه 165:
۵-۵ پیمایش 11201۳06۲ یک درخت نخی i inatice ge HPSSSSURSMES, tree) insu { Gfindadba bnenig' eeasapsor of tree in threaded_pointer temp ; temp = tree -> right_child ; if (! Tree -> right_thread) while (! temp -> left_thread) > = ‎left_child ; temp femp‏ ‎return temp ;‏ بيدا نمودن كره بعد . يى كره خاص در پیمایش 180۳86۲ } گروه کامپیوتر ساختمانداده ها به نبارل ‏ صفحه: 165

صفحه 166:
۵-۵ پیمایش 110010161 یک درخت نخی ‎Ze‏ ‏-دودویی Void tinorder (threaded_pointer tree) { 1 1 fe ie verse the threaded binary tree threaded_pointer temp = tree ; for(;;) 1 temp = insucc (temp) ; if (temp = tree ) break ; printf (“ % 3c” «temp -> data ) ; گروه کامپیوتر ساختمانداده ها به نبارل 8 صفحه: 166

صفحه 167:
6-6 درج یک گره به داخل درخت نخی دودویی فرض كنيد داراى كرهى به نام ‎parent‏ هستيم كه داراى زیردرخت راست تهی می باشد . آنگاه ملیل هستیم ۵ را به عنوان فرزند راست ‎Parent‏ درج کنیم . برای انجام این کار بايد : ‎FLASH ,1_. |, parent->right_thread(1)‏ قرار دهيد ‎child-> right_thread , child-> left_thread (ry)‏ را ‎TRUE 1‏ 1,3 دهید . ‎4S su pak 5 y5b |, Child-> left_child (¥)‏ به3۲610] اشاره کند. ‎parent->right_child ,|, 1, child-> right_child (F) ‏قرار دهید.‎ ‎ar ight_child(5) rent: ‏رود‎ hild ‎a, ‎ ‎ ‎ ‎ ‎

صفحه 168:
UY 7 ‏درج یک گره به داخل درخت نخی دودویی‎ 6-6 در شکل زیر 0,5 ‎D‏ را به عنوان فرزند راست كره 8 جايكذارى می کنیم : ‘child گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 168

صفحه 169:
۶-۵ نوع داده مجرد ( (۵21هرم ۳ ‎MN tree‏ درختی‌لستکه مقدار کلید هر گره آن‌کمتر از مقادیر کلیدهایف رزندالنشنباشد 2520 6۶۱5(26 ی کدرختدودهییک امل‌لستکه ی ۲036 6 نیز می‌ب‌اشد ‎niin tree‏ درختی‌لسنکه مقدار کلید هر گره آن‌بیشتر از مقادیر کلیدهایف رزندالنشنباشد 12810 1111 یکدیخندودیییکامللستکه در ولقع یک 6۵ ۲۲ می‌ب‌اشد _ گروه کامپیوتر ساختمان‌داده ها به نباری ‏ صفحه: 169

صفحه 170:
min heap , max heap 3! Jt 5-4 گروه کامپیوتر |( ساختمازدادمها به زباره) || صفحه: 170

صفحه 171:
WY 1630 ‏اعمال اساسی پر روی‎ ۶-۵ ایجاد یک هرم(0620) تهی 8 جایگذاری عنصر جدید به هرم (0680) 8 حذف بزر گترین عنصر از هرم (0630) | 272 rte Jt blot 7۳7 ‏ا‎

صفحه 172:
۶-۵ صف اولویت غالبا هرم ها برای پیاده سازی صف اولویت ها استفاده می شوند. در صف اولویت ها عنصری که دارای بالاترین ( یا پایین ترین ) اولویت هست , حذف ‎ge‏ شود. * آرایه ساده ترین نمایش برای یک صف اولویت می باشد. گروه کامپیوتر »ال ساختمانداده هابه نباری آأ صفحه. 172

صفحه 173:
۶-۵ نمایش های صف اولویت ‎Insertion _| Representation‏ ‎Unordered array‏ 90 ‎eq) Unordered‏ ‎linked list‏ ‎TS | storea MOG‏ ‎om) Stored linked‏ list Max heap 5S WY Deletion eM 96۰ ea) 80

صفحه 174:
ب - محل اولیه گره جدید اضافه کردن گره جدید در هر موقعیت دیگری ,تعریف 0630 را نقض می کند زیرا نتیجه یک درخت دودویی کامل نخواهد بود.

صفحه 175:
۳ 1/1232 1۳630 ‏درج عنصر به یک‎ ۶-۵ vei insert_max_heap ( element item ۴۲ 00-06 > Anto a max heap of int i; if (HEAP_FULL(*n) { full .\n”) ; .fprint f (stderr «“ The heap is exit (1); } i= ++ (*n); heap whitey 11 i != 1) && (item.key > heap [i] = heap[i/2] ; i/=2; 7 گروه کامپیوتر ساختمانداده ها به نبالل 8 صفحه: 175(

صفحه 176:
WY insert_max_heap @l Jos $-d از آنجا که ‎lls Abb Qo pais bl Gul 2559 Sheu‏ ارتفاع ‏ می )92| لدین معنی می باشد كه حلقهة ‎while‏ ‏به ميزان تکرار شود.ناَو)پیچید گی تابع درج برابر مى باشد. ‎n)‏ 0009 اساختمازداده ها به زباره) || صفحه؛ 176 گروه کامپیوتر

صفحه 177:
۶-۵ حذف عنصری از ۲۲6۵0 ۷127[ هنگامی که عنصری از 1۱630 ۲۲۱8 حذف می شود . آن را از ريشه درخت 0630 می گیریم. گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 177

صفحه 178:
UY delete_max_heap at Jos ۶-۵ ۴ پیچید گی حذف برابر(2 مع چا 'آ زمان حذف یک عنصر دلخواه از درخت با " عنصر . برابر (0)) می باشد. گروه کامپیوتر |( ساختمانداده هابه نباری ‎trio‏ 178

صفحه 179:
۷-۵ درختان جستجوى دودويى د یک درخت جستجوی یک درخت دودویی است که ممکن است تهی باشد. اگر درخت تهی نباشد خصوصیات زیر را بر آورده می کند : & هر عنصر دارای یک کلید است و دو عنصر نباید دارای کلید یکسان باشند . در واقع کلیدها منحصر به فردند. © کلیدهای واقع در زیردرخت غیرتهی چپ باید کمتر از مقدار کلید واقع در ريشه زیردرخت راست باشد. & کلیدهای واقع در زیردرخت غیرتهی راست بلید بزرگتر از مقدار کلید واقع در ريشه زیردرخت چپ باشد. #زیردرختان چپ و راست نیز خود درختان جستجوی دودویی میباشند. گروه کامپیوتر ساختمان‌داده ها به نباری ‏ صفحه: 179

صفحه 180:
۷-۵ درختان جستجوی دودویی ساختمانداده هابه نبا ‎rio‏ 180

صفحه 181:
۷-۵ جستجوی یک درخت دودویی ۳ فرض کنید خواسته باشیم دنبال عنصری با کلید 66۷ بگردیم. ابتدا از ريشه (۳۵۵۸) شروع می کنیم . اگر ريشه تهی باشد , درخت جستجو فاقد هر عنصری بوده و جستجو ناموفق خواهد بود. در غير این صورت 6۷>آرا با با مقدار کلید ريشه مقایسه کرده : ‎lf‏ اگر 16۷ کمتر از مقدار کلید ريشه باشد . هیچ عنصری در زیردرخت راست وجود ندارد که دارای کلیدی برابر 66۷ باشد . بنابراین زیردرخت چپ ريشه را جستجو می کنیم. ‏اگر 6۷ بزرگتر از مقدار کلید ريشه باشد . زیردرخت راست را جستجو می کنیم. ‏گروه کامپیوتر ساختمانداده ها به نبارل ‏ صفحه: 181 ‎ ‎ ‎ ‎ ‎ ‎

صفحه 182:
search ‏تحلیل‎ ۷-۵ اگر 0 ارتفاع یا عمق یک درخت جستجوی دودویی باشد . عمل جستجو را در مدت (0)11 انجام مى شود. گروه کامپیوتر .| ساختماندادد هابه زباری ] صفحه: 182

صفحه 183:
۷-۵ درج عنصری به داخل درخت جستجوی دودویی ‏ برای درج عنصر جدیدی به نام 66۷ . ابتدا بايد مشخص نمود که آیا کلید با عناصر موجود متفاوت است یا خیر. برای انجام این کار بايد درخت را جستجو کرد. اگرجستجو ناموفق باشد . عنصر را در محلی که جستجو خاتمه پیدا نموده است . درج می کنیم. گروه کامپیوتر ساختمان‌داده ها به نباری ‏ صفحه: 183

صفحه 184:
كروه كامبيوتر ساختمازداده ها به زباره) || صفحه: 184

صفحه 185:
UY ۱ 10606171 8006 ‏تحلیل‎ ۷-۵ زمان لازم برای جستجوی ۲۱01۲۷ در یک درخت برابر (0)10 می باشد به نحوی که 9 برابر با عمق یا ارتفاع درخت است. بقیه الگوریتم نیاز به زمان (0)1 دارد. بنابراین زمان کل مورد نیاز 11256111006 برابر با (12) © مى باشد. كروه كامبيوتر ساختمازداده ها به زباره) || صفحه: 185

صفحه 186:
UY 129292 ‏حذف عنصری از درخت جستجوی‎ ۷-۵ برای حذف ۳۵ از درخت زیر باید فیلد فرزند چپ وللد این گروه ‎NULL ,1, ۳‏ قرار داده و گره را آزاد نمود : گروه کامپیوتر ] ساختمانداده ها به نباری ‏ صفحه: 186

صفحه 187:
UY 129292 ‏حذف عنصری از درخت جستجوی‎ ۷-۵ زملنی که یک گره برگ با دو فرزند حذف می شوند . گره را با بزرگترین عنصر در زیر درخت چپ و یا کوچکترین عنصر در زیردرخت راست آن گره جایگزین و تعویض کرد. عمل حذف در زمان (0)19 انجام مى كيرد ؛ به نحوى كه ‎1١‏ ‏عمق درخت مى باشد | گروه کامپیوتر ‎bso.‏ نبا سنج 257 |

صفحه 188:
۷-۵ درختان جستجوی متعادل درختان جستجو با بیشترین عمق (1 [#106لر)ختان جستجوی متعادل نامیده می شوند. درختان جستجوی متعادلی وجود دارند که عمل جستجو , درج و حذف را در زمان ()0۵ ممکن می سازند از جمله درختان ‎red_black .2-3 .AVL‏ گروه کامپیوتر ساختمان‌داده ها به نباری 7 صفحه: 188

صفحه 189:
۸-۵ درختان انتخابی فرض کنید دارای >] مجموعه و رشته مرتب شده ای از عناصر هستیم که باید در یک رشته واحد ادغام شوند. هر دنباله یا ترتیب شامل تعدادی رکورد به ترتیب غیرنزیلی و فیلد مشخصی به نام 166 می باشد. ۶ یک دنباله مرتب اجرا ‎(FUN)‏ نامیده می شود. < فرض کنید که 1 تعداد رکوردها در اجرا باشد. عمل ادغام می تواند با تکرار ر کورد با کوچکترین کلید انجام شود.

صفحه 190:
۸-۵ درختان انتخابی . كوجكترين كليد بايد ازبين »| امكان موجود بيدا شود و مى تواند ركوردى قبل از 42 ‎ASL (K-FUNS) Lol K‏ #ا بهترین روش برای ادغام ‎K‏ اجرا (۲۷۸5-) . نیازمند 1-1 مقایسه برای تعیین و انتقال ر کورد بعدی به خروجی می باشد. # به ازای 16<2. می توانیم با استفاده از ایده درخت انتخابی ؛ تعداد مقایسه های لازم جهت تعیین کوچکترین عنصر را کاهش دهیم.

صفحه 191:
۸-۵ درختان انتخابی یک درخت انتخابی . یک درخت دودویی است که هر گره آن کوچکتر از دو فرزند خود می باشد بنابراین . گره ريشه نشان دهنده کوچکترین گره در درخت می باشد. | 292 ete J ‏نبا‎ ob str ‏گروه کامپیوتر‎ |

صفحه 192:
WY ۸-۵ درختان انتخابی 122 2 ‏اه ]| اه‎ |1| fap ja my yo 5 o 0 5 5 1 8 1 3 3 2 5 1 7 0 6 8 3 5 0 6 # fed] fod he pm Pod bed for] ‏توملا‎

صفحه 193:
WY ۸-۵ درختان انتخابی زمان تجدید ساختار درخت پرابر ‏ )شد ‎k)‏ و020 زمان لازم براى أدخام تمام ۲ رکورد برابر می باشد. )& و0209 زمان كل لازم جيت ادخام »ل اجرا (11413) برابر می باشد. ساختمانداددها به زبان || صفحه: 193

صفحه 194:
7 ‏چنگل ها‎ ٩-۵ جنگل مجموعه 0 < 9 درخت مجزا می باشد. اگر ريشه درخت را حذف کنیم , آنگاه دارای یک جنگل خواهیم بود. ساختمانداده هابه يباه اصفحه: 194

صفحه 195:
WY ‏تبدیل جنگل به یک درخت دودویی‎ ٩-۵ برای تبدیل این جنگل به یک درخت دودویی واحد ابتدا نمایش دودویی هر یک از درختان جنگل را به دست می آوریم سپس تمام درختان دودویی را از طریق فیلد همزاد گره ريشه به یکدیگر متصل می کنیم. گروه کامپیوتر ] ساختمان‌داده ها به نباری ] صفحه: 195

صفحه 196:
4-0 تبدیل جنگل به یک درخت دودویی foe bo اله درخت دودویی گروه کامپیوتر ] ساختمانداده ها به نباری ] صفحه: 196

صفحه 197:
WY ۱ ‏تبدیل جنگل به یک درخت دودویی‎ ٩-۵ اگر جنگلی از درختان باشد (تگاه چم‌خت دودویی متناظر با اين جنكل يعنى ‏ 8: (۱) اگر ۵0 باشد . تهی خواهد بوط(7) BD Fos Tm) ‏دارای ریشه اي پرایر باتزیشه می باشد , داراعرپژیردرخت چپی‎ )۲( برابر با می باشد . به نحوول:آکه,یٌذرختان ريشه می باشند و در نهایت دارای زیردرخت راست می باشد.

صفحه 198:
كروه كامبيوتر ساختمازداده ها به زباره) || صفحه: 198

صفحه 199:
WY ۱ ‏پیمایش جنگل‎ ٩-۵ ‎by ye reorde 8‏ به ۲ معادل با بازیابی گره های ‎F‏ در درخت 0۲60۲۵6۲ می باشد: ‏* اگر ۴ تهی باشد , برگردید. * ریشه درخت اول ۴ را بازیابی کنید. ‏* زیردرخت . درخت اول رابه صورت ۲۵0۲۵6۲ پیمایش کنید. ‏* سایر درختان ۴ را به صورت ۲6۵0۲۵/6۲] پیمایش کنید. ‏گروه کامپیوتر ] ساختمانداده ها به نباری ‏ صفحه: 199 ‎ ‎ ‎ ‎

صفحه 200:
WY ۱ ‏پیمایش جنگل‎ ٩-۵ ‎n‏ مربوط به ۲ معادل گره های ۴ در درخت 6۳ است که به صورت زير تعریف می شود : ‎ ‏* اكر ۴ تهی باشد , برگردید. ريشه درخت . درخت اول را به صورت 10۳66۲ پیمایش ‏ريشه درخت اول را بازیابی کنید. ساير درختان را به صورت 1190۲016۳ پیمایش کنید. ‏گروه کامپیوتر ‏ ساختمانداده هابه زباری ] صفحه: 200 ‎ ‎ ‎ ‎

صفحه 201:
۳ ‏پیمایش جنگل‎ ٩-۵ هیچ گونه معادل طبیعی برای برای پیملیش 00510۲06۲ درخت دودویی متناظر یک جنگل وجود ندارد . پیمایش ۳0510۲06۲ یک جنگل ۳ را به صورت زیر بیان ی کنیم : ۱ اگر ‏ تهی باشد . برگردید. ۲ زیردرخت . اولین درخت ۴ را به صورت ۳۵50۲06۲ پیمایش کنید. ۲ ساير درختان باقی مانده‌ را به صورت ۳050۲06۲ پیمایش کنید. ۴) ريشه اولین درخت ۴ را بازیابی کنید گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 201

صفحه 202:
۱۰-۵ نمایش مجموعه ده عضو از ۰ تا ‎٩‏ که به سه مجموعه مجزا از هم تفکیک شده باشند . می توانند بدین صورت باشند : S, ={2,35,},S, ={L4,9},S, ={0,6,7,8} Se oe گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 202

صفحه 203:
WY ‏نمایش مجموعه‎ ۱۰-۵ در هر مجموعه بر خلاف معمول که اشاره گرها به از وللد به فرزندان در نظر گرفته می شدند. در اینجا اشاره گرها از فرزندان به وللد تنظیم می شوند و یا در حقیقت گره ها با رابطه پدری اتصال يافته اند. ] 203 woke J Qs owt ‏گروه کامپیوتر اس‎ J

صفحه 204:
۱۰-۵ اعمال روی مجموعه ها حداقل اعمالی که بر روی مجموعه انجام می شود . به شرح زیر است ۱) اجتماع مجموعه مجزا (۸۲30۳) : اک ۹۶ دو مجموعه مجزا باشند . انگاه اجتماع آنها به صورت زیر تعریف می شود : | همه اعضا به صورت ۱ که ۷ يا عضوباشلایا عضو )4 ‎SUS = SF‏ ۲ (۲۱۵)1( پیداکردن آ) : مجموعه ای که آ عضو آن است را بيدا كنيد كروه كامبيوتر ساختمازدادم ها به زباره) || صفحه: 204

صفحه 205:
۱۰-۵ اعمال روی مجموعه ها ۲ pe SUS, گروه کامپیوتر ساختمانداده هابه نباری 8 صفحه: 205

صفحه 206:
۱۰-۵ قانون 6101011100 ۷۷ بر ای. ) ۱/۸10 جز مه قانون ۷۷619۳1۳09 برای( [. )۲۱۱0۵۲( :اگر تعدا گره ها در درخت 1 کمتر از تعداد گره ها در درخت ژ باشد . ژ را والد ‎cB‏ ‏در غير اين صورت 5 را والد أ[ قرار می دهیم. كروه كامبيوتر ساختمازداده ها به زباره) || صفحه: 206

صفحه 207:
۱۰-۵ پیاده سازی قانون 610۳01170 ۷۷ برای پیاده سازی قانون ۷۷6101011۳0 باید بدانیم که در هر درخت چند گره وجود دارد. لين کار را بدین ترتیب انجام می دهیم که در ريشه هر درخت یک فیلد 60۷۸10۴ قرار می دهیم. اگر آ یک گره ريشه باشد . آنگاه 50 ‎COUNTLE]‏ تعداد گره های آن درخت خواهد بود. ‎COUNT‏ به صورت یک عدد منفی در فیلد ‎Parent‏ ‏گذاشته می شود. زملنی که ‎ped 2 oly LWeighting ogi‏ « عمل اجتماع به اين صورت را ۷1۳۱10102 می نامیم. گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 207

صفحه 208:
WY a 5 ‏مجموعه ها د‎ ۱۰-۵ اصل موضوعی ۰ فرض کنید ۲ یک درخت با 8۱ گره باشد که توسط 2 ایجاد شده باشد . در این صورت هیچ گرهی در ۲". سطحی بیشتر از 1+ یولع داشت. اگر در یک درخت ‏ عضو وجود داشته باشد . بیشترین زمان برای یافتن یک عضو به صورت ‎Sloe,‏ اگر ترکیبی از 11-1 عمل 4111013 و 110 عمل 811061 داشته باشیم . در بدترین حللت ممکن . زمان به ‎N+ MOG, D) gro‏ درمى آيد. تعریف ( قانون تخریب ) ۰ اگر ٌ گرهی روی مسیر از آ تا ريشه خود باشد . آنگاه ‏ را فرزند ريشه قرار دهید. گروه کامپیوتر ساختمانداده ها به نباری 7 صفحه: 208

صفحه 209:
۱۱-۵ شمارش درختان دودویی تعداد درختان دودویی مجرا : تعداد درختان دودویی با ۷۱ گره . تعداد جایگشت های از ۱ تا 0 با استفاده از یک پشته و بالاخره تعداد راههای ضرب 1 ‎11١+‏ ماتریس . باهم مساوی اند. گروه کامپیوتر ] ساختمان‌داده ها به نباری ] صفحه: 209

صفحه 210:
WY ‏تعداد درختان دودوبی مجزا‎ ۱۱-۵ برای به دست آوردن تعداد درختان مجزا با 9۱ گره از تابع زیر استفاده می کنیم : ‎bx‏ - وده ‏تابع فوق تولید کننده تعداد درختان دودویی است. ‏که‌بژابر است با : ا ‎2 +1 ‎ana ae ee ‏گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 210 ‎ ‎ ‎ ‎ ‎

صفحه 211:
فصل ششم: گراف ها "۳ .(حع ۲ ‎Slat‏ ) © آشنایی با گراف 8 را ماتریس مجاورتی ۴ جستجوی گراف * شبکه ها

صفحه 212:
فصل ششم ۰ گراف ها هر گراف 3) شامل دو مجموعه ۷ و است ۷ مجموعه محدود و غیرتهی‌از یتوسلست : مجموعه لیمحدود و لحتمللاتسهی‌از لسبه ها می‌ب‌اشد (۷)6۵ و (6)63 : مجموعه یئوسو لبه هایگ رلفق) را نملیشمی دهند برای نمايش گراف هم می توانیم بنویسیم (۴, )66 گروه کامپیوتر ] ساختمانداده هابه نبارل ‏ صفحه: 212

صفحه 213:
۱-۶ گراف ها در یک گ اف . جهت دار هر لبه با زوج مرتب ‎SMM?‏ داده می شود. انتها و ۲۵ دای لبه ۲۲ ند. بتابراین و < ۲۵,۲۲ >اوت ر < ۲۵ ,۲ > دهند. | 223 te J Oy ‏گروه کامپیوتر لسن اندادد هاب‎ J

صفحه 214:
۱-۶ گراف ها #برای گراف بدون جهت , لبه هابه صورت خطوط یا منحنی نمایش داده می شوند. برای گراف های جهت دار لبه هابه صورت فلش هليى كه از انتها به ابتدا رسم شده است . ارایه می گردند. Pan | جهت دار بدون جهت | گروه کامپیوتر ‎btu.‏ نبا سنج 214 |

صفحه 215:
۱-۶ محدودیت های گراف ها محدودیت های زیر بر روی گراف ها اعمال می شود : # یک گراف فاقد لبه ای از یک راس ماننداً .به خودش می باشد. اين مطلب بدین معنی است که لبه (:۲ غیرآمعتبر می باشد. یک گراف فاقد رویداد چند گانه از یک لبه می باشد. گروه کامپیوتر ساختمان‌داده ها به نباری ‏ صفحه: 215

صفحه 216:
۱-۶ گراف ها برای یک گراف بدون جهت با 9 داس. ء حداكثر تعداد لبه ها . تعداد متمایز و غیرمرتب زوج هاو((۲/,۲) < آ مى باشد. ايت تعداد برابر است با : n(n-1)/2 اگر گراف جهت داری با 10 گره وجود داشته باشد. بیشترین تعداد لبه های آن برابر است با : ‎n(n-1)‏ گروه کامپیوتر ‏ ساختمانداده هابه نباری ] صفحه: 216

صفحه 217:
۱-۶ گراف ها اگر(یک) لبه در گراف بدون جهت باشد , می گوییم رئوس ودو زاس مجاو و لبه یک لبه متلاقی(رلآی1) و است. ‎uw‏ يى زير ركراف 6 كرافى است مالقد به نحوق له (۲۷۲۵ و ‎Gas El‏ | 227 te J Ot ‏لس اختماندابد ماب‎ 7۳7

صفحه 218:
۱-۶ گراف ها *** طول یک مسیر تعداد لبه های موجود در آن است. * مسیر ساده . مسیری است که همه رئوس آن احتمالا به جز اولی و آخری مجزا باشند. ** حلقه یا سیکل ,یک مسیرساده است که اولین و آخرین راس آن یکی باشد. برای مثال ۰0۱۰۲۰۰ یک حلقه دراگست. جک گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 218

صفحه 219:
۱-۶ گراف ها در گراف بدون جهت مانند 63 , دو راس ۲۵ وا را ::-, می گویند. اگر مسیری در 6۵ از ۲۵ به ۲1 وجود داشته باشد. یک گراف بدون جهت را ۰:۰, می نامیم اگر برای هر زوج راس۲,قار (3)) ۷ .مسیری از ابه زر 63 وجود داشته باشد. يك مرانه انسال يابه طور ساده تر یک مولفه . در گراف بدون جهت . بزرگترین زیر گراف متصل آن است. | كروه كامبيوتر [لساختمانداده هايه وبا إل ‎se‏ 219[

صفحه 220:
۱-۶ گراف ها یک گراف جهت دار کاملا متصل نامیده می شود . اگر پرای هر زوج از رئوس /آدی(3)) ۷ ۰ مسیری جهت دار از به" و مچنین از به ,۲ وجو داشته باشد. جك رلقة سارت . بزرگترین زیر گرافی است که کاملا متصل ‎oo‏ 2 ال ‎6 ‏گروه کامپیوتر ‏ ساختمانداده هابه نباری ] صفحه: 220 ‎ ‎ ‎ ‎

صفحه 221:
۱-۶ گراف ها هب درحه راس تعداد لبه های متلاقی با آن راس است . اكر در كراف 6 با 18 راسر©. درجه راس 1 و 6 تعداد لبه ها باشد . به آسانى مى توان ديد كه تعداد لبه ها برابر است با :

صفحه 222:
۱-۶ نمایش گراف نمایش گراف ها به سه صورت است : ماتریس مجاورتی ت های مجاورتی لیست های چند گانه

صفحه 223:
۱-۶ ماتریس مجاورتی ۳ فرض کنید (] ۰ ۷)<) یک گراف با 9 راس باشد . 1 < ورتم راف ‎ic ii STi coon ctl es‏ ‎lad) mat‏ باشد. اككر لبه (براءئح رگراک جهت دار ( 59 ‎E(G)‏ ‏باشد . آنگاه 0 ‎[j]=‏ [801[_۱۸۵۲]1 خواهد بود. اور جهت متقازن است زیر G(@)),> 55 ‏اگر و تنهااگر لب‎ Lay sale OY) ad باشد گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 223

صفحه 224:
۶-۱ ماتریس مجاورتی (مثال ) ۱ لا ماتريس مجاورتى م [ل>» ]|

صفحه 225:
WY ‏ماتریس مجاورتی‎ ۱-۶ برای گراف بدون جهت . درجه هر راس مانند آً مجموع عناصر سطری آن است : 1 ور ‎adj_matit‏ ,> مدر براى يى گراف جهت دار . مجموع سطری . درجه خارجه و مجموع ستونی ء درجه وارده خواهد بود. گروه کامپیوتر ‏ ساختمانداده هابه نباری ] صفحه: 225

صفحه 226:
۶-۱ لیست های مجاورتی با لین نمایش ۰ 9 سطر ماتریس مجاورتی در 1۱ لیست پیوندی قرار مى كيرد. براى هرراس از گراف 62 . یک لیست وجود دارد. هر گره حداقل دو فیلد دارد : راس و اتصال در هر لیست مشخصی مانند آ. گره های لیست حاوی رئوس مجاور از راس 5 می باشند. در یک كراف بدون جهت با 19 راس و 6 لبه . 9 گره 06۵۵0 و 6 كره ليست دارد. هر كره ليست دو فيلد لازم دارد. گروه کامپیوتر |[ ساختمازدادمهايه زباره) || صفحه؛ 226

صفحه 227:
۶-۱ لیست های مجاورتی(مثال) ۳ _ گروه کامپیوتر ‎SS‏ كك ‎ ‎noe vertex link a]. ‏رس ‎ ‎ ‎6 6-۰ ‎ ‏ساختمانداده ها به زباری ] صفحه: 227 ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 228:
WY ‏لیست های مجاورتی‎ ۶-۱ 7" درجه هر راس در یک گراف بدون جهت را می توان به سادگی با شمارش تعداد گره های آن در لیست مجاورتی تعیین کرد. اگر تعداد رئوس گراف 63 برابر با 90 باشد . تعداد کل لبه هاء در زمان © + 1 ) © ( تعيين مى شود. [228 ote J oat | ‏گروه کامپیوتر‎ |

صفحه 229:
WY ‏ساختار گره برای لیست های مجاورتی‎ ۶-۱ نمایش دوم :هر گره دارای چهار فیلد بوده و نشان دهنده یک لبه است. row link for tail | column link for head | head | tail گروه کامپیوتر ‏ ساختمانداده هابه نباری ] صفحه: 229

صفحه 230:
۱-۶ لیست های مجاورتی چند گانه (v,,¥)) " ‏در نمايش ایست مجاورتی ,هر لبه در یک گراف بدون جهت مانند‎ 7 : ‏با دو وارده نمایش داده می شود‎ ‘i لا در ليست براى ‎yj‏ لا در لیست برای

صفحه 231:
۱-۶ لبه های وزنی در ماتریس مجاورتی . کمیت ۱ که نشان دهنده وجود یک لبه است را با وزن یک لبه تعویض می کنیم. در لیست های مجاورتی و لیست های مجاورتی چند گانه . فیلد ۷۷61010 به ساختار گره اضافه می شود. marked vertexl vertex2 path1 ساختار یک گره برای لیست های مجاورتی چند گانه path2 گرافی که لبه هایش دارای وزن باشد . شبکه نامیده می شود. _ گروه کامپیوتر ساختم‌انداده ها به نباری 6 صفحه: 231

صفحه 232:
۲-۶ اعمال ابتدایی گراف 5 با توجه به گراف بدون جهت (۰ 6)۷ و راس ۷ از (۷)63 می خواهیم رئوسی از © را كه از لا قابل دسترسی هستند. به دست آوریم( یعنی همه رئوس متصل به ۷ . برای اين کار دو روش وجود دارد : ‎i ~ *‏ : روش عمقی تا حدودی شبیه پیمایش ‎preorder‏ یک درخت است. ‏6 جسته نی :این روش تا حدودی پیمایش ترتیب سطحی را ‏در پیمایش های عمقی و ردیفی . فرض می کنیم که برای نمایش گراف ‎ ‏كروه كامبيوتر ساختمازدادم ها به زباره) || صفحه: 232 ‎ ‎ ‎ ‎

صفحه 233:
۲-۶ جستجوی عمقی ۳ در آغاز راس ۷ را ملاقات می کنیم. بعد راسی مانند ۷۷ را که قبلا ملاقات نشده و مجاور به ۷ است را انتخاب کرده و روش جستجوی عمقی را با ۷۷ دنبال می کنیم. موقعیت جاری راس ۷ در لیست مجاورتی با قرار دادن آن در یک پشته صورت می گيرد. در نهایت . جستجو به راسی مانند لا خواهد رسید که فاقد هر گونه راس غیرملاقات شده در لیست مجاورتی باشد. در این مرحله راسی از پشته انتخاب و و حذف شده و فرآیند فوق به همین صورت ادامه پیدا می کند. بر اساس این روش ۰ رئوس ملاقات شده. خارج شده و رئوس ملاقات نشده . داخل پشته قرار می گیرند. جستجو زمانی پایان می پذیرد که پشته تهی باشد. گروه کامپیوتر ساختمانداده ها به زباری [ صفحه: 233

صفحه 234:
۲-۶ جستجوی عمقی ۳ جستجوی عمقی شبیه پیمایش ط7 یک درخت مى باشد . زیرا ‎Void dfs (int V)‏ { ‎fiat ve stex ۰ apf a graph‏ و ‎nods, pointer w;‏ ‎visited[V] = TRUE ;‏ ‎print f (“ %5d“.V);‏ ‎link for (w = graph[V] ; w; w = w->‏ ‎if (! Visited [w->vertex] )‏ ‎dfs (w-> vertex ); ‎ ‏گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 234 ‎ ‎ ‎ ‎ ‎

صفحه 235:
2-6 جستجوي عمقي(منال) گراف 6 a 8 0 0 ی م نمايش ليست هاي مجاورتي ¢ Teneo گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 235

صفحه 236:
۲۷-۶ جستجوی عمقی(مثال) توضیح شکل قبل 4 اگر روش جستجوی عمقي راز را و غاز نم : رئوس گراف ق) به تر تیب “ ملاقات می شوند. گروه کامپیوتر ساختمانداده ها به نباری ‏ صفحه: 236

صفحه 237:
۲-۶ تحلیل 065 اگر 63 توسط ماتریس مجاورتی نمایش داده شود . زمان لازم برای تعیین همه رتوس مجاور به (0)0. ۷ است. از آنجا که حداکثر 1۱ راس مشاهده می شود , ‎wd LAB) OLe5 JS‏ گروه کامپیوتر ] ساختمانداده ها به نباری ] صفحه: 237

صفحه 238:
۲-۶ جستجوی ردیفی پیمایش را با راس ۷ شروع نموده . پس از ملاقات راس مزیور . آنرا علامت گذاری می کنیم. اول هر یک از رئوس مجاور به راس ۷ را در لیست مجاورتی ملاقات می کنیم. زمانی که همه رئوس مجاور با راس ۷ را ملاقات کردیم . تمام رئیس ملاقات نشده که مجاور با اولین راس مجاور با ۷ در لیست مجاورتی است را ملاقات می کنیم. برای انجام این کار مادامیکه هر راس ملاقات می شود . آنرا در یک صف قرار می دهیم. هنگامی که لیست مجاورتی تمام شد . راسی را از صف حذف و با تست هر يك از رئوس در ليست مجاورتی این فرآیند را ادامه می دهیم. رئوس ملاقات نشده . ملاقات و سپس در صف قرار می گیرند. رئوس ملاقات شده نادیده گرفته می شوند. جستجو هنگامی که صف تهی گردد . خاتمه می یابد. گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 238

صفحه 239:
۲-۶ جستجوی ردیفی تابع 0۴5 حاوی دستورات لازم جهت پیاده سازی جستجوی ردیفی است. ساختمانداده ها به نبا || صفحه: 239

صفحه 240:
۲-۶ درخت های پوشا چنانچه گراف 6۵ متصل باشد . پیمایش های جستجوی عمقی یا جستجوی ردیفی . تمام رثوس گراف 68 را ملاقات می کنند. در اين حللت با اعمال هر يك از پیملیش ها لبه های گراف 6 به دو تقسيم مى شوند : 7 ( برلیلبه های‌دیخت) : مجموعه لبه هاوبه کار یفته یا پیموده شده در جستجو می‌ب‌اشد 3 (برلیل به های‌غیر دیخت : مجموعه لبه هایب‌اقی‌مانده می باشد گروه کامپیوتر ساختمانداده ها به نباری ] صفحه: 240

صفحه 241:
WY ‏درخت های پوشا‎ ۲-۶ لبه های ۰۲ یک درخت که شامل تمام رئوس گراف 6 مى باشد را تشکیل می دهند . تعریف درخت پوشا : درختی که تعدادی از لبه ها و تمام رئوس ‎GS‏ ‏را در بر دارد . درخت پوشا نامیده می شود : ۵ 5 5 سه درخت آن گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 241

صفحه 242:
۲-۶ درخت های پوشا [- درخت پوشایی که از فراخوانی 61۴5 به دست می آید را درخت پوشای عمقی می نامند. - جنانجه از روش ۵۴5 استفاده شود . درخت پوشای حاصل را درخت پوشای ردیفی می org درخت پوشای ‎bPe‏ درخت پوشای 8 گروه کامپیوتر ‏ ساختمانداده هابه نباری ]| صفحه: 242

صفحه 243:
۲-۶ درخت های پوشا ‎NS‏ مقصود از زیر گراف حداقل : یعنی زیرگرافی که تعداد لبه هایش کمترین باشد. <هر گراف متصل با 1 راس . بایستی حداقل 9-1 لبه داشته باشد و همه گراف ها متصل با 0-1 لبه . درخت هستند. درخت پوشا دارای 9-1 لبه می باشد. < ایجاد زیر گراف های حداقل . کاربردهای متعددی در طراحی شبکه های ارتباطی دارد. مثال :اگر رتوس گراف ق) نماینده شهرها و لبه ها معرف جاده هاى ارتباطى بين شهرها بلشد . آنگاه حداقل تعداد خطوط مورد نیاز برای اتصال 1۱ شهر به یکدیگر ۵-1 خواهد بود. گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 243

صفحه 244:
۲-۶ اجزای دو اتصالی و نقاط اتصال ‎ob‏ ۳ :یک راس مانند ۷ از گراف 63 می باشد به نحوی که حذف راس ۷ همراه با تمام لبه های متلاقی با ۰۷ گرافی بهانام ایجادمی کند که حداقل دارای دو جز متصل است. ‏كراف ده اتسار یک گراف متصل است اگر فاقد نقاط اتصالی باشد . ‏گروه کامپیوتر ساختمان‌داده ها به نباری ‏ صفحه: 244 ‎ ‎ ‎ ‎ ‎ ‎

صفحه 245:
۲-۶ اجزای دو اتصالی و نقاط اتصال رای در سا یک گراف بدون جهت متصل مانند 3) یک زیر گراف دو اتصالی حداکثری به نام ۲ می باشد. منظور از اين حداكثر اين است که 3) فاقد زیردرختلنی است که هم دو اتصالی و هم دارای خاصیت ۳ استفاده از درخت پوشای عمقی گراف 68 . می توان اجزای دو اتصالی ایک گراف بدون جهت متصل را به دست آورد. یک لبه غیردرختی مانند( ایک لبه غیربر گشتی است (6096 ‎back‏ ‏اگر و تنها اگر لا جد ۷ و با ۷ جد لا باشد گروه کامپیوتر ساختمانداده ها به نباری ] صفحه: 245

صفحه 246:
۲-۶ اجزای دو اتصالی و نقاط اتصال ريشه یک درخت پوشای عمقی یک نقطه اتصال است . اگر و تنها اگر دارای حداقل دو فرزند باشد. هر راس مانند لأ یک نقطه اتصال است . اگر و تنها اگر دارای یک فرزند مانند ۷۷ باشد به نحوی که قادر باشیم با استفاده از یک مسیر که شامل تنها ۰۷۷ نسل ها و یک لبه بر گشتی . به جد لا برسیم. گروه کامپیوتر |( ساختمانداده هابه نباری ] صفحه: 246

صفحه 247:
۲-۶ اجزای دو اتصالی و نقاط اتصال برای هر راس در (۰10۷۷)۷ 6 پایین ترین عدد عمقی است که مى توانیم از لا با استفاده از یک مسیر نسل ها به دنبال حداکثر یک لبه برگشتی . به آن برسیم. ‎Low (u) = min { dfn (u) .min {low(w) | w‏ ‎is a child of u}.min { dfn (w) | (u.w‏ ‎is a back edge } }‏ ) که لا یک نقطه اتصال است . اگر و تنها اگر لا ريشه یک درخت پوشا بوده و دارای دو فرزند يا بیشتر باشد و يا لا ريشه نباشد و دارای یک فرزند مانند ۷۷ است به نحوی که (۷) ‎low (w) = = dfn‏ است. گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 247

صفحه 248:
UY ‏اجزای دو اتصالی و نقاط اتصال‎ ۲-۶ + 1 ۷ ۶ ۵ 0 5 Vertex A + 3 ۶ 95 0 1: 0 + | ‏هه‎ A + ۷ 5 5 0 + | tow ۲۵۵۲ 2 3 ‏مقدیر ۳8 و 0۷۷]برای درخت پوشای با‎ گروه کامپیوتر ‏ ساختمانداده هابه نباری ] صفحه: 248

صفحه 249:
۴-۶ درختان پوشای با حداقل هزینه 5 هزينه يى درخعت برشای یک گراف جهت دار دارای وزن ۰ مجموع هزینه های( وزن های) لبه ها در درخت پوشا می باشد. خت يوشاى حدافل هرن درخت پوشایی است که دارای کمترین برای به دست آوردن درخت پوشای حداقل هزینه یک گراف جهت دارمتصل می توان از سه الگوریتم متفاوت استفاده نمود : ‎<i ۴‏ الگوریتم راشال . الگور یتم م . الگور یتم سولیر ‏هر سه روش از یک طراحی الگوریتمی به نام خط مشی ‎greedy‏ ‏استفاده می کنند. ‏گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 249 ‎ ‎ ‎ ‎ ‎ ‎

صفحه 250:
۲-۶ درختان پوشای با حداقل هزینه برای درخت های پوشا از ملاک کمترین هزینه استفاده می شود. روش ما باید دارای شرایط زیر باشد : ۱) بايد فقط از لبه های داخل گراف استفاده کنیم. ۲ باید دقیقا از 4ب لبه استفاده کنیم. ۳ نباید از لبه هایی که ایجاد یک حلقه می کنند . استفاده کنیم.

صفحه 251:
۲-۶ الگور يتم راشال ۱ در لین روش . درخت پوشای با کمترین هزینه ۲ . لبه به لبه ساخته می شود. لبه های مورد استفاده در ۲ .به ترتیب صعودی وزن ها می باشد. یک لبه در ] خواهد بود. اگر با لبه های قبل که در ۲ بوده اند , تشکیل یک حلقه ندهد جون © متصل است و دارای 0 ‎ <‏ راس است . دقيقا 1 - 9 لبه برای ۲ انتخاب می شود. | گروه کامپیوتر لساختسانداده ماب نیام | صفحه 232 |

صفحه 252:
۳-۶ الگوریتم راشال (منال) وس 0ه

صفحه 253:
۲-۶ الگوریتم راشال گروه کامپیوتر ‏ |رساختمانداددهايه زيار |[ صفحه. 253

صفحه 254:
۲-۶ الگوریتم پریم ‎iS‏ الگوریتم پریم مانند الگوریتم راشال . در هر زمان یک لبه از درخت پوشای حداقل هزینه را می سازد. هر چند در هر مرحله الگوریتم . مجموعه لبه ها انتخاب شده یک درخت را تشکیل می دهند . در مقابل . مجموعه لبه های انتخاب شده در الگوریتم راشال در هر مرحله یک جنگل را تشکیل می دهند. الگوریتم پریم با یک درخت مانند ۲ که تنها شامل یک راس است ۰ شروع می کند. این می تولند هر یک از رئوس در گراف اصلی باشد. سپس یک لبه با کمترین هزینه مانند ‎go aa. (U,V),‏ شود به نحوی که نیز (0:۷) لا [رخت می باشد. اين عمل را تا زمانی که ۲ شامل 1 - ‎٩‏ لبه باشد . ادامه می دهیم. گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 254

صفحه 255:
۳-۶ الگوریتم پریم (منال )

صفحه 256:
۳-۶ الگوریتم سولین بر خلاف الگوریتم پریم و راشال , الگوریتم سولین چندین لبه را برای اضافه نمودن در هر مرحله انتخاب می کند. در ابتدا یک مرحله , لبه های انتخاب شده . همراه با تمام 10 راس گراف , تشکیل یک درخت پوشا را می دهند. در خلال یک مرحله یک لبه برای هر درخت در جنگل انتخاب می کنیم. اين لبه دارای حداقل هزینه بوده یعنی دقیقا دارای یک راس در درخت می باشد. از آنجا که دو درخت در جنگل می توانند یک لبه یکسان انتخاب کنند . لذا می توانیم کپی تکراری از لبه ها را حذف کنیم. در ابتدای مرحله اول ؛ مجموعه لبه های انتخاب شده خللی می باشد. این الگوریتم هنگامی به پایان می رسد که فقط یک درخت در انتهای یک مرحله باقی و یا هیچ لبه ای برای انتخاب باقى نمانده باشد. گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 256

صفحه 257:
3 4 a 3 1 3 8 i

صفحه 258:
۴-۶ یک مبدا و چند مقصد در اين مساله كراف جهت دار ( 8. لا) = را در نظر می كيرهم. تابع وزنى (©) للا 0< را برای لبه های 3) و راس مبدا فرض ميکنيم. مساله . تعیین کوتاهترین مسیر از به بقيه رئوس در 3) است. فرض می کنیم تمام وزن ها مثبت باشند. rok eats 9 6 33 ‏6ه ۷ ان‎ 1 ‏۱و‎ 1 ۷ ۷ 9 6 6 3: eo یک گراف و کوتاهترین مسیر از ما [298 soe ‏گروه کامپیوتر اس اندادد ماب نبا إل‎ J

صفحه 259:
۴-۶ کوتاهترین مسیر بین هر جفت از رئوس ‎ .‏ مساله کوتاهترین مسیر بين هر زوج از رئوس به مفهوم یافتن کوتاهترین مسیر بين همه رئوس _. ملباشد (به طوری که [ ‎CDF‏ از آنجا که 65 دارای ۲۱ راس و 5۱0۵۳۲۵5۴۵۵۴ دارای (م0 می باشد, لذا كل زمان صرف شد( ”0017 خواهد بود. گراف 3) توسط ماتریس مجاورتی هزینه خودبا 0 < [][051]1) ارایه می شود ‎j)‏ < آ) و در صورتی که لبه ‎ (‏ * 1) < [. 1 > در © نباشد. [][6051]1 حاوی عدد بزرگی خواهد بود که اين عدد باید همان محدودیت های مطرح شده در خصوص مساله یک مبدا ( 50۱۲66۵ 510916 ) را دارا باشد. گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 259

صفحه 260:
۴-۶ کوتاهترین مسیر بین هر جفت از رئوس ‎٠‏ [ ]رنه کوتاهترین مسیر از ۱به ز تعریف می کنیم که اين مسیر هیچ راس میلنی که اندیس کوچکتر یا مساوی از (ک ط ‎dh‏ > داشته باشیم . عبور نمی کند. ‎capa SAG LAL]‏ مسير از أبه [در 63 است. نکته اصلی در همه الگوریتم هایی که روی زوج ها عمل می کنند . ‏لین می باشد که همه آنهابا روع کرده و ماتریس های متوالی ‎wt‏ .., ۸ رااینگاد مى کند. 1 ‎ ‏گروه کامپیوتر ساختمانداده هابه نباری 8 صفحه: 260 ‎ ‎ ‎ ‎ ‎

صفحه 261:
۴-۶ کوتاهترین مسیر بین هر جفت از رئوس . ۱۳ اكر قبلا ' “مرا توليد كرده باشيم . مى توانيم با عمل روی هر زوج از رئوس و زبا توجه به یکی از دو قاعده زیر به دست آوریم : ) کوتاهترین مسیر از ابه ز از هیچ راسی با اندیس بزرگتر از | عبور نمی کند و حتی از راسی با اندیس نیز نمی گذرد و بنابرلین هزینه ان است. at ۲ جنير هن مسیری از ‎wl‏ ا مى گذرد بنابرلین چنین مسیری شامل مسیری از ابه > و به دنبال آن مسیری از به ا می باشد. هیچ کدام از اين مسیرها با اندیس بزرگتر از ۲-4 عبور نخواهد کرد . بنابراین هزینه آن ها و می باشد. ATA) ۹ گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 261

صفحه 262:
۴-۶ کوتاهترین مسیر بین هر جفت از رئوس ۸۶<0,([ز]۱]0 4 + ۸۲۱۲/0 رزر]ز] "هنت [ز]]2۳ ‎Vues:‏ ‎ALL =coshil/l‏ . فرمول ۲ تابع 6و۱ ه]۸۳۱]1 را محاسبه می کند. زمان کل ۵1160515 ب(ابولمت. | گروه کامپیوتر لس اختماندابد هاب» ‎ote J Ot‏ 252 |

صفحه 263:
UY ‏مثال)‎ ( of ‏گراف چهت دار 6 و ماتریس هزینه‎ ۴-۶ ۶ 7 hee ‏مح‎ fr: 5 r 9 yo. ¢ ۱ ماتریس لمجارتى هزينه لها براي كرا © گراف جهت دار 6 ساختمازدادمها به نباری | صفحه؛ 263

صفحه 264:
| گروه کامپیوتر لس اختماندابد هاب» نبا سنج 254 |

صفحه 265:
۴-۶ بسته بودن تعدی در یک گراف جهت دار با لبه های بدون وزن مانند 63 . آیا برای هر دو راس مانند 1 ولّء مسیری از آ به أ[ وجود دارد يا خير؟ دو حالت می تواند مورد توجه قرار بگیرد : ۱)وقتی که همه مسیرها طول مثبت داشته باشند که بسته بودن تعدی یک گراف نامیده می شود. ۲ زمانی که طول مسیرها غیرمنفی باشد که بسته بودن تعدى انعکاسی یک گراف نامیده می شود.

صفحه 266:
۴-۶ ماتریس بسته پودن تعدی و ماتربس بسته بودن تعدی انعکاسی تعريف ؛ ماتريس بسته بودن تعدى ‎٠‏ + كراف جهت دار مانند ©, ماتریسی است که اگر مسیری او عبز ][ل4بزگتر از صفر وجود داشته ‎ope ALI EQ, «ash‏ خواهد بود. تعريف ؛ ماتريس بسته بودن تعدى انعكاسى . ليك كراف جهت دار مانند 08 : ماتريسى است كه اكر مسير ط جز ‎GIS‏ ساوى با صفر از ‎١‏ به ز وجود داشته ‎Val =O su‏ 2 غير اين صورت خواهد بود. تنها تفاوت و ‎polis ot‏ روی قطر اصلی است. بنابراین 1= [][ مه باشد گروه کامپیوتر ساختمانداده ها به نباری ] صفحه: 266

صفحه 267:
WY AOV 45.3 0-5 ‎GLE AOV (activity on vertex) ac5: wae‏ جهت داری مانندق) است که رئوس آن نمایانگر فعالیت ها یا عملکردها است و لبه های آن نمایانگر ارتباطات بین عملکردها می باشد. این گراف . شبکه فعالیت های روی رئوس یا شبکه /۸100۷ نامیده می شود. ‏گروه کامپیوتر ‏ساختمانداده ها به نباری ] صفحه. 267 ‎ ‎ ‎ ‎ ‎

صفحه 268:
۵-۶ شبکه ۸0۷ ۱ تعریف ۰ راس آ در یک شبکه ۸60۷ مربوط به گراف 6 . یک راس تقدمی برای راس ژ خواهد بود. اگر و تنها اگر مسیر جهت دارى از راس 5 به ل[ وجود داشته باشد. اكر و تنها اكر <[: ‎١‏ > لبه اى در 6 باشد . يك راس تقدمى بلافصل برای ‎cul J‏ اگر آ یک راس تقدمی برای ژ باشد . آنگاه ژ راس تاخیری برای آ مى باشد. اگر آ یک راس تقدمی بلافصل برای [ باشد . آنگاه ‏ راس تاخیری بلافصل برای آ می باشد. گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 268

صفحه 269:
۵-۶ شبکه ۸۵۷ (منال) گروه کامپیوتر ] ساختمانداده ها به نباری ] صفحه: 269

صفحه 270:
S AOV ‏شبکه‎ ۵-۶ تعریف :یک رابطه . تعدی است اگر وتنها اگر برای تمام سه گانه های ۷[ . ایا ۰ . >! . را نتيجه می دهد.ز 320 [.آ ‎ik‏ >=( یک رایطه . روی مجموعه 5 غیر انعکاسی است . اگربرای تمامی مقادیر در آ . ], 5 نادرست (85) باشد. رابطه ای که هم تعدی و هم ‎pat‏ انعکاسی باشد . یک رابطه ترتیبی نامیده می شود. اگر رابطه تقدمی غیرانعکاسی نباشد . آنگاه فعالیتی وجود دارد که راس تقدمی آن خودش است. گروه کامپیوتر ساختمانداده ها به نباری ‏ صفحه: 270

صفحه 271:
۵-۶ شبکه ۸0۷ اف جهت داری که هیچ حلقه ای نداشته باشد . گراف ۵6۷6116 جهت دار یا جهت داری که هیچ ای ب جهت 09 نامیده می شود. تعریف ؛ ترتیب موضعی یک ترتیب خطی از رئوس گراف است به نحوی که به ازای هر دو راس او ؛ اگر آ یک راس تقدمی برای ژ در شبکه باشد . آنگاه آً در اين ترتيب خطی بیش از [قرار می گیرد.

صفحه 272:
۵-۶ فعالیت بر روی لبه (6(۷) شبکه یک شبکه فعالیت که ارتباط نزدیکی با شبکه ‎۸٩0‏ داشته باشد , فعالیت روی لبه يا شبكه 8016 ناميده مى شود. اعمالى كه روى يروزه صورت كيرد با لبه هاى جهت دار نمايش داده مى شوند. رئوس شبکه نمایانگر وقایع است. یک واقعه فقط زملنی اتفاق می افتد که همه فعالیت های وارده به آن قبلا کامل شده باشد.

صفحه 273:
۵-۶ فعالیت بر روی لبه (۸6(۷) شبکه 3 شبکه های فعالیت از نوع ۸60۴ در ارزیلبی اجرایی چندین نوع از پروژه ها به طور موثری مورد استفاده قرار می گيرند. اين ارزیابی شامل تعیین چندین نکته در مورد پروژه ها به شرح زیر است : (۱) کمترین زمان ممکن برای تکمیل پروژه (۲) تعیین اينکه کدام فعالیتها بایستی زودتر انجام شوند تا زمان تکمیل پروژه کاهش یابد. گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 273

صفحه 274:
WY ‏شبکه‎ (AOV) au ‏فعالیت بر روی‎ ۵-۶ چندین تکنیک و روش بسیار مهم برای ارزیابی مدل های شبکه پروژه توسعه يافته اند از جمله : 1 ۶8۲( ارزیلبی‌اجراییو تکنیکب ازبینی) 2 ۳۱۷( روش‌مسیر بحرلنی) 3 ۱8۵۴5 تخصیصرمنبع و ‎sai ile‏ رود چند گلنه) ] 27 ete ‏گروه کامپیوتر اس اناده هيه وباك إل‎ J

صفحه 275:
۵-۶ فعالیت بر روی لبه (6(۷/) شبکه از آنجا که فعالیتهای یک شبکه 06) می توانند به طور موازی انجام شوند . کمترین زمان لازم برای کامل شدن پروئه . اندازه طولانی ترین مسیر از راس اغازی به راس پایانی است. مسیری با طولانی ترین طول . یک مسیر بحرانی است. گروه کامپیوتر |( ساختمانداده هابه نباری ]| صفحه: 275

صفحه 276:
۵-۶ فعالیت بر روی لبه (6(۷/) شبکه زودترین زملنی که واقعه (۲ می تولند اتفاق بیفتد , طولانی ترین مسیر از راس آغازی۲۵ به راس ۲ است. زودترین زملنی که یک واقعه می تولند اتفاق بیفتد . زودترین زمان شروع همه وقلیع موجود که از لین راس خارج شده لند را تعیین می کند. لین زمان رابه صورت () 68۲۱۷ برای فعالیت۹ نشان می دهیم. گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 276

صفحه 277:
۵-۶ فعالیت بر روی ‎(AOV) au‏ شبکه ۵ برای هر فعالیت مانند :4 می توان دیرترین زمان را نیز تعریف کرد. که در واقع دیرترین زملنی است که یک فعالیت می تواند انجام شود به شرط اينکه زمان پروژه را افزایش ندهد. همه فعالیتهلیی که به صورت (۱8۲6)1 < (۱) 66۲۱۷ هستند . فعالیت های بحرانی نامیده می شوند. ‎Law‏ ()6۵۲۱۷ و (12]6)1 . اندازه يا میزان بحرانی بودن یک فعالیت را نشان می دهند

صفحه 278:
۵-۶ محاسبه زودترین زمان به منظور به دست آوردن زودترین و دیرترین زمان برای تمام فعالیتهای یک شبکه . مناسب است که برای تمام وقایع در شبکه . ابتدا زودترین زمان رویداد واقعه یعنی [[]*68۲1165 و سپس ‎Gas po‏ زمان رویداد واقعه یا [[]25]651] محاسبه نمود. سپس اگر فعالیّت به وسیله لبه < ۰۱ ۷ > ارایه شود , می توانیم ‎late(i), early(i)‏ را از فرمول زیر محاسبه کنیم : ‎earl) =earlie$kl‏ late(i) = latest [I] - duration of activity, ‏در دو‎ lastest[j] » earliest[j] ou; : ‏گردد‎ كروه كامبيوتر | ساختمانداده هابه زبار || صفحه. 278

صفحه 279:
مرتب سازی درجی مرتب سازی سریع مرتب سازی ادغام تب سازی لیست

صفحه 280:
فصل هفتم ۰ مرتب سازی * فرض کنید مجموعه ای از اطلاعات مربوط به اشیا داریم . اكر اين مجموعه به راحتی در حافظه قلبل دسترسی قرار گیرند . آنرا لیست می نامند. * در صورتی که برای ذخیره کردن مجموعه به حافظه خارجی نیاز باشد آنرا فایل می نامند. * اطلاعات یک شی از مجموعه فوق را رکورد می نامند. * هر جز از رکورد را فیلد می نامیم. ‎J‏ گروه کامپیوتر لسن ]ت۱۳ ‎ ‎ ‎ ‎ ‎

صفحه 281:
۱-۷ اصطلاحات # زملنی که يى ليست از رکوردها را جستجو می کنیم . هدف پیدا نمودن ر کوردهایی است که دارای فیلدی با مشخصات مورد نیاز باشند. اين فیلد را اصطلاحا کلید می نامند. "ذ كارايى روش و خط مشى جستجي بستكى به آرايش و نحوه قرار كرفتن ركوردها در ليست دارد. | 252 te ‏إل‎ tsb tuto nics ‏ا‎

صفحه 282:
۱-۷ جستجوی ترتیبی ۳ فرض كنيد كه ليست ويك كليد جستجو به نام 563۳۷ داشته باشیم . هدف بازیابی رکوردی است که کلید آن منطبق بر 7 باشد. اگر این لیست دارای 1۱ رکورد باشد . با ۷ اتب مقدار کلید رکورد [ دسترسی پیدا می کنیم. لیست را با جستجوی مقادیر کلیدهای ۰۰.۰ ‎list[n-L]. key‏ ۷ مورد بررسی قرار می دهیم تابه رکورد مورد نظر برسيم يا تمام ليست را جستجو کنیم. گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 282

صفحه 283:
۱-۷ تحلیل تابع 560650637010 eqsearch تحلیل تابع 560565۲617 : قبل از شروع جستجو . 0 را در موقعیت ۱5]]۳01.166۷ قرار می دهیم. این موقعیت در واقع انتهای لیست را نشان می دهد. با جلوگیری از تست پایان لیست ۰ یعنی شرایطی که 1- 9 < آ باشد. می توانیم براحتی ساختار حلقه را ساده کنیم. اگر عمل جستجو موفقیت آمیز نباشد. ۷9 < آ. مقدار -۱ را برمی گردانيم . بنابراین در یک جستجوی ناموفق نیاز به 1 + 9 عمل مقایسه کلید داریم که زمان آن(0)۳ خواهد بود. گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 283

صفحه 284:
۱-۷ تحلیل تابع 560650637010 میانگین تعداد عمل مقایسه در یک جستجوی موفقیت آمیز برابر است با :

صفحه 285:
۱-۷ جستجوی دودویی در جستجوی دودویی بایستی لیست بر اساس فیلد کلید مرتب شود , یعنی : .list{O].key s list{1].key =... = list[n-1].key گروه کامپیوتر ] ساختمانداده ها به نباری ] صفحه: 285

صفحه 286:
۱-۷ جستجوی دودویی 5 این جستجو با مقایسه 568۲6۳۷0 و ۱5]۳00016[۰16۷ . به ازای )۳۸۱۵۵16 12 شروع می شود. هنكام مقایسه سه حالت ممکن است روی دهد 1( ۱5]۳۲00۱6[.6۷ 568۲۷۳ ۰ در لین حاللت یکوردهایی بین [۱5]]۳10016] و [1-]۱15 کنار گنلشته شده و جستجو بارکوردهای[۱151]0 تا [15]۳010016-1] دنبللمی‌شود. 2( ۱15]۳۱۱00۱6[.6۷ 563۲6۳۷۲۸ : در لین‌حا لنجستجو با موفقیتبه پایان‌می یسد ۷ ۲ < 568۲1۱۳۷۲۱ : در لین حللت . ر کوردهای بین ‎p List[O]‏ [5]۳010016 کنار گذاشته شده و جستجو با رکوردهای [15]۳010016+1] تا 9 ge dls list[n-1] a گروه کامپیوتر ساختمانداده ها به نباری

صفحه 287:
WY ۱-۷ درخت تصمیم گیری برای جستجوی 19292

صفحه 288:
dist Verification) 2... yl) \-Y نوعا مقایسه لیستها جهت تعیین تست یکی بودن یا تعیین اختلاف آنها نوعی بررسی لیست به حساب می آید. مستئله وارسی لیست یک نمینه از جستجوی مکرر یک ليست است که هر کلید آن به عنوان کلید جستجو در ليست دیگری به کار می رود. گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 288

صفحه 289:
۱-۷ وارسی لیست(۷۵۳۵6۵1۵0۵ اعق) ‏ تلبع 1 ۷6۵۲1۴۷ : دو لیست را در نظر می گیرد که به صورت تصادفی مرتب شده لند . به سادگی می توان ثلبت نمود که زمان مجلنبی لین تلبع در بدترین حللت برابر با ‎O(MN)‏ ‏می باشد. تلبع ۷6۲۴۷2 : از همان ورودی تابع ۷6۲۴۷1 استفاده می کند با لین تفاوت که لیستها قبل از وارسی . مرتب می شوند. در بدترین حالت ۰ زمان لازم (۳) 0050۲6 ( صغم + (0) 150۲ + خواهد بود . )11561( ‏زمان لازم جهت مرتب کردن 83 ركورد از ليست اول‎ : ۲50۲۴ (n) (۲) 50۲6 : زمانلانم برلیمرتبک ردن19] ی کورد از لیستوم (1512) می‌باشد

صفحه 290:
WY ‏مرتب سازی‎ ۲-۷ دو نوع از کاربردهای مهم مرتب سازی عبارتند از : + کمک در امر جستجو ۴ تطابق عناصر و وارده ها در يك ليست گروه کامپیوتر ] ساختمان‌داده ها به نباری ] صفحه: 290

صفحه 291:
Insertion Sort,,> 2 ‏مرتب سازی‎ ۲-۷ در اين نوع مرتب سازی . در هر لحظه فقط یک رکورد در داخل ليست قابا. مسبت است نابراین رکورد؟ را در بين ركوردهاى مرتب شد,۱ :۶1۹۰۰۰۰/۲ *رار م, دهیم که رشته حاصل با اندازه 1 نیز موتب شده باشد ۰ وبگاک...> ی > از گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 291

صفحه 292:
۳-۷ تحلیل تابع 50۲ ‎insertion‏ زمان محاسباتی جهت درج یک رک.رد به داخل لیست مرتب شده . () 0 خواهد بود. 4 9 زمان كل در بدترين حالت برابر است با ‎٠‏ a(S!) =0ur) 1-0 | گروه کامپیوتر ‎ob tuto.‏ نبا سنج 292 ]

صفحه 293:
WY ‏مرتب سازی درجی(مثال)‎ ۳-۷ رشته (۱و۲و۳و۴و۵ ) را با 5 < 9 در نظر گرفته , بعد از عمل درج . داریم : ۱ © ۰ ۵ 6 61

صفحه 294:
۳-۷ انواع مرتب سازی د مرتب سازی درجی دودویی : برای انجام این عمل بایستی به جای جستجوی ترتیبی از جستجوی دودویی استفاده نماییم. در این حالت . تعداد انتقال ر کورد بدون تغییر باقی خواهد ماند. مرتب سازی درجی لیست عناصر یک لیست را می توان به جای قرار دادن در آرلیه در یک لیست پیوندی پویا قرار داد. در این حالت . تعداد انتقال رکورد صفر می شود زیرا فقط فیلد اشاره گر تغییر مى کند.

صفحه 295:
۴-۷ مرتب سازی سریع ۳ تفاوت مرتب سازى سريع با درجى در اين است كه در اين نوع مرتب سازی کلید مفصل رک در سمت راست با توجه به كل فايل قرار مى كيرد. بنابراين اككر كليد در نكل (5)1 قرار بكيرد : پس به ازای ‎JP Sy ‘ Aydyrry‏ می باشد. از ‎Et‏ رو ‎GSS NAD‏ « فایل اصلی به دو زیر فایل که شامل رکوردهای و می باشته ‎past‏ مى ‎Rostra‏ ‏آنجایی که رشته مرتب شده از تمام رکوردها در زیر فایل اول ممکن است در سمت چپ (5)1 و تمام رکوردها در زیر فایل دوم در سمت راست (5)1 قرار گیرند . لذا اين دو فایل می توانند به طور مستقل مرتب گردند. گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 295

صفحه 296:
WY ‏مرتب سازی سریع‎ ۲-۷ میانگین زمان محاسبه برای مرتب سازی سریع 2۳ رمع آبالک. قضه س فرض کنید(2)زمآن لازم برای مرتب سازی یک فایل با 13 ركورد باشد. بنابراین به بزای مقدار ثابت > داریم : گروه کامپیوتر ساختمان‌داده ها به نبارل || صفحه: 296

صفحه 297:
۴-۷ مرتب سازی سریع ‎eal‏ سازی سریع جهت پیاده سازی عمل بازگشت پذیری به فضای پشته نیاز دارد. ‏حداکثر عمق باز گشت پذیری 8 109 خواهد بود و به فضای پشته (۲ ۵)109 نیاز خواهد بود. ‏| گروه کامپیوتر ‎ts btn‏ سنج 297 | ‎ ‎ ‎ ‎

صفحه 298:
۵-۷ زمان مرتب سازی بهینه ۳ O(nlog, n) . log,(4)+1 Q(alog, 1) گروه کامپیوتر ساختمان‌داده ها به نباری 8 صفحه: 298

صفحه 299:
WY ‏درخت تصمیم گیری(منال)‎ ۵-۷ (wae گروه کامپیوتر ] ساختمان‌داده ها به نباری ] صفحه: 299

صفحه 300:
۶-۷ مرتب سازی ادغام الگوریتم (0)1 : مراحل در (62)1 فضای ادغام هنگامی که تعداد رکوردها یعنی 0 مجذور کامل بوده و تعداد رکوردهای هر فایل مورد ادغام نیز مضربی از باشلد , در نظر گرفته می شود. گروه کامپیوتر ] ساختمانداده ها به نباری ] صفحه: 300

صفحه 301:
۶-۷مراحل انگوریتم ‎OD)‏ مره ۱ زکور یز رگترین کلیدها را مشغتض کنید ین امر با ردییی و فایل نورد اتغام از سمت راست به چپ صورت می گیرد. مرحله ۲ : رکوردهای فلیل دوم که از مرحله اول شناسایی شده لند را با آن دسته از رکوردهایی که در سمت چپ ر کوردهلیی که از فایل اول, شناسایی شدند . تعویض کنید. لین امر موجب می شود که رکورد با بیشترین کلید . تشکیل یک بلاک مجاور را بدهد. مرحله ۲ : بلاک با بیتت‌ین رکورد رابابلاک های منتهی الیه سمت چپ تعویض کنید( مگر اینکه آن بلاک قبلا بلاک منتهی الیه سمت چپ باشد ) . بلاک منتهی الیه سمت راست را مرتب کنید.

صفحه 302:
۶-۷مراحل الگوریتم (02)1 (ادامه) مرحله ۴ + تمام بلاک هابه جز بلاک با بزرگترین رکوردها رابه ترتیب غیر نزولی آخرین کلید در بلاک مرتب کنید. / مرحله ۵ : هر تعداد غیر مرحله ادغامى كه براى ادغام بلاك ( غير از بلاگ هلیی پا بزرگترین کلید) نیاز باشد را اجرا کنید. مرحله ۶ : بلاک با بزرگترین کلید را مرتب کنید.

صفحه 303:
۶-۷ مرتب سازی ادغام تکراری( غیر باز گشتی ) گروه کامپیوتر |[ ساختمانداده هابه نبا أ صفحه: 303

صفحه 304:
۶-۷ مرتب سازی ادغام باز گشتی 5 برای نسخه باز گشتی , ساختار رکورد خود را طوری تغییر می دهیم تا یک فیلد اتصال (101) را نیز دربر گیرد. الگوریتم ادغام در بدترین حالت و حالت میانگین به زمان محاسباتی برابر با (1۱ 109 0)۳ نیاز دارد. لين الگوریتم همچنین متناسب با تعداد رکوردهلیی که در فلیل باید هرتب.می شدند: نیازمند فضای اضأفی است.

صفحه 305:
۷-۷ مرتب سازی 6۵0 3 روش مرتب سازی 1630] نیازمند تنها یک مقدار حافظه اضافی است و در همین حال . بدترین حللت و زمان متوسط آن برابر با ‎n)‏ ۱09 0)۳ خواهد بود.با وجود اينکه مرتب سازی 1630 کمی کندتر از مرتب سازی ادغام با استفاده از (00)10 فضای اضافی است ولی از مرتب سازی ادغام با استفاده از (0)1 فضای اضافی سریعتر می باشد. گروه کامپیوتر ساختمانداده ها به نباری ‏ صفحه: 305

صفحه 306:
۷-۷ مرتب سازی 1620 5 برای مرتب سازی یک لیست ۰ ۲0-1 گذر بر روی لیست اعمال می شود. در هر كذر . اولين ركورد در 1198210 با آخرين رکورد تعویض می كردد . از آنجا كه اولين ركورد هميشه شامل بزركترين كليد است. اين رکورد با بزرگترین کلید را در محل 9 ام قرار می دهیم. در گذر دوم رکورد با دومین کلید بزرگ را در موقعیت ۷-1 قرار می دهیم و در نهلیت در آ امین گذر . رکوردبا آ امین کلید بزرگ را در موقعیت - 1۱ 1+ آ قرار می دهیم. گروه کامپیوتر ساختمان‌داده ها به نبارل ‏ صفحه: 306

صفحه 307:
۸-۷ مرتب سازی مینا 5 در اینجا توجه خود را روی مرتب سازی ر کوردهایی معطوف می کتیم که دارای چندین کلید هستند. لین کلیدها دارای برچسب زا .به نحوی که نشان؟اهنده با اهمیت ترین کلید و مش کننده کم اهمیت ترین کلید است. ۷ (بااريشتريزيقم) روش های مختلف مرتب سازی : & ۱5۵( کم ارزش ترین رقم ) ساختمانداده ها به نباری ] صفحه. 307 گروه کامپیوتر

صفحه 308:
۸-۷ مرتب سازی ‎Lie‏ لا در مرتب سازی مبنا با استفاده از مبنا ‏ کلید مرتب سازی را تجزیه می کنیم. لآ زمان محاسباتی کل برابراست با : ‎O(MAX_DIGIT (RADIX_SIZE + n )‏ لا انتخاب مبنا در زمان مرتب سازی مبنا موثر است . گروه کامپیوتر ساختمانداده ها به نبارل ] صفحه: 308

صفحه 309:
‎٩-۷‏ مرتب سازی لیست و جدول ‏این مرتب سازی . لیست را به طور فیزیکی مرتب نکرده بلکه فیلدهای اتصال را برای نشان دادن ترتیب عناصر اصلاح می کند. ‏گروه کامپیوتر ساختمانداده ها به زباری 6 صفحه: 309 ‎ ‎ ‎ ‎

صفحه 310:
۱۰-۷ خلاصه مرتب سازی داخلی ‎is‏ # مرتب سازی درجی زملنی که لیست به صورت جزیی مرتب شده باشد , خوب کار می کند. # مرتب سازی ادغام بهترین روش برای بدترین حالات است. # مرتب سازی سریع بهترین میانگین را دارد. # عملکرد مرتب سازی مبنا بستگی به کلید و انتخاب مبنا دارد. #به ازای 20 > 9 مرتب سازی درجی (۱۳56۲۲109_50۲) سریعترین است. #برای مقادیر ‎٩‏ بین ۲۰ تا ۴۵ مرتب سازی سریع (01011650۲6) بهترین و سریع ترین می باشد. #برای مقادیر بزرگتر از 9 . مرب سازی ادغام(6_50۲ ۲06۲9 ) سریع ترین می باشد گروه کامپیوتر .ال ساختمانداده هابه نباری ‏ صفحه, 310

صفحه 311:
WY ‏خلاصه مرتب سازی داخلی‎ ۱۰-۷ # مرتب سازی داخلی در هر زمان می تولند سه پلاک (چمیعا به طول ‎Yd.‏ ‏رکورد ) را در قالی رانش به ترتیب تا مرتب نماید. در این مورد می توان از مرتب سازی سریع یا مس استقاده کرد. | گروه کامپیوتر [لساختمانداده طايه نبا ‎[Bitte J‏

صفحه 312:
۱۱-۷ مرتب سازی خارجی (روش های مرتب سازی فایل های بزر در زمان خواندن يا نوشتن از / به دیسک زمان های زیرمهم است : ‎)١‏ زمان جستجو(1۳06] 5661 ) ‎(latency time) ,>6 ou; ۲‏ (Transmission time) Jusi ou; ۳

صفحه 313:
۱۱-۷ مرتب سازی خارجی ۱ معمولا روش مرتب سازی بر روی دستگاه های حافظه جانبی . مرتب سازی ادغام است. روش اساسا شامل دو مرحله يا مجزا است ‎)١‏ در ابتداء سگمنت های فلیل ورودی با استفاده از یک روش مرتب سازی داخلی مناسب . مرتب می شود. سگمنت های مرتب شده اصطلاحا رانش (۲۸۸۲۱) نامیده می شوند. ‏۲ در فاز دوم . رانش های تولید شده در فاز اول بر اساس الگوی درخت ادغام . ادغام شده و لین فرآیند تا هنگامی که تنها يك رانش باقى بماند ؛ ادامه بيدا مى كند. ‏گروه کامپیوتر ساختمازداده ها به زباره) || صفحه: 313 ‎ ‎ ‎ ‎ ‎ ‎

صفحه 314:
۱۱-۷ مرتب سازی خارجی برای تعیین زمان مورد نیاز مرتب سازی خارجی باید موارد زیر را در نظر گرفت محداکثر زمان جست: چعداکثر زمان جستجو عخداکثر زمان تاخیر مان لازم برای خواندن یا نوشتن یک بلاک ۲۵۰ رکوردی ‎(t, + t+ £,,) tig‏ ‎1S,‏ ۱ وومان لازم برای مرتب سازی داخلی ۷۵۰ رکورد - زمان لازم برای ادغام " رکورد از میانگیر ورودی به میانگیر خروجی | ‏گروه کامپیوتر اس اندادد ماب نبا ]رصن‎ J

صفحه 315:
/ ۱۱-۷ ادغام 1 طرفه ۲ ‎Hog? 17‏ ادغام >1 طرفه بر روی ۲۷۱ رانش حداکثر نیازمند ‏گذر بر روی داده ها می باشد. ‎aie al ‏با افزایش درجه ادغام . در میزان ورودی و خروجی صرفه جویی می شود‎ ‏گروه کامپیوتر ‏ ساختمانداده هابه نباری ] صفحه: 315 ‎ ‎ ‎ ‎

صفحه 316:
۱۱-۷ بکارگیری میانگیر برای عملیات موازی "" اگر ‏ رلنش به وسیله یک ادغام > طرفه با هم ادغام شوند . واضح است که به حداقل > میانگیر ورودی و یک میانگیر خروجی جهت انجام عملیات ادغام نیاز داریم. اگر ورودی . خروجی و ادغام داخلی به طور موازی وهمزمان انجام شود . کافی نیست. گروه کامپیوتر ‏ |( ساختمانداده هابه نبا || صفحه: 316

صفحه 317:
11-17 مراحل الكوريتم مربوط به مياذكير ‎١‏ مرحله ۱ :اولین بلاک هر یک از رلئش را وارد کرده و 16 صف بيوندى كه هر كدام داراى يى بلاک داده مى باشد را برقرار ميكنيم بلاکورودیباقی‌مانده را بسه دلخلکپشته پیوندی‌قرار دادم و بلاک‌های‌ورودیرا آزاد کنید همچنین!ا۵ را برلبر صفر قرار دهید مرحله ۲ : فرض کنید [25816۷]1] آخرین کلید وارد شده از رلنش آ باشد . فرض کنید که ۷ رانشی باشد که ۱2506۷ حداقل باشد. اگر 00 + ‎gay SY ST wl # lastkey[nextrun]‏ از رلنش ۵۱6۲۸۸ را مقداردهی اولیه کنید.

صفحه 318:
۱۱-۷ مراحل الگوریتم مربوط به میانگیر ‎x‏ مرحله۲ : تلبع 106۲96 /۷۷۵1>ارا برای ادغام رکوردهلیی از > صف ورودی و قرار دادن آنها در داخل میانگیر خروجی لا0 مورد استفاده قرار دهید. ادغام تا زملنی ادامه می یلبد که يا میانگیر خروجی پر شود و یا رکورد 00+ داخل لا0 ادغام شود. اگر در طی لین ادغام « یکی از میانگیرهای ورودی . قبل از اینکه میانگیر خروجی پر شود و یا اينکه 00+ داخل 001 ادغام گردد. خللی شود. ۷۷31۲6۲96 بر روی همان صف به میانگیر بعدی منتقل و میانگیر خللی رابه پشته میانگیرهای خللی برگشت می دهد. هر چند . اگر میانگیر ورودی در همان زمان که میانگیر خروجی پر شده یا 00+ داخل 914 ادغام كردد . خللی شود . آنگاه میانگیر خللی در صف باقی مانده و 16۷/3۷۲06۲96 به میانگیر بعدی بر روی صف منتقل نمی شود . مگر اینکه ادغام خاتمه یابد.

صفحه 319:
۱۱-۷ مراحل الگوریتم مربوط به میانگیر ۱ مرحله ۴ : تا کامل شدن عملیات ورودی/ خروجی صبر کنید. مرحله ۵ : اگر یک میانگیرورودی خوانده شد . آثرا برای رلتش مناسب به صف اضافه می کنیم. رانش بعدی را با استفاده از 1262۲۷1 تعیین کنید به نحوی که ‎Jfila> lastkey[nextrun]‏ كردد. مرحله ۶ ۰اگر 0 + ‎SY olST . ub # lastkey[nextrun]‏ بعدى از رانش ۲ را خوانده و میانگیر ورودی را آزاد کنید. اده ها به زباری گروه کامپیوتر

صفحه 320:
۱۱-۷ مراحل الگوریتم مربوط به میانگیر مرحله ۷ : شروع به نوشتن محتویات میانگیر خروجی 018 نمایید. 01 را برابر با ۱- 00 قرار دهید( 1 - ناه = ‎(ou‏ مرحله ۸ :اگر رکورد با کلید 0 + داخل میانگیر خروجی ادغام نشده باشد . به مرحله ۳ مراجعه كنيد در غير لين صورت تا تکمیل عملیات نوشتن صبر نموده و سپس الگوریتم را اخائيه مهنا

ساختمان داده ها به زبان C تهيه کننده :سيده فاطمه نوراني گروه :کامپيوتر شناسنامه منبع عنوان منبع: ساختمان داده ها به زبان C مترجم: امير عليخانزاده انتشارات: باغاني منبع اصلي: ‏Fundamental of data Structure in C ‏Horowitz Ellis گروه کامپيوتر ساختمان داده ها به زبانC صفحه2 : جايگاه درس در رشته کامپيوتر ضرورت اين درس: ‏ ‏ ‏ ‏ ‏ ‏ ‏ ضرورت نياز به زبانهاي سطح باال ضرورت ترجمه برنامه هاي نوشته شده با زبان سطح باال به برنامه به زبان ماشين تنوع زبانهاي برنامه نويسي سطح باال دروس پيش نياز: نوع درس :اجباري تعدادکل ساعات تدريس30 : تعداد جلسات تدريس10: گروه کامپيوتر ساختمان داده ها به زبانC صفحه3 : فصل اول :مفاهيم اساسي اهداف آشنايي با سيکل زندگي نرم افزار آشنايي با الگوريتم گروه کامپيوتر ساختمان داده ها به زبانC صفحه4 : 1-1سيکل زندگي نرم افزار-نیازمندی ها نیازمندیها تمام پروژه هاي بزرگ برنامه نويسي با مجموعه اي از مشخصات و خصوصياتي که اهداف پروژه را مشخص مي کند ،شروع مي شود. اين نيازمنديها اطالعاتي را به برنامه نويسان مي دهند(ورودي) و نيز نتايجي را که بايد ايجاد گردد(خروجي) تعيين مي کنند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه5 : 1-1سيکل زندگي نرم افزار -تحلیل تحليل: در اين مرحله مساله را به بخشهاي قابل کنترل تقسيم مي کنند. در تحليل يک سيستم دو شيوه وجود دارد : -1شيوه از باال به پايين -2شيوه از پايين به باال گروه کامپيوتر ساختمان داده ها به زبانC صفحه6 : 1-1سيکل زندگي نرم افزار -طراحی طراحي ‏ اين مرحله ادامه کاري است که در مرحله تحليل انجام مي شود. طراح سيستم را از دو نقطه نظر بررسي مي کند: .1 از نظرداده هاي مقصود( )data objectsمورد نياز برنامه .2 از نظر اعمالي که بر روي آنها انجام مي شود .اين ديدگاه به مشخصات الگوريتم ها و فرضيات خLLط ايجاد نوع داده مجرد مشي ها ي طراحي الگوريتم نياز دارد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه7 : 1-1سيکل زندگي نرم افزار... - ‏ پااليش(اصالح) و کدنويسي :در اين مرحله ،نمايشي براي داده هاي مقصد خLLود انتخLLاب مي شود و براي هر عملي که بر روي آنها انجام مي شود ،الگوريتم نوشته مي شود. ‏ بازبيني :در اين مرحله درستي برنامه ها اثبات مي شود و برنامه ها با انواع داده هاي ورودي مختلف تست و خطاهاي برنامه رفع مي شود. جنبه هاي مهم بازبيني: اثبات درستی گروه کامپيوتر تست اشکال زدايي ساختمان داده ها به زبانC صفحه8 : 1-1نمودار سيکل زندگي نرم افزار نيازمنديها تحليل طراحي پااليش و کدنويسي بازبيني گروه کامپيوتر ساختمان داده ها به زبانC صفحه9 : 2-1تعريف الگوريتم الگوريتم مجموعه اي از دستورالعمل ها است که اگر دنبال شوند ،موجب انجام کار خاصي مي گردد گروه کامپيوتر ساختمان داده ها به زبانC صفحه10 : 2-1شرايط الگوريتم ورودي :يک الگوريتم مي تواند هيچ يا چندين کميت ورودي داشته باشدکه از محيط خارج تامين مي شود. خروجي :الگوريتم بايستي حداقل يک کميت به عنوان خروجي داشته باشد. قطعيت :هر دستورالعمل بايد واضح و بدون ابهام باشد. محدوديت :اگر دستوذالعمل هاي يک الگوريتم را دنبال کنيم ،براي تمام حاالت ،الگوريتم بايد پس از طي مراحل محدودي خاتمه يابد. کارايي :هر دستورالعمل بايد به گونه اي باشد که با استفاده از قلم و کاغذ بت```وان آن را با دست نيز اجرا نمود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه11 : الگوریتم مرتب سازي: مثالی از الگوريتم2-1 for (i=0 ; i<n ;i++){ Examine list [ i ] to list [n-1] and suppose that the smallest integer is at list [min]; Interchange list [ i ] and list [min]; 12 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر 2-1الگوريتم بازگشتي تابع چيزي است که توسط تابع ديگر فراخوانده مي شود . توابع مي توانند خودشان را صدا بزنند (بازگشت مستقيم ) يا مي توانند توابعي که تابع فراخواننده را صدا ميزنند(بازگشتي غيرمستقيم) را احضار نمايند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه13 : مثال الگوريتم جستجوي دودويي2-1 int binsearch ( int list [ ] ، int searchnum ، int left ، int right ) { /* search list [0] <= list [1] <= … <=list [ n-1 ] for searchnum Return its position if found . Otherwise return -1 */ int middle ; if (left <= right ) { middle = ( left + right ) / 2 ; switch ( COMPARE ( list [ middle ] ، searchnum )) { case -1 : return binsearch ( list ، searchnum ، middle +1 ، right ) ; case 0 : return middle ; case 1 : return binsearch ( list ، searchnum ، left ، middle -1 ) ; } } return -1 ; } 14 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر 3-1آرايه ،ساختار و نوع داده آرايه مجموعه اي از عناصر از يک نوع داده مي باشد ساختار مجموعه اي از عناصر اس```ت ک```ه لزومي ن```دارد داده هاي آن يکسان باشد نوع داده مجموعه اي از انواع داده مقصد( )objectو عملکردهايي اس```ت که بر روي اين نوع داده ها عمل مي کنند گروه کامپيوتر ساختمان داده ها به زبانC صفحه15 : 3-1نوع داده اي مجرد • نوع داده مجرد یا انتزاعی ( )ADTکه شامل مشخصات داده ها و اعمالی که بر روی آنها انجام می شود. •جهت جداسازی پياده سازی و نمایش داده ها از یکدیگر. گروه کامپيوتر ساختمان داده ها به زبانC صفحه16 : نوع داده مجرد 3-1 توابع يک نوع داده به گروه هاي زير تقسيم مي شوند: -1ايجادکننده /سازنده -2تبديل کنندگان -3مشاهده کنندگان /گزارش کنندگان گروه کامپيوتر ساختمان داده ها به زبانC صفحه17 : 4-1تحليل نحوه اجراي يک برنامه معيارهاي محک زدن يک برنامه آيا برنامه اهداف اصلي کاري را که مي خواهيم ،انجام مي دهد؟ آيا برنامه درست کار مي کند؟ آيا برنامه مستند سازي شده است تا نحوه استفاده و طرز کار با آن مشخص شود؟ آيا برنامه براي ايجاد واحدهاي منطقي ،به طور موثر از توابع استفاده مي کند؟ آيا کد گذاري خوانا است؟ آيا برنامه از حافظه اصلي و کمکي به طور موثري استفاده مي کند؟ اين قس``مت مرب``وط ب``````ه تخمين هاي حافظ``````ه و زمان م``ورد نياز ب``وده و مس``تقل از ماش``ين اس``ت .اين قس``مت را تحلي```ل نح```وه اج``راي برنام``ه مي ناميم. آيا زمان اجراي برنامه براي هدف شما قابل قبول است؟ گروه کامپيوتر ساختمان داده ها به زبانC صفحه18 : 4-1ميزان حافظه يا پيچيدگي فضاي يک برنامه ميزان حافظه يا پيچيدگي فضاي يک برنامه مقدارحافظه مورد نيازبراي اجراي کامل يک برنامه است. ميزان يا پيچيدگي زمان يک برنامه مقدار زمان کامپيوتر است که براي اجراي کامل برنامه الزم است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه19 : 4-1ميزان حافظه فضاي مورد نياز يک برنامه شامل موارد زير است : نيازمنديهاي فضاي ثابت اين مطلب به فضاي مورد نيازي ک``ه ب``ه تع``داد و ان``دازه ورودي و خروجي بستگي ندارد ،اشاره دارد. نيازمنديهاي فضاي متغير اين مورد شامل فضاي مورد نياز متغيرهاي ساخت يافت``ه اي اس``ت که اندازه آن بستگي به نمونه Iاز مساله اي که حل مي شود ،دارد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه20 : 4-1ميزان حافظه(ادامه) نيازمنديهاي فضاي متغير ) S(P) c  Sp (I نيازمنديهاي فضاي ثابت گروه کامپيوتر نيازمنديهاي فضاي کل ساختمان داده ها به زبانC صفحه21 : 4-1زمان ) T(Pبرنامه زمان ) T(Pبرنامه عبارتست ازمجموع زمان کامپايل و زمان اجراي برنامه. زمان کامپايل مشابه اجزاي فضاي ثابت است زيرابه خصيصه هاي نمونه بستگي ندارد. ) Tp (nرا به صورت زير تعريف مي شود: )Tp (n) ca ADD(n)  csSUB(n)  cl LDA(n)  cstSTA(n گروه کامپيوتر ساختمان داده ها به زبانC صفحه22 : 4-1مرحله برنامه يک مرحله برنامه ،قسمت با معني برنامه است ( از لحاظ معنايي يا نحوي) که زمان اجراي آن مستقل از خصيصه هاي نمونه باشد گروه کامپيوتر ساختمان داده ها به زبانC صفحه23 : 4-1عالمت گذاري مجانبي()O، Ω ،Θ ()Asymptotic انگيزه براي تعيين تعداد مراحل ،قابليت مقايسه پيچي``دگي دو برنام``ه که يک تابع را اجرا مي کنند و پيش بيني رشد و افزايش زمان اجرا با تغيير صفات نمونه مي باشد. ] ” f(n)=O(g(n)) [Big “ohاست ( خوانده مي شود (““ f of n is big oh of g of n اگر و فقط اگر به ازاي مقادير ثابتي از f(n)،n0،cبراي تمامي مقاديز nکمتر يا مساوي )g(n باشد ()n ≥ n0 گروه کامپيوتر ساختمان داده ها به زبانC صفحه24 : 4-1عالمت گذاري مجانبي()O، Ω ،Θ ()Asymptotic ) : O(1زمان محاسبه ثابتي را نشان مي دهد ) : O(nيک تابع خطي ناميده مي شود 2 Oتابع درجه دو ناميده مي شود ) : (n قضيه : اگرf (n) amnm  ... a1n ‏ n0 باشد ،بنابراين خواهد بود گروه کامپيوتر )f (n) O(nm ساختمان داده ها به زبانC صفحه25 : 4-1عالمت گذاري مجانبي()O، Ω ،Θ ()Asymptotic تعريف]:امگا [ f(n)=Ω(g(n)) :مي باشد(خوانده مي ش``ود ) f(nامگ``اي )g(n اگر و فقط اگر به ازاي مقادير ث``ابت مثبت cو ) n0 ، f(n)≥cg(nباش``د(ب``راي تمام مقادير nبه شرطي که n≥n0باشد) قضيه : اگر (n) amnm  ... a1n  a0 باشد f،و بنابراين )f (n) (nmخواهد بود گروه کامپيوتر ‏am  0 ساختمان داده ها به زبانC صفحه26 : 4-1عالمت گذاري مجانبي()O، Ω ،Θ ()Asymptotic تعريف تتا[f(n) = θ(g(n) : ]Thetaمي باشد () g(nاگJJر و فقJJط اگJJر بJJه ازاي مقJJادير ثJJابت c1و c2و n0 ، ) c1g(n)<= f(n) <= c2g(nوجJJود داشJJته باشJJد (بJJراي تمJJام (خوانده مي شود ) f(nتتJJاي مقادير )n>=n0 نشانه گذاري تتا از دو نشانه گذاري ذکر ش```ده “ “ big ohو امگا دقيق تر مي باشد f(n) = Θ(g(n)) .مي باشد اگر و فق```ط اگر ) g(nهم به عنوان کرانه باال و هم به عنوان کران```ه پايين در ) f(nباشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه27 : 4-1عالمت گذاري مجانبي()O، Ω ،Θ ()Asymptotic قضيه : اگر (n) amnm  ... a1n  a0 باشد f،و بنابراين )f (n) (nmخواهد بود گروه کامپيوتر ‏am  0 ساختمان داده ها به زبانC صفحه28 : ) مثال(پيچيدگي جمع ماتريس ها4-1 Asymptotic Statement complexity 0 Void add (int a []M AX- 0 SIZE…) 0 { Θ(rows) ;int I،j Θ(rows.cols) For(i=0;i<rows ; i++) Θ(rows.cols) )++For[j=0 ; j<cols ; j 0 29 :صفحه C;ساختمان داده ها به زبانC[i][j]=a[i][j]+b[i][j] گروه کامپيوتر 5-1روش هاي اندازه گيري زمان رويدادها در C دو روش متفاوت وجود دارد : روش و مدل اول از ساعت ( )clockبراي زمان بندي رويدادها اس``تفاده مي کن``د .اين ت``ابع ، زمان تلف شده از آغاز برنامه به وسيله پردازنده را مي دهد .براي زمان بندي ي``ک روي``داد دوبار از ساعت استفاده مي شود .يک مرتبه در ابتداي رويداد و يک مرتبه در انتهاي آن. روش يا مدل دوم از timeاستفاده مي کند .اين تابع ،زمان را بر حسب ثاني`ه ب`ه عن``وان ن`وع پيش ساخته time-tبرمي گرداند .بر خالف clock ، timeفقط يک پارامتر دارد که به وسيله آن موقعيتي را که زمان بايد نگهداري شود ،مشخص مي کند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه30 : 5-1توليد داده هاي آزمايشي براي ايجاد بدترين حالت اجرا ايجاد داده هاي آزمايشي که منجر به بدترين حالت اجرا مي شود ،هميشه ساده نيست. در بعضي از موارد الزم است که از يک برنامه کامپيوتري ب```راي ايجاد بدتريت حالت استفاده مي شود. براي هر مجموعه مقادير از صفات نمونه مورد نظر ،يک داده آزمايشي تصادفي با عددي به اندازه کافي بزرگ ايجاد مي کنيم زمان اج```راي هر کدام از اين داده هاي آزمايشي به دست مي آيد گروه کامپيوتر ساختمان داده ها به زبانC صفحه31 : فصل دوم :آرايه ها اهداف در این فصل دانشجو با کاربرد موارد زیر آشنا خواهد شد: ‏ ‏ ‏ ‏ ‏ آرايه ساختار ليست ماتريس اسپارس رشته گروه کامپيوتر ساختمان داده ها به زبانC صفحه32 : فصل دوم :آرايه ها و ساختارها آرايه آراي``ه مجموع``ه اي از زوج ها ،ش``امل ان``ديس و مق``دار اس``ت (< . )>index ، valueبه ازاي هر انديس يک مقدار مربوط ب``ه آن انديس وجود دارد که به زبان رياضي آنرا تناظر يا انگاشت ناميده مي شود. در رابطه با آرايه به دو عمل اساسي نياز است : گروه کامپيوتر • بازيابي • ذخيره سازي مقادير ساختمان داده ها به زبانC صفحه33 : 1-2آرايه ها تابع) : Creat(J،listيک آرايه جديد تهي با طول مناسب را تولي``د مي کند .تمتم مقادير در ابتدا تعريف نشده اند. تابع : Retrieveيک آرايه و يک انديس را به عنوان ورودي دريافت مي کند و يک مقدار مربوط به ان``ديس را اگر ان``ديس معتبر باش``د برميگرداند و گرنه يک خطا را بازمي گرداند. تابع : storeبراي وارد کردن زوج جديدي شامل < انديس ،مقدار> ب`````ه ک`````ار مي رود و آراي`````ه اولي`````ه افزايش يافت`````ه با زوج جديد<،مقدار،انديس> را بازمي گرداند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه34 : 1-2آرايه ها آرايه در زبان Cبه صورت مثال در زير آمده است : ]int list [5 نکته در زبان Cتمام آرايه ها از انديس 0شروع مي شوند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه35 : ساختارها ساختار آرايه ها مجموع داده هاي از يک ن``وع مي باش``ند .در Cروش ديگري براي دسته بندي گروهي از داده وج```ود دارد .اين روش اجازه مي دهد تا داده ها از ان``واع متف``اوتي باش``ند .اين امک``ان را structمي گويند که مختصر structureاست. يک ساختار مجموعه اي از اقالم داده ها مي باشد ک```ه هر قلم داده به وسيله نوع و نام آن مشخص گرديده است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه36 : ساختارها مثال: {Struct ;]char name[10 ;int age ;float salary }person متغيري به نام personايجاد مي کند کLLه داراي سLLه فيلLLد متفLLاوت است : نام شخص به صورت يک آرايه کاراکتري است . يک مقدار صحيح که نشان دهنده سن همان شخص است. يک مقدار floatکه حقوق شخص را معين مي کند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه37 : يونيون ها يونيون اعالن يونيون مشابه تعريف و اعالن يک ساختار است با اين تفLLاوت که فيلدهاي يک يونيون بايد در حافظه با هم مشترک باشLLند يعLLني فقط يک فيلد يونيون در هر زمان فعال مي گردد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه38 : ساختارهاي خود ارجاعي يک ساختار خودارجاعي ساختاري است که در آن يک جز يا بيشتر ،اشاره گري به خود آن مي باشد. ساختارهاي خود ارجاعي معموال به روالهاي مديريت حافظه پويا احتياج دارند ( )malloc freeتا به راحتي حافظه را گرفته و آزاد کنند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه39 : ليست ليست ساده ترين و متداول ترين نوع ساختمان داده ها ،ليست هاي مرتب شده يا خطي هستند. 0 ,itemمي `ورت (item 1,...,item ليس``ت ها ش``امل اقالم داده ب``ه ص`) n 1 باشند. مثال : روزهاي هفته ( شنبه ...جمعه ) گروه کامپيوتر ساختمان داده ها به زبانC صفحه40 : اعمال صورت گرفته بر روي ليست ها پيدا کردن طول يک ليست خواندن اقالم داده يک ليست از چپ به راست يا بر عکس بازيابي iامين عنصر از يک ليست ()i < n ≤0 تعويض يک قلم اطالعاتي در iامين موقعيت يک ليست ()i ≤ n ≤0 درج يک قلم داده جديد در iامين موقعيت يک ليست (.)i < n ≤0 ( اقالم داده اي که قبال به صورت i ، i+1 ،…،n-1شماره گذاري شده اند به ص``ورت i+1،i+2،…،nدر مي آيند) حذف ي``ک قلم اطالعاتي از iامين م``وقعيت ي``ک ليس``ت ( . )i < n ≤0اقالم داده i+1،…،n-1به اقالم داده با شماره I،i+1،…،n-2تبديل مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه41 : نگاشت ترتيبي نگاشت ترتيبي متداول ترين پياده سازي ،نمايش يک ليس``ت مرتب ش``ده ب``ه itemبا صورت يک آرايه مي باشد به نحوي که عنصر ليس```ت 1 انديکس iآرايه متناظر باش``د .اين مطلب ي``ک نگاش``ت ترتي``بي ناميده مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه42 : ADTماتريس اسپارس به طور کلي در رياضيات ،يک ماتريس شامل mسطر و nس``تون بوده و مي تواند مانند شکل زير نمايش داده شود. ‏col1 col2 col3 4 27- 3 82 2- 6 ‏row 0 ‏row 1 109 64- 11 ‏row 2 12 ‏row 3 48 27 47 ‏row 4 9 گروه کامپيوتر 8 ساختمان داده ها به زبانC صفحه43 : ADTماتريس اسپارس ماتريس اسپارس در علوم کامپيوتر متداول ترين نمايش براي ماتريس آراي``ه دوبع``دي است که به ص```ورت ] a[MAX_ROW][MAX_COLSنمايش داده مي شود .هر عنصر ماتريس ب``ه ص``ورت ] a[i][jنمايش داده مي شود .ماتريسي که عناصر صفر آن زياد بوده ماتريس اسپارس ناميده مي شود. حداقل اعمال ممکن شامل ايجاد ،جمع ،ضرب و ترانهاده ماتريس مي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه44 : ADTماتريس اسپارس مي توان هر آرايه را با استفاده از سه گانه ذخيره نم``ود اين ب``دان معنا مي باشد که مي توان يک آرايه از سه گانه ها را براي نمايش يک ماتريس اسپارس پيشنهاد کرد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه45 : ترانهاده يک ماتريس براي پيدا نمودن ترانهاده يک ماتريس بايد جاي سطرها و ستون ها را عوض کرد بدين مفهوم که هر عنصر ] a[i][jدر ماتريس اوليه ب``ه عنصر] b[j][iدر ماتريس ترانهاده تبديل مي شود. الگوريتم زير براي پيLLLدا کردن ترانهاده يLLLک ماتريس ،الگLLLوريتم مناسبي است : ‏for all element is column j ‏place element < i ، j ،value> in >element < j ، i ،value گروه کامپيوتر ساختمان داده ها به زبانC صفحه46 : ترانهاده يک ماتريس الگوريتم بيان شده نشان مي دهد که بايد تمام عناصر در س``تون 0 را پيدا و آنها را در سطر 0ذخيره کرد همچنين تمام عناصر س``تون 1را پيدا و در سطر 1قرار داد و همين فرآيند را ادامه داد .از آنجا که ماتريس اوليه سطري بوده لذا ستون هاي داخ```ل هر س```طر از ماتريس ترانهاده نيز به صورت صعودي مرتب مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه47 : تحليل ترانهاده تعيين زمان اجراي اين الگوريتم از آنجا که حلقه هاي تودرت``وي for عامل تعيين کننده مي باشد ،آسان است. حلقه forخ``ارجي a[0].colمرتب``ه تکرار مي ش``ود ک``ه a[0].col حاوي تعداد ستون هاي ماتريس اوليه است .عالوه بر اين ،ي``ک ي``ک تکرار حلقه داخلي forبه زماني برابر با a[0].valueنياز دارد ک```ه در اينجا a[0].value ،تعداد عناصر در ماتريس اوليه است .بنابراين زمان کلي براي حلقه هاي تودرتوي forبرابر با حاصل ضرب س``تون ها در عناصر( )columns.elementsمي باشد .بنابراين زمان اجرا ب``ه صورت )columns.elements(0خواهد بود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه48 : ضرب ماتريس با توجه به ماتريس هاي مشخص و معلوم Aو ، Bفرض کنيد کLLه AيLLک ماتريس m×nو BيLLک ماتريس m×pباشLLد آنگLLاه ماتريس حاصل ضرب Dداراي ابعاد m×pاست و عنصر <>i،j آن به صورت زير تعريف مي شود : ‏n 1 ‏dij  aikbkj ‏k0 براي j < p ≤ 0و i < m ≤ 0 نکته :حاص```ل ضرب دو ماتريس اسپارس ممکن اس```ت ي```ک ماتريس اسپارس نباشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه49 : روالmmult در روال mmultماتريس هاي Aو Bرا ضرب کرده و با توجه به توضيحات حاصل ضرب را در Dقرار مي دهيم. A ، B ، Dبه عنوان ماتريس هاي اسپارس به ترتيب در آرايه هاي A ، b ،dذخيره مي شوند. ان اين الگوريتم برابر با )O(rows_a . Cols_a . cols_bاست گروه کامپيوتر ساختمان داده ها به زبانC صفحه50 : نمايش آرايه هاي چند بعدي دو راه متداول براي نمايش آرايه هاي چند بعدي وجود دارد : روش سطري روش سطري روش ستوني در روش سطري آرايه هاي چند بعدي را به وسيله سطرهاي آن ذخيره مي کنيم. مثال ‏A[upper [] ‏upper ] نشان مي دهد که داراي بعدي دو آرايه 0 1 )(row0, row1,...,rowuppe0 1 ‏upper سطر0است ‏upper به نحوي که هر سطر شامل 1 عنصر مي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه51 : نمايش آرايه هاي چند بعدي مثال اگر αآدرس ] A[0][0باشد ،بنابراين آدرس A[i][0] ، α+ i. U pperخواهد بود. [upper آنAرا بLه ، 0 ][upper بعLدي براي نمايش يک آرايLه سLه 1 ][upper ]2 ‏upper ‏upper گيريم. نظر مي بعدي با ابعاد عنوان آرايه 0دو 1 upper در 2 گروه کامپيوتر ساختمان داده ها به زبانC صفحه52 : نوع داده مجرد رشته اي( )STRING ADT صورتS  s0 ,...,sn 1 تعريف مي گردد از ديدگاه ADTيک رشته به ‏si کاراکترهاي اخذ شLLده از مجموعLLه کاراکترهايزبان به نحوي که برنامه نويسي مي باشLLد .اگر n=0باشLLد S ،يLLک رشLLته تهي مي باشد. در زبان ، Cرشته ها به صورت آرايه هاي کاراکتري که به کاراکترتهي،\0 ،ختم مي شوند ،آرايه مي گردد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه53 : نوع داده مجرد رشته اي()STRING ADT عملکردهاي مناسب و مفيدي وجود دارد که مي توان براي رشته ها تعريف کرد مانند : ايجاد يک رشته تهي جديد خواندن يا نوشتن يک رشته ضميمه کردن دو رشته به يکديگر ()concatenation کپي کردن يک رشته مقايسه رشته ها درج کردن يک زير رشته به داخل رشته برداشتن يک زير رشته از يک رشته مشخص پيدا کردن يک الگو( )patternيا عبارت در يک رشته گروه کامپيوتر مختص ADTجديد ساختمان داده ها به زبانC صفحه54 : نوع داده مجرد رشته اي()STRING ADT نحوه ذخيره سازي در حافظه : ;{”char s[] = {"dog ]s[2 ‏d ‏o ]s[0] s[1 ]s[3 ‏g \0 نمايش رشته در زبان C گروه کامپيوتر ساختمان داده ها به زبانC صفحه55 : درج رشته: مثال : جاي دهيمs را در موقعيت رشتهt مي خواهيم رشته s t temp temp 0\ e l i b o m a 0\ o t u 0\ initiall y 0\ a temp (a) After strncpy(temp،s،i) temp (b) After strcat(temp،t) 56 :صفحه 0\ o t u a 0\ e l i b o m o t u a Cساختمان داده ها به زبان گروه کامپيوتر تطابق الگو()Pattern Matching فرض کنيد که دو رشته داريم string ،و ،patبه نحوي patيک الگو يا patternبوده و بايد در stringپيدا شود .ساده ترين راه ب````راي تعيين اينکه آيا patدر رشته وجود دارد يا خ``ير ،اس``تفاده از ت``ابع کتابخانه اي strstrمي باشد. با وجود اينکه strstrبراي تطابق عبارت مناسب به نظر مي رس```د ،دو دليل عمده براي نوشتن تابع تطابق الگو وجود دارد : تابع strstrبراي .ANSI Cجدي``د ب``وده و ممکن اس``ت ک``ه در کامپايلر موجود نباشد. چندين روش براي پياده سازي تابع تطابق الگو وجود دارد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه57 : تطابق الگو نکته غير موثرترين روش ،تست متوالي هر کاراکتر رشته ت``ا زمان پي``دا شدن الگو و يا رسيدن به انتهاي رشته ،مي باشد .اگر patدر string نباشد ،اين روش داراي زمان محاسباتي )n،m(0خواهد ب`ود ک`ه در آن nطول patو mطول stringمي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه58 : فصل سوم :صف وپشته اهداف آشنايي با پشته آشنايي با صف ارزشيابي عبارات گروه کامپيوتر ساختمان داده ها به زبانC صفحه59 : فصل سوم :پشته و صف پشته و صف ،حاالت خاصي از ن``وع داده عم``ومي يع``ني ليس``ت هاي مرتب شده ،مي باشند. پشته پشته يک ليست مرتب شده اي است ک``ه جايگ``ذاري و ح``ذف از يک سمت آن که ( topباال) ناميده مي شود ،صورت مي گيرد. عنصر پاييني و عنصر an 1 مانندa0 S ،a0,...,an بااليي مي ‏در پشته اي 1 باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه60 : پشته ‏محدوديت کار با پش```ته ما را ملزم مي کن```د ک```ه اگر عناصر A،B،C،D،Eرا به ترتيب به پشته اضافه کنيم E ،اولين عنصري خواهد بود که که از پشته حذف مي گردد. ‏از آنجا که آخرين عنصر وارده به پشته ،اولين عنصر حذف شده از آن مي باشد ،پشته را ب``ه عن``وان ي``ک ليس``ت ( LIFOآخرين ورودي ،آخرين خروجي ) مي شناسيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه61 : پشته ← ←top ‏D ‏C ‏B ‏A ‏E top ‏D ‏C ‏B ‏A ← ‏D top ← ‏C ‏C top ‏B ‏B ‏B top ‏A ‏A ‏A ← ← ‏top ‏A حذف و جايگذاري عناصر در يک پشته گروه کامپيوتر ساختمان داده ها به زبانC صفحه62 : ساختار نوع داده مجرد پشته structure srack is objects: a fine ordered list with zero or more elements. functions: forintegre all stack Stack ، item element ، max_stack_size positive    Stack CreateS(max_stack_size)::= creat an empty stack whose maximume size is max_stack_size Boolean IsF ull(stack،max_stack_size)::= if(number of elements in stack == max_stack_size) return TRU E else return F AL SE Stack Add(stack،item)::= if (IsF ull (stack)stack_full else insert item into top of stack and return Boolean IsEmpty (stack)::= if(stack ==Creat S( max_stack_size) return TRU E else return F AL SE Element Delete (stack)::= if (IsEmpty (stack)return stack else remove and return the item on the top of the 63 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر پياده سازي پشته راحت ترين روش پياده سازي اين ، ADTاستفاده از ي``ک آراي``ه يک بعدي به نام ] stack[M AX_STACK_SIZEاست که [ ]M AX_STACK_SIZEحداکثر تعداد عناصر آراي```ه مي باشد. اولين يا پايين ترين عنصر پشته در] stack[0ذخيره ،دومي در ] stack[1و iامين عنصر در ] stack[i-1ذخ```````يره مي گردد.همراه با آرايه ،يک متغير به نام topوجود دارد که به عنصر بااليي پشته اشاره مي کند .در ابتدا به topمقدار -1داده مي ش``ود که نشان دهنده يک پشته خالي اس```ت .با اين نمايش ،مي ت```وانيم عملکردهاي ساختار را به صورت زير پياده سازي کنيم : گروه کامپيوتر ساختمان داده ها به زبانC صفحه64 : پياده سازي پشته Stack CreatS(max_stack_size)::= #define M AX_STACK_SIZE 100 /* maximume stack size*/ typedef struct { int key; /* other fields*/ }element; Element stack [M AX_STACK_SIZE]; int top = -1; Boolean IsEmpty(Stack)::=top<0; Boolean IsFull(Stack)::= top >= M AX_STACK_SI ZE-1; 65 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر جايگذاري به يک پشته Void add (int *top ، element item) { /* add an item to the global stack */ if (* top > = M AX_STACK_SI ZE-1) { stack_full(); return; } stack [++*top] = item; } 66 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر حذف از يک پشته element delete (int * top ) { /* return the top element from the stack */ if (* top == -1) return stack _empty (); /* returns an error key */ return stack [( * top)--]; } 67 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر صف صف صف يک ليست مرتب شده است که تمامي جايگذاري آن از يک سمت و تمام حذف هاي ان از سمت ديگر انجام مي شود. عنصرa0 درصف Q a0،, a1,...,an 1 ابتدا ( )frontو ‏an 1 درaکنار قرار ai عنصر انتها ( )rearمي باشد و i 1 دارد ()i < n-1 ≤0 گروه کامپيوتر ساختمان داده ها به زبانC صفحه68 : صف محدوديت صف اين است که ما A،B،C،Dرا ب```ه ترتيب اض```افه مي کنيم در حالي که Aاولين عنصري است که حذف مي شود. ← rear ← rear ‏D ‏D ‏C ← C ← B ‏B ‏A ‏front ‏front ← rear ‏C ← rear ← ← B ‏front ‏front ‏A ← rear B ← ‏A front A درج و حذف عناصر از يک صف گروه کامپيوتر ساختمان داده ها به زبانC صفحه69 : صف از آنجا که اولين وارد شده به يک صف ،اولين عنصري است که خارج مي شود ،صف را به عنوان ليست هاي ( FIFOاولين ورودي ،اولين خروجي ) در نظر مي گيرند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه70 : جايگذاري در صف Void addq ( int * rear ، element item ) { /* add an item to the queue */ if (* rear ==M AX_QUEUE _SIZE -1) { queue_full(); retyrn; } queue[++* rear] = item; } 71 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر حذف عنصري از يک صف element deleteq (int *front ، int rear ) { /* remove element at the front of the queue */ if (* front == rear ) return queue_empty (); /* return an error key */ return queue [==* front]; } 72 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر مساله مسير پر پيچ و خم ()MAZING بهترين راه نمايش مسير فوق يک آرايه دو بعدي است ک``ه صفرهاي آن نشان دهنده پيچ و خم هاي مسير مي باشد. يک مسير پر پيچ و خم ( )mazeبا ابعاد m×pبه يک آرايه ( )p+2(×)m+2نياز دارد .ورودي در م````````وقعيت [ ]1[]1و خروجي در موقعيت [ ]p[]mمي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه73 : تحليل مسير اندازه مسير پرپيچ و خم ( )mazeزمان اج``راي مس``ير را تع``يين مي کند .از آنجا که هر موقعيت درون مسير بيش از يک بار مش```اهده نمي شود ،بدترين حالت پيچيدگي الگوريتم به ص``ورت )mp(0مي باشد به نحوي که mو pتعداد سطرها و ستون هاي مسير است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه74 : ارزشيابي عبارات در هر زبان برنامه سازي براي ارزيابي صحيح عبارات ،به هر عملگر اولويتي نسبت مي دهيم .حال در هر جفت پران```تز ،اول عملگرهايي که داراي اولويت باالتر هستند ،ارزشيابي مي شوند . گروه کامپيوتر ساختمان داده ها به زبانC صفحه75 : اولويت عملگرها ‏Token )( ][ ->. -- ++ -- ++ ! ~ -+ *& ‏Sizeof ش``کل مقاب``ل نش``ان دهن``ده اول``ويت عملگرها در زبان cمي باشد. )(type */% +>> << =>> =<< =! = = & ^ ‏l && ‏ll ?: == += -= *= % =<<= >>= &= ^= l ، گروه کامپيوتر ساختمان داده ها به زبانC صفحه76 : روش infix روش استاندارد نوشتن عبارات به عنوان infixمعرفي و شناخته مي شود چرا که در اين روش عملگرهاي دودويي را در بين دو عملوند قرار مي دهيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه77 : نشانه گذاري postfix دراين روش هر عملگر بعد از عملوند هاي مربوطه ظاهر مي شود مثال ‏Infix ‏Postfix 4*2+3 ‏a*b+5 (7*)1+2 ‏a*b/c (()c*)e-a(*)a/(b-c+d ‏a/b-c+d*e-a*c +*4 3 2 +ab*5 *2+7 1 /ab*c *abc-d+/ea-*c -*ab/c-de*+ac گروه کامپيوتر ساختمان داده ها به زبانC صفحه78 : خصوصيات postfix عبارات براي ارزيابي از چپ به راست پويش مي شوند .عملون``دها تا مشاهده يک عملگر ،داخل پشته قرار مي گيرند ،سپس تع```داد الزم از عملوندها را از پشته خارج و پس از انجام عملکرد مربوطه ، نتيجه را دوباره به داخل پشته منتقل مي کنيم .اين ک``ار را ادام``ه پيدا مي کند تا به انتهاي عبارت برسيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه79 : الگوريتم تبديل infixبه postfix مي توان الگوريتمي براي تبديل ي``ک عبارت infixب``ه postfixب``ه صورت زير بيان نمود : -1پرانتزگذاري کامل عبارات -2انتقال همه عملگرهاي دودويي ب``ه نح``وي ک``ه با پران``تز بس``ته مربوطه سمت راست آن تعويض شوند -3حذف تمام پرانتزها گروه کامپيوتر ساختمان داده ها به زبانC صفحه80 : مثال تبديل عبارت a+b*cبه نشانه گذاري postfix ‏Token ‏Stack []0 []1 [ ]2 ‏a + ‏b * ‏c ‏Top ‏Output + + * + * + ‏eos گروه کامپيوتر 1- ‏a 0 ‏a 0 ‏ab 1 ‏ab 1 ‏abc 1- +*abc ساختمان داده ها به زبانC صفحه81 : مثال تبديل a*(b+c)*dبه نشانه گذاري postfix ‏Token ‏Stack []1 []0 ‏Top []2 ‏a * ( ‏b + * ( * ( * ( * + ‏c ) * ‏d ‏Output * ( + گروه کامپيوتر * 1- ‏a 0 ‏a 1 ‏a 1 ‏ab 2 ‏ab 2 ‏abc 0 +abc 0 *+abc ساختمان داده ها به زبانC 0 صفحه82 : ‏abc+*d تحليل postfix فرض کنيد nتعداد نشانه ها در عبارت باشد ،ب``راي خ``ارج ساختن نشانه ها و انتقال آنها به خروجي نياز ب``ه ) Θ(nمي باش``د .بن``ابراين پيچيدگي تابع postfixبه صورت ) Θ(nخواهد بود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه83 : فصل چهارم :ليست ها اهداف ‏ ‏ ‏ ‏ آشنايي با اشاره گر ها ليست ها و ليست حلقوي روابط هم ارزي ليست پيوندي دوگانه گروه کامپيوتر ساختمان داده ها به زبانC صفحه84 : فصل چهارم :ليستها ويژگي هاي نمايش ساختمان داده ها با استفاده از آرايه و نگاشت ترتيبي: خاصيت اين نحوه نمايش آن بود که عناصر پشت سرهم داده مقصود با فواص``ل ثابت و معيني ذخيره مي شدند .بنابراين : LOCباش``د )i+1( ،امين م``وقعيت اگر iامين عنصر ص``ف در ‏i عنصر ،در نمايش حلق``````````````وي در م``````````````وقعيتc)+ ‏LOC خواهد گرفت . قرار %MAX_QUEUE_SIZE ( i باشد ،پايين ترين عنصر در اگر باالترين عنصر پشته در مکان ‏LOCTOP مکان خواهد بود. ‏LOCTOP  C گروه کامپيوتر ساختمان داده ها به زبانC صفحه85 : مشکالت نمايش ترتيبي -1حذف و درج عناصر در آرايه ها بسيار وقت گير است وقتي داراي چندين ليست مرتب ش```ده با ط```ول هاي 2- متفاوت هستيم .باذخيره کردن هر ليست در آرايه اي با حداکثر اندازه ،حافظه هدر مي رود -3با نگه``داري ليس``تها در ي``ک آراي``ه ،انتق``ال حجم زيادي از داده ها الزم است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه86 : نمايش پيوندي راه حل مناسب براي حل مشکل شيفت داده ها در نگاش``ت ترتي``بي ، استفاده از نمايش پيوندي مي باشد. بر خالف نمايش ترتيبي که عناصر در فواص``ل ث``ابتي از هم قرار مي گرفتند ،در ليست پيوندي عناصر مي توانند در هر جاي حافظ```ه قرار گيرند. براي دستيابي صحيح به عناصر يک ليس``ت ،بايس``تي ب``ه همراه هر عنصر ،آدرس يا موقعيت عنصر بعدي نيز ذخيره شود .بن``ابراين ب``راي هر عنصر ،اشاره گري به عنصر بعدي در ليست وجود دارد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه87 : اشاره گرها مهمترين عملگرهاي استفاده شده با نوع اشاره گر عبارتند از : & عملگر آدرس * عملگر غيررجوعي()indirection or dereferencing مثال ; int i ، * pi آنگاه iيک متغير صحيح و piيک اشاره گر به يک متغ``ير ص``حيح است. ; pi = &i & iآدرس iرا برگشت و به ان مقدار piرا نسبت مي دهد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه88 : خطر استفاده از اشاره گرها در هنگام برنامه نويسي به زبان Cبه``تر اس``ت ک``ه تمام اش``اره گرهايي را که عمال به جايي اشاره نمي کنند را برابر NULLقرار دهيم .اين عمل از تالش براي دستيابي ب``ه قس``متي از حافظ``ه ک``ه خارج از دامنه برنامه شما بوده و يا شامل اشاره گري به ي``ک داده مقصود قابل دسترسي نيست ،جلوگيري مي کند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه89 : استفاده از حافظه پويا( استفاده از)heap در يک برنامه ممکن است خواس``ته باش``يم فض``اي الزم ب``راي ذخ``يره کردن اطالعات را در نظر بگيريم .هنگ``ام برنام``ه نويس``ي ممکن اس``ت ندانيم چه ميزان فضا الزم داشته يا نخواسته باشيم فضاي بسيار زيادي ک``ه احتمال دارد اس``تفاده نش``ود را تخص``يص دهيم ،ب``راي ح``ل اين مش``کل ،زبان Cدر زمان اج``را از مک``انيزمي ب``ه ن``ام heapب``راي تخصيص حافظه استفاده مي کند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه90 : استفاده از حافظه پويا( استفاده از)heap هر زمان که نياز به حافظه جديدي باشد ،مي توان تابعي به ن``ام malloc را فراخواني و مقدار فضاي الزم را درخواست کرد .اگر حافظه الزم وجود داشته باشد ،اشاره گري به ابتداي ناحيه حافظه مورد نياز برگردانده مي شود. زماني که ديگر نيازي به آن حافظه نباشد ،مي توان آن را با فراخ```واني تابعي به نام ، freeآزاد نمود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه91 : ليست هاي تک پيوندي ليست هاي پيوندي معموال به وسيله گره هايي متوالي با اتصاالتي که به صورت فلش هايي نشان داده شده اند اراي``ه مي گردن``د .از ن``ام اشاره گر به اولين عنصر ليست به عنوان نام کل ليست اس``تفاده مي شود .بنابراين ليست شکل زير ptrناميده مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه92 : ليست هاي پيوندي روش معمول براي نمايش يک ليست پيوندي ‏NULL ‏vat . ‏sat . ‏cat ‏ptr . ‏bat نکات ( )1گره ها واقعا در مکانهاي پشت سر هم حافظه قرار نمي گيرند ( )2موقعيت گره ها در اجراهاي مختلف مي تواند تغيير کند گروه کامپيوتر ساختمان داده ها به زبانC صفحه93 : مثال مراحل درج کلمه matبين catو satبه صورت زير است : - 1گره اي را که اخيرا استفاده نشده در نظر گرفته ،فزض کنيد ک``ه آدرس آن paddrباشد. -2فيلد داده اين گره را برابر با matقرار دهيد -3فيلد اتصال paddrرا طوري تنظيم کنيد که به ادرسي که در فيلد اتصال گره حاوي catمي باشد ،اشاره کند -4فيلد اتصال گره حاوي catرا طوري تنظيم کنيد که به paddrاشاره کند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه94 : مثال(درج گره matبعد از )cat نحوه تغيير ليست بعد از اضافه کردن matدر شکل زي``ر نش``ان داده شده است : ‏ptr ‏NULL ‏vat ‏sat ‏cat ‏bat . . . ‏mat . گروه کامپيوتر ساختمان داده ها به زبانC صفحه95 : حذف matاز ليست براي انجام اين کار فقط الزم است که عنصر قب``ل از matيع``ني catرا پيدا و فيلد اتصال آنرا طوري تنظيم کنيم که به گره اي اش``اره کن``د ک``ه در حال حاضر اتصال گره matبه ان اشاره دارد( شکل زير ) ‏ptr ‏NULL ‏vat . ‏sat گروه کامپيوتر . ‏mat . ‏cat ساختمان داده ها به زبانC . صفحه96 : ‏bat امکانات الزم براي ايجاد ليست پيوندي مکانيزمي براي تعريف ساختار گره ها يعني فيل``دهايي ک``ه در گره وجود دارد روشي براي ايجاد گره هايي که مورد نياز مي باشد روشي براي آزاد کردن گره هايي که ديگر مورد نياز نمي باشد گروه کامپيوتر ساختمان داده ها به زبانC صفحه97 : چاپ يک ليست Void print_ list (list_pointer ptr) { print f (" The list contains: " ); for ( ; ptr ; ptr = ptr -> link) print f (" %4d " ، ptr ->data); print f (" \ n " ); } 98 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر صف و پشته پيوندي پشته پيوندي ‏top … ‏NULL ‏elemen link ‏t . . صف پيوندي ‏front ‏rear ‏NULL … گروه کامپيوتر . ‏elemen link ‏t ساختمان داده ها به زبانC . صفحه99 : تابع addو delete توابع addو deleteعناصري را به پش``ته اض``افه و از آن ح``ذف مي کنند .کد کردن هر يک از اين توابع ،ک``ار ساده اي مي باش``د .در هر دو تابع آدرس topرا به گونه اي تغيير مي دهيم ک``ه ب``ه عنصر بااليي پشته اشاره کند. تابعadd تابع addيک گره جديد به نام tempايجاد نموده item ، را در فيلد داده و topرا در فيلد اتصال قرار مي دهد سپس متغير topبراي اشاره کردن به tempتغيير مي کند گروه کامپيوتر ساختمان داده ها به زبانC صفحه100 : تابع delete تابع ‏delete تابع ، deleteعنصر را برگشت و topرا عوض مي کند ت``ا ب``ه آدرس``ي که در فيلد اتصال آن قرار دارد ،اشاره کند سپس گره ح``ذف ش``ده به حافظه سيستم برگشت داده مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه101 : تابع اضافه کردن به يک پشته پيوندي Void add (stack_pointer * top ، element item) { /* add an element to the top of the stack */ stack _pointer temp = (stack_pointer ) malloc (sizeof (stack)); if (IS_FULL(temp )) { fprint f (stderr ، " The memory is full \ n"); exit(1); } temp - > item = item ; 102 :صفحه Cزبان ساختمان داده گروه temp - به >هاlink = * topکامپيوتر ; حذف از يک پشته پيوندي element delete (stack_pointer * top ){ /* delete an element from the stack */ stack_pointer temp = * top ; element item ; if (I S_EM PTY (temp)) { fprintf ( stderr ، " The stack is empty \ n"); exit(1); } item = temp - >item ; * top = temp - > link ; F ree (temp) ; return item ; } 103 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر اضافه کردن گره اي به انتهاي يک صف پيوندي Void addq (queue_pointer * front ، queue_pointer *rear ، element item) { /* add an element to the rear of the queue */ queue _pointer temp = (queue_pointer ) malloc (sizeof (queue )); if (IS_full (temp)) { fprint f (stderr ، " The memory is full \ n"); exit(1); } temp - > item = item ; temp - > link = NULL ; if (* front ) (* rear ) - > link = temp ; else * front = temp ; * rear = temp ; } 104 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر حذف از ابتداي يک صف پيوندي element deleteq (queue_pointer * front ) { /* delete an element from the queue */ queue_pointer temp = * front ; element item ; if (IS_EM PTY (* front )) { fprintf ( stderr ، " The queue is empty \ n"); exit(1); } item = temp - >item ; * front = temp - > link ; free (temp) ; 105 :صفحه Cزبانitem ساختمان داده ها به گروه کامپيوتر return ; نمايش چند جمله اي ها به صورت ليست هاي تک پيوندي در اينجا مي توان هر جمله را به صورت يک گره نمايش داد .در اين ارتباط هر گره داراي سه فيلد ب``راي نمايش ضريب ،ت``وان و اش``اره گري به گره بعدي مي باشد. مثال 14 8 ‏a 3x  2x  1 ‏a ‏NULL 0 1 . گروه کامپيوتر 8 2 . ساختمان داده ها به زبانC 14 3 صفحه106 : جمع چند جمله اي براي جمع دو چند جمله اي ،ابت``دا فرض مي ک``نيم ک``ه aو bاش``اره گري به ابتداي چند جمله اي ها مي باشند. اگر توان دو چند جمله اي با هم برابر باشد ،ضرايب با هم جمع مي شوند و گره جديدي تشکيل مي شود ،همچنين اشاره گرها را به گره هاي بعدي در aو bحرکت مي دهيم. اگر توان چند جمله اي aکمتر از توان متناظر در چن``د جمل``ه اي b باشد ،آنگاه يک جمله شبيه به اين جمله ايجاد و آنرا به نتيجه ،يع``ني ، dاضافه مي کنيم و اشاره گر را به جمله بعدي در bمنتقل مي ک``نيم. همين عمل را اگر a-> expon >b- > exponباشد بر روي aانجام مي دهيم . گروه کامپيوتر ساختمان داده ها به زبانC صفحه107 : تحليل جمع چند جمله اي ها براي محاسبه زمان الزم اجراي جمع چن``د جمل``ه اي ،اولين نکت``ه تعيين عملياتي است که بر زمان اجرايي اثر مي گذارد. جمع ضرايب براي اين الگوريتم بايد سه معيار در نظر گرفته شود : مقايسه توان ها ايجاد گره جديد براي d الگوريتم جمع چند جمله اي با فاکتور ثابت بهينه است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه108 : رابطه هم ارزي رابطه ≡ روي هر مجموعه ، Sرابط``ه هم ارزي گفت``ه مي ش``ود اگر داراي خواص انعکاسي ،تقارن و تعدي روي Sباشد. مثال " تساوي" (=) ،يک رابطه هم ارزي است زيرا : ) x = x (1است . ) x = y (2تصريح مي کند که y = xمي باشد ) x = u (3و y = zنتيجه مي دهد که x = zاست . گروه کامپيوتر ساختمان داده ها به زبانC صفحه109 : الگوريتم تعيين کالس هاي هم ارزي الگوريتم تعيين کالس هاي هم ارزي ،دو مرحله است : در مرحله اول ،زوج هاي هم ارزي < ، >i ،jرا خوانده و ذخيره مي کند. در مرحله دوم از 0شروع کرده و تمام زوج هاي که به شکل < > J ، 0 مي باشد ( به نحوي که 0و jدر يک کالس هم ارزي مي باشند ) را پيدا مي کند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه110 : الگوريتم هم ارزي بر اساس خاصيت تعدي همه مقادير به شکل < > j ، kبا kدر يک کالس قرار مي گيرند. فضاي الزم براي اين الگوريتم ) m + n(0است گروه کامپيوتر ساختمان داده ها به زبانC صفحه111 : نمايش ماتريس هاي اسپارس به وسيله ليست پيوندي در نمايش داده ها ،هر سطر و ستون ماتريس اسپارس با ي```ک ليس```ت پيوندي حلقوي با گره headارايه مي شود. هر گره داراي يک فيلد برچسب ( )tagخواهد ب``ود ک``ه وج``ه تمايز بين گره هاي headو گره هايي که عناصر مخالف صفر را ذخيره مي کنند ، مي باشد. هر گره headداراي سه فيلد ديگر نيز مي باشد : ‏down ، right، next هر گره وارده داراي پنج فيلد ديگرمي باشد : ‏value ، right ، down ، col، row گروه کامپيوتر ساختمان داده ها به زبانC صفحه112 : نمايش ماتريس هاي اسپارس به وسيله ليست پيوندي از فيلد downبراي اشاره به عنصر مخ``الف ص``فر بع``دي در همان ستون از فيلد rightبراي اشاره به عنصر مخالف صفر بعدي در همان س``طر استفاده مي شود. هر گره headدر سه ليست قرار مي گيرد : ليست سطرها ليست ستون ها ليست گره هاي head گروه کامپيوتر ساختمان داده ها به زبانC صفحه113 : نمايش ماتريس هاي اسپارس به وسيله ليست پيوندي اگر بخواهيم ي``````ک ماتريس اسپارس num_rows.num_colsبا num_termsعنصر مخالف صفر را نمايش دهيم ،تع`````داد گره ها max { num_rows ،num_cols } + num_terms+1خواهد بود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه114 : ليست هاي پيوندي دوگانه ليست هاي تک پيوندي تنها بعضي از مشکالت را حل مي کند چ``را ک``ه فقط به راحتي مي توانيم در جهت پيوندها حرکت کنيم. مثال فرض کنيد که به يک گره مشخص مانند ، ptrاشاره کنيم و بخواهيم گره قبل از ptrرا پيدا کنيم ،تنها راه يافتن گره ماقبل ptrپيمايش از ابتداي ليست مي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه115 : ليست هاي پيوندي دوگانه يک گره در يک ليست پيون``دي دوگان``ه ح``داقل داراي س``ه فيل``د مي باشد : فيلد data فيلد ( llinkاشاره گر به چپ ) فيلد ( rlinkاشاره گر به راست ) گروه کامپيوتر ساختمان داده ها به زبانC صفحه116 : ليست هاي پيوندي دوگانه يک ليست پيوندي دوگانه به دو صورت است : ‏r link ‏item ‏l link • حلقوي • غير حلقوي ‏Head Node ليست پيوندي دوگانه حلقوي با گره head درج و حذف از يک ليست پيوندي دوگانه بسيار ساده مي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه117 : درج دريک ليست پيوندي دوگانه حلقوي Void dinsert ( node_pointer node node_pointer newnode ) { /* insert newnode to the right of node */ newnode-> llink = node ; newnode-> llink = node-> r link ; node -> r link -> l link = newnode; node -> r link = newnode ; } 118 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر ، حذف از يک ليست پيوندي دوگانه حلقوي Void delete ( node_pointer node ، node_pointer deleted ) { /* delete from the doubly linked list */ if (node = = deleted ) print f (" Deletion of head node not permitted .\ n " ) else { deleted -> l link - > r link = deleted > r link ; deleted -> r link - > l link = deleted > l link ; free ( deleted) ; 119 } :صفحه Cساختمان داده ها به زبان گروه کامپيوتر فصل پنجم :درخت اهداف ‏ ‏ ‏ ‏ ‏ آشنايي با درخت درخت هاي دودويي پيمايش درختان هرم جنگل گروه کامپيوتر ساختمان داده ها به زبانC صفحه120 : فصل پنجم :درختان درخت ساختار درختي يع``ني مجموع``ه داده هاي سازماندهي ش``ده اي ک``ه عناصر اطالعاتي شان به وسيله انشعاباتي با هم رابطه داشته باشند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه121 : مفهوم درخت درخت مجموعه محدودي از يک يا چند گره به صورت زير مي باشد : داراي گره خاصي به نام ريشه باشد. بقيه گره ها به n ≥ 0مجموعه مجزا T1,....Tn تقسيم شده که هر ي``ک ‏T1`,.... `ان ريش``ه از اين مجموعه ها خود يک درخت هستند .زي``رTnدرخت ناميده مي شوند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه122 : مثالي از يک درخت ريشه درخت درجه A = 3 ‏A شکل5-1 ‏C ‏D ‏B همزاد ‏J ‏I ‏H ‏M ‏G ‏E ‏F ‏K ‏L Aوالد B ، C، Dاست B ، C، D .همزادند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه123 : اصطالحات درخت ها گره :گره به عنصر حاوي اطالعات و انشعابات به ديگر عناصر ،اطالق مي شود. درجه گره :تعداد زير درخت هاي يک گره را درجه آن گره مي نامند. والد :گره اي که داراي زير درختاني است را والد ريشه هاي زير درختان گويند . فرزندان گره :ريشه هاي زير درختان ،فرزندان آن گره ناميده مي شوند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه124 : اصطالحات درخت ها گره هاي همزاد :فرزندان يک گره ،گره هاي همزاد يا هم نيا ناميده مي شوند. اجداد گره :اجداد يک گره ،گره هايي هستند که در مسير طي شده از ريشه تا آن گره وجود دارند. سطح گره :سطح يک گره بدين صورت تعريف مي شود که ريشه در سطح يک قرار مي گيرد .براي تمامي گره هاي بعدي ،سطح گره برابر است با سطح والد به اضافه يک . ارتفاع درخت :ارتفاع يا عمق يک درخت به بيشترين سطح گره هاي آن درخت گفته مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه125 : نمايش ليست يک راه نمايش درخت ،استفاده از ليست است . شکل 5-1را مي توان به صورت زير نشان داد : ))) (A(B(E(K ،L)،F)،C(G)،D(H (M )،I،J گروه کامپيوتر ساختمان داده ها به زبانC صفحه126 : نمايش ليست ممکن براي درختان شکل زير يک ساختار ممکن براي نمايش ليست را نشان مي دهد : ‏data ‏link 1 گروه کامپيوتر ‏link 2 … ساختمان داده ها به زبانC ‏Link n صفحه127 : نمايش دودويي يک درخت براي نمايش درختان دودويي ،دقيقا نياز به دو اتصال يا اشاره گر ب``ه ازاي هر گره است. ‏Data ‏left child ‏right sibling گروه کامپيوتر ساختمان داده ها به زبانC صفحه128 : 2-5درخت هاي دودويي تعريف : يک درخت دودويي يا تهي است يا حاوي مجموعه اي محدود از گره ها شامل ي``ک ريش``ه و دو زي``ر درخت دودويي اس``ت .اين درخت ها زي``ر درخت هاي چپ و راست ناميده مي شوند. مشخصه اصلي يک درخت دودويي بدين شکل است که هر گره آن حداکثر دو انشعاب دارد يع``ني گره هايي ک``ه درج``ه اي بيش``تر از دو نداشته باشند. براي درخت هاي دودويي زير درخت سمت چپ و راست با يکديگر متمايز است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه129 : ساختار درخت دودويي2-5 structure Binary_tree (abbreviated BinTree ) is objects : a finite set of nodes either empty or consisting of a root node ، left  Binary_tree ، and right Binary_tree. functions : for all bt ، bt1 ، bt2 BinTree ، item element BinTree Create() Boolean IsEmpty (bt) BinTree M akeBT(bt1 ، item ، bt 2) BinTree child(bt) 130 :صفحه Cها به زبانLداده ساختمان گروه کامپيوتر 2-5تفاوت درخت عادي با درخت دودويي در هيچ درخت عادي صفر گره وجود ندارد ،اما درخت دودويي تهي وجود دارد. در يک درخت دودويي ترتيب فرزندان داراي اهميت بوده در حالي که در درخت عادي به اين صورت نيست. گروه کامپيوتر ساختمان داده ها به زبانC صفحه131 : 2-5خواص درختان دودويي حداکثر تعداد گره ها حداکثر تعداد گره ها در سطح iام يک درخت دودويي است . i ≥ 1 ، حداکثر تعداد گره ها در يک درخت دودويي به عمق ، kاست k ≥ 1 ، گروه کامپيوتر ساختمان داده ها به زبانC صفحه132 : 2-5خواص درختان دودويي رابطه بين تعداد گره هاي برگ و گره هاي درجه 2 براي هر درخت دودويي غير تهي مانند ، Tاگرn0تعداد گره هاي پاياني تعدادnگره هاي درجه 2باشد ،آنگاه خواهيم داشت : و 2 ‏n0 n2  1 گروه کامپيوتر ساختمان داده ها به زبانC صفحه133 : 2-5خواص درختان دودويي يک درخت دودويي پر به عمق ، kيک درخت دودويي است که داراي گره باشد . k ≥ 0 يک درخت دودويي با nگره و عمق kکامل است ،اگر و تنها اگر گره هايش مطابق با گره هاي شماره گذاري شده در يک درخت دودويي پر به عمق kباشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه134 : 2-5نمايش درخت دودويي نمايش آرايه نمايش درخت دودويي به دو صورت است : نمايش ليست گروه کامپيوتر ساختمان داده ها به زبانC صفحه135 : 2-5نمايش آرايه شيوه شماره گذاري ارايه ش``ده در ش``کل زي``ر ،اولين نمايش ي``ک درخت دودويي در حافظه را مطرح و پيش``نهاد مي کن``د .از آنجايي که گره ها از 1تا nشماره گذاري شده اند ،يک آرايه ي``ک بع``دي مي تواند براي ذخيره سازي گره ها استفاده شود . گروه کامپيوتر ساختمان داده ها به زبانC صفحه136 : 2-5نمايش آرايه ‏A ][1 ][2 ‏B ][3 - ][4 ‏C ][5 - ‏B ‏C ][6 ‏G ][7 - ][8 - ][9 ‏D ‏A ‏F ‏D ‏E نمايش آرايه اي درخت دودويي ‏I . ‏H . - . . ][16 . . ‏E گروه کامپيوتر ساختمان داده ها به زبانC صفحه137 : 2-5نمايش آرايه اگر يک درخت دودويي کامل با nگره ( يعني ‏[log ‏n]  1 عمق )2به ترتيب باال تعريف شده باشد ،آنگاه براي هر گره با انديس iو ≤ ، ≤n i 1داريم : ( )1اگر ، i≠1آنگاه پدر iدر [ ]i/2است .اگر i=1 ، iريش``ه اس``ت و پدري نخواهد داشت. ( )2اگر ، 2i≤nآنگاه فرزند چپ iدر 2iاست .اگر ، 2i>nآنگ```اه i فرزند چپ ندارد. ( )3اگر ، 2i+1≤nآنگ```اه فرزن```د راس```ت iدر 2i+1اس```ت .اگر ، 2i+1>nآنگاه iفرزند راست ندارد گروه کامپيوتر ساختمان داده ها به زبانC صفحه138 : 2-5نمايش آرايه 2k  1 در بدترين حالت ،يک درخت مورب به عمق ، kبه محل و موقعيت نياز دارد که از اين مقدار ،فقط kمحل اشغال مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه139 : 5 -2نمايش ليست پيوندي ماداميکه نمايش ترتيبي (آرايه اي) براي درختان دودويي کامل مناسب ب```ه نظر مي رسد ،ما براي بسياري از درخت```ان ديگر باعث اتالف حافظ```ه مي شود به عالوه ،اين روش از نارسايي هاي موج``ود در نمايش ترتي``بي ن``يز برخوردار است .درج يا حذف گره هاي يک درخت ،مستلزم جاب```ه جايي گره هاست که خود باعث تغيير شماره سطح گره ها مي شود .اين مسايل مي تواند با به کارگيري نمايش پيوندي به آساني حل شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه140 : نمايش ليست پيوندي2-5 : با اين روش هر گره سه فيلد خواهد داشت left_child ، data ، right_child : به شرح زير تعريف مي شوندC که در زبان typedef struct node *tree_pointer ; typedef struct node { int data ; tree_pointer left_child ، right_child ; }; 141 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر 2-5نمايش ليست پيوندي ‏da ‏ta ‏left_child ‏right_child ‏data ‏right_child ‏left_child نمايش يک گره درخت دودويي گروه کامپيوتر ساختمان داده ها به زبانC صفحه142 : 3-5پيمايش درخت دودويي به هنگام پيمايش يک درخت دودويي ،با هر گره و زيردرختانش ب``ه طرز مشابهي رفتار کنيم .اگر R ، V ، Lبه ترتيب حرکت به چپ ، مالقات کردن يک گره ( ب``راي مث``ال ،چاپ فيل``د داده آن گره) و حرکت به راست باشد ،آنگاه شش ترکيب ممکن براي پيمايش ي``ک درخت خواهيم داشت : ‏RLV ، RVL ، VRL ، VLR ، LRV ، LVR گروه کامپيوتر ساختمان داده ها به زبانC صفحه143 : 3-5پيمايش درخت دودويي مثال اگر تنها حالتي را انتخاب کنيم که ابت`دا ب`ه س`مت چپ و بع`د ب`ه سمت راست ب```رود ،تنها س```ه ترکيب VLR ، LRV ، LVR خواهيم داشت .اين سه حالت را با توجه به موقعيت Vنسبت به L و Rب```ه ترتيب preordcr ، postorder ، inorder مي ناميم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه144 : 3-5پيمايش درخت دودويي در پيمايش ، postorderيک گره موقعي مالق```ات و چاپ مي شود که زيردرختان چپ و راست آن قبال مالقات شده باشند. در پيمايش ، preorderيک گره قب``ل از پيمايش زيردرخت``ان چپ و راست ،مالقات مي گردد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه145 : 3-5پيمايش درخت دودويي درخت زي`````ر حاوي ي`````ک عبارت رياض`````ي اس`````ت : 1 + ‏A/B*C*D*+E ‏E 19 17 18 16 * 2 ‏D 14 3 * 15 11 C 13 / 12 ‏B 10 4 5 A 8 9 7 6 درخت دودويي براي يک عبارت محاسباتي گروه کامپيوتر ساختمان داده ها به زبانC صفحه146 : 3-5پيمايش Inorder هنگامي که اين پيمايش انتخاب مي شود ،حرکت ب``ه س``مت پايين به طرف چپ انجام مي شود و اين عمل تا آخرين گره صورت مي گيرد سپس مي توان گره را بازيابي کرد و بع``د ب``ه سمت راست رفته و به همين ترتيب کار را ادامه پيدا مي کند. اين متناظر با شکل infixيک عبارت است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه147 : يک درخت دودوييInorder پيمايش3-5 Vide inorder (tree_pointer ptr ) /* inorder tree traversal */ { if (ptr) { inorder ( ptr -> left_child ); printf (“ % d” ، ptr -> data ); inorder (ptr -> right_child); } } 148 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر 3-5پيمايش Preorder تابع preorderحاوي دستورات الزم براي شکل دوم پيمايش است. بر اساس اين پيمايش ،گره را ابتدا بازيابي و مالقات نموده و سپس انشعابات چپ را دنبال و تمام گره ها را بازيابي مي ک``````نيم .اين فرآيند ادامه پيدا مي کند تا به يک گره تهي برسيم .در اين نقط``ه ، به نزديکترين جدي که داراي يک فرزند راست باشد مراجعه و با اين گره شروع خواهيم نمود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه149 : 3-5پيمايش Preorder با پيمايش preorderگره هاي درخت زير خروجي ب``ه ش``کل زير خواهند داشت : + ‏E 19 + * * / A B C ‏DE خروجي 17 18 16 * 2 ‏D 14 3 * 15 11 C ‏B 10 ساختمان داده ها به زبانC 4 / 12 13 اين به شکل يک عبارت prefixاست. گروه کامپيوتر 1 5 A 8 9 7 6 صفحه150 : يک درخت دودوييPreorder پيمايش3-5 Vide preorder (tree_pointer ptr ) /* preorder tree traversal */ { if (ptr) { printf (“ % d” ، ptr -> data ); preorder ( ptr -> left_child ); preorder (ptr -> right_child); } } 151 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر 3-5پيمايش postorder اين پيمايش دو فرزند يک گره را قبل از بازيابي آن گره مالقات و چاپ مي کند .اين مساله بدين مفهوم است که فرزندان يک گره قبل از خود آن گره بازيابي مي گردد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه152 : 3-5پيمايش postorder خروجي حاصل از پيمايش postorderشکل زير به صورت زي``ر است : 1 + ‏E 19 *A B/ C* D ‏E + خروجي 17 18 16 * 2 ‏D 14 * 15 11 C 13 12 10 ساختمان داده ها به زبانC 4 / ‏B اين خروجي مانند يک عبارت postfixاست. گروه کامپيوتر 3 5 A 8 9 7 6 صفحه153 : غيربازگشتيinorder پيمايش3-5 Void iter_pointer (tree_pointer node ) { int top = -1 ; /* initialize stack */ tree_pointer stack [M AX_STACK_SIZE] ; for ( ; ; ) { for (; ->left_child) node ; node = stack */ add ( &top ، node ); /* add to = delete (&top); /*delete from stack node */ stack*/ } 154 :صفحه } if (! Node) break ; /* empty printf (“ % d”، node-> data ) ; node = node -> right_child; Cساختمان داده ها به زبان گروه کامپيوتر 3-5پيمايش inorderغيربازگشتي تحليل : inorder2فرض کنيد تع````داد گره هاي درخت n باش```د ،اگر عم```ل iter_inorderرا در نظر بگ```يريم ، مشاهده مي شود که هر گره درخت فقط يک بار در پشته قرار گرفته و يا از آن خارج مي شود .بنابراين اگر تع````داد گره هاي درخت nباشد ،پيچيدگي زمان تابع برابر با ) O(nمي باش``د. حافظه مورد نياز براب``ر با عم``ق درخت اس``ت ک``ه مساوي با ) O(nمي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه155 : 3-5پيمايش ترتيب سطحي پيمايش هاي inorder ، preorder ، postorderچه به صورت بازگشت پذيري نوشته يا به صورت غيربازگشتي ،همگي نيازمند پشته مي باشند. اين پيمايش ،ترتيب سطحي ،ابتدا ريشه را بازيابي ،سپس فرزن```د چپ ريشه و به دنبال آن فرزند راست ريشه بازيابي مي گردد .اين شيوه با بازيابي از گره منتهي اليه سمت چپ ب``ه س``مت راس``ت هر سطح جديد تکرار مي گردد .اين پيمايش از صف استفاده مي کند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه156 : 3-5پيمايش ترتيب سطحي پيمايش ترتيب سطحي درخت زير به صورت زير است : + ‏E 19 + *E *D / C ‏AB 1 17 18 16 * 2 ‏D 14 3 * 15 11 C 13 / 12 ‏B 10 گروه کامپيوتر ساختمان داده ها به زبانC 4 5 A 8 9 7 6 صفحه157 : 4-5اعمال مفيد بر روي درختان دودويي 1دودويي 1- درختاندودويي کردندرختان کپيکردن کپي درخت دودرخت تساويدو برابريووتساوي تعيينبرابري --22تعيين ‏Satisfiability مسالهSatisfiability --33مساله گروه کامپيوتر ساختمان داده ها به زبانC صفحه158 : 5-5درختان نخي دودويي تعداد اتصاالت تهي در يک درخت دودويي بيشتر از تع``داد اش``اره گرهاي غيرتهي است. در يک درخت دودويي تعداد n + 1اتصال از ک````ل اتصاالت آن يعني 2n ،تهي است .ي``ک راه ب``راي ب``ه ک``ارگيري اين اتصاالت توسط پرلين و تورنتن پيشنهاد شد .راه حل اين بود که از اتصاالت تهي براي ارتباط با ديگر گره هاي يک درخت استفاده شود که در اين صورت درخت را درخت نخي مي نامند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه159 : 5-5درختان نخي دودويي براي ايجاد اتصاالت نخي از قوانين زير استفاده مي شود : )1اگر ptr-> left_childتهي باشد ،آن را طوري تغيير مي دهيم که به گره اي ک``ه در پيمايش inorderقب``ل از ptr قرار دارد ،اشاره کند. )2اگر ptr-> right_childتهي باشد ،آن را طوري تغي``ير مي دهيم که به گره اي که در پيمايش inorderبعد از ptr قرار دارد ،اشاره کند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه160 : 5-5درختان نخي دودويي هنگامي که درختي را در حافظه نمايش مي دهيم ،بايستي بتوانيم بين اتصاالت نخي و واقعي تف``اوتي قاي``ل ش``ويم .اين ک``ار را با افزودن دو فيلد اضافي به هر گره انجام مي دهيم ک``````ه آنها را right_thread ، left_threadمي ناميم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه161 : 5-5درختان نخي دودويي ‏A ‏B ‏C يم ت نخ درخ ‏A ‏B ‏C ‏G ‏F اظر تن ‏G ‏F ‏D ‏E ‏I ‏D ‏E اتصاالت نخي ‏I گروه کامپيوتر ‏H ساختمان داده ها به زبانC صفحه162 : ‏H 5-5پيمايش inorderيک درخت نخي دودويي براي هر گره مانن``د ، ptrدر ي``ک درخت دودويي ،چنانچ``ه ptr->right_thread = TRUEباش```د ،طب```ق تعريف گره بعدي ptrدر پيمايش inorder ، ptr- >right_childمي باشد .در غير اين صورت گره بعدي ،ptrبا پايين رفتن روي مس```ير فرزن```دان چپ ptrاز طرف فرزند سمت راست ptrتا وقتي ک``ه ب``ه گره اي با وض``عيت left_thread = TRUEبرسيم ،تعيين مي شود . گروه کامپيوتر ساختمان داده ها به زبانC صفحه163 : 5-5پيمايش inorderيک درخت نخي دودويي تابع insuccبدون استفاده از پشته ،گره بعدي در پيمايش inorderرا در يک درخت نخي دودويي پيدا مي کند. ب```راي پيمايش inorderمي ت```وانيم با فراخ```واني مکرر insuccتمام گره ها را بازيابي کنيم . گروه کامپيوتر ساختمان داده ها به زبانC صفحه164 : يک درخت نخيinorder پيمايش5-5 دودويي : insucc تابع insucc threaded_pointer (threaded_pointer tree) { /* find the inorder sucassor of tree in a threaded binary tree */ threaded_pointer temp ; temp = tree -> right_child ; if (! Tree -> right_thread) while (! temp -> left_thread) temp = temp -> left_child ; return temp ; inorder يک گره خاص در پيمايش، پيدا نمودن گره بعد } 165 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر يک درخت نخيinorder پيمايش5-5 دودويي Void tinorder (threaded_pointer tree) { /* traverse the threaded binary tree inorder */ threaded_pointer temp = tree ; for ( ; ; ) { temp = insucc (temp) ; if (temp = tree ) break ; printf (“ % 3c” ، temp -> data ) ; } } 166 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر 5-5درج يک گره به داخل درخت نخي دودويي فرض کني``د داراي گرهي ب``ه ن``ام parentهس``تيم ک``ه داراي زيردرخت راست تهي مي باشد ،آنگاه مايل هستيم childرا به عنوان فرزند راست parentدرج کنيم .براي انجام اين ک```ار بايد : ( parent->right_thread)1را برابر FLASHقرار دهيد. ( child-> left_thread )2و child-> right_threadرا برابر TRUEقرار دهيد . ( child-> left_child )3را طوري تنظيم کنيد ک``ه به parenاش``اره کند. ( child-> right_child )4را برابر parent->right_child قرار دهيد. ب````ه ط````وري ()5 ک````ه 167 کني````د صفحه: تنظيمزبانC داده ها به parent->right_childراساختمان گروه کامپيوتر ‏childاشاره کند. 5-5درج يک گره به داخل درخت نخي دودويي مثال در شکل زير گره Dرا به عنوان فرزند راست گره Bجايگ```ذاري مي کنيم : ‏roo ‏t ‏roo ‏t ‏A ‏pare ‏nt ‏A ‏B ‏D ‏pare ‏nt ‏C ‏child ‏B ‏D ‏C ‏child گروه کامپيوتر ساختمان داده ها به زبانC صفحه168 : 6-5نوع داده مجرد ( (ADTهرم max treeدرختي است که مقدار کليد هر گره آن کم```تر از مقادير کليدهاي فرزندانش نباشد. max heapيک درخت دودويي کامل است که يک max treeنيز مي باشد. min treeدرختي است که مقدار کليد هر گره آن بيش```تر از مقادير کليدهاي فرزندانش نباشد. min heapيک درخت دودويي کامل است که در واقع ي``ک min treeمي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه169 : 6-5مثال از max heapو min heap 9 مثال از max heap 3 [] 1 [] 3 [] 1 14 6 [] 2 [] 3 7 1 2 [] 6 5 10 مثال از min heap 8 3 [] 4 6 [] 3 2 0 [] 2 [] 3 7 [] 2 ][6 5 0 گروه کامپيوتر 1 0 [] 4 [] 1 2 4 []5 8 [] 1 [] 2 [] 4 6 ساختمان داده ها به زبانC 8 ][5 1 0 صفحه170 : [] 4 6-5اعمال اساسي بر روي heap ايجاد يک هرم( )heapتهي جايگذاري عنصر جديد به هرم ()heap حذف بزرگترين عنصر از هرم ()heap گروه کامپيوتر ساختمان داده ها به زبانC صفحه171 : 6-5صف اولويت غالبا هرم ها براي پياده سازي صف اولويت ها استفاده مي شوند. در صف اولويت ها عنصري ک``````ه داراي باالترين ( يا پايين ترين ) اولويت هست ،حذف مي شود. • آرايه ساده ترين نمايش براي يک صف اولويت مي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه172 : نمايش هاي صف اولويت6-5 Deletion Insertion Representation Θ(n) Θ(1) Unordered array Θ(n Θ(1) Unordered O(log2 n) linked list O(log2 n) Θ(1) O(n) Stored array Θ(1) O(n) Stored linked list Max heap 173 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر 6-5درج عناصر به داخل يک Max Heap 20 2 20 []1 []3 1 5 1 0 []2 2 1 4 ][5 []4 ب -محل اوليه گره جديد []1 []3 1 5 درج عنصر جديد 1 0 ][5 []2 1 4 []4 الLLف -درخت heapقبLLل از درج اضافه کردن گره جديد در هر موقعيت ديگري ،تعري```ف heapرا نقض مي کند زيرا نتيجه يک درخت دودويي کامل نخواهد بود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه174 : Max heap درج عنصر به يک6-5 Void *n ) insert_max_heap ( element item ، int { /* insert size item a max heap of current *n *into / int i ; if (H EAP_FULL(*n) { full . \n”) ; fprint f (stderr ، “ The heap is exit (1) ; } i = ++ ( *n ) ; while i ! = 1 ) && (item.key > heap [i/2] . Key (( )) { heap [i] = heap[i/2] ; i/=2; } heap [i] = item ; }175 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر 6-5تحليل تابع insert_max_heap از آنجا که heapيک درخت کامل با nعنصر مي باشد ،داراي مي])n 1 [logبدين معني مي باشد که حلق``ه while باشد2(.اين ارتفاع ‏O(log پيچيدگي تابع درج برابر بنابراين به ميزان تکرار شود2 n) . )O(log2 n مي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه176 : 6-5حذف عنصري از Max Heap هنگامي که عنصري از max heapحذف مي ش``ود ،آن را از ريشه درخت heapمي گيريم. ‏removed 20 2 []1 []3 20 1 5 ][5 []1 حذف يک عنصر از max heap []2 2 1 4 گروه کامپيوتر []4 []3 1 5 1 0 ساختمان داده ها به زبانC ][5 []2 1 4 صفحه177 : []4 6-5تحليل تابع delete_max_heap ميOباشد. پيچيدگي حذف برابر)(log2 n زمان حذف يک عنصر دلخواه از درخت heapبا nعنصر ،برابر ) O(nمي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه178 : 7-5درختان جستجوي دودويي يک درخت جستجوي يک درخت دودويي است که ممکن است تهي باشد .اگر درخت تهي نباشد خصوصيات زير را برآورده مي کند : هر عنصر داراي يک کلي``د اس``ت و دو عنصر نباي``د داراي کلي``د يکسان باشند ،در واقع کليدها منحصر به فردند. کليدهاي واقع در زيردرخت غيرتهي چپ بايد کمتر از مقدار کليد واقع در ريشه زيردرخت راست باشد. کليدهاي واقع در زيردرخت غيرتهي راست بايد بزرگتر از مق``دار کليد واقع در ريشه زيردرخت چپ باشد. زيردرخت``ان چپ و راس``ت ن``يز خ``ود درخت``ان جس``تجوي دودويي ميباشند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه179 : 7-5درختان جستجوي دودويي 30 مثال 40 5 2 گروه کامپيوتر ساختمان داده ها به زبانC صفحه180 : 7-5جستجوي يک درخت دودويي فرض کنيد خواسته باشيم دنبال عنصري با کليد keyبگرديم .ابتدا از ريشه ( )rootشروع مي کنيم ،اگر ريش``ه تهي باش``د ،درخت جستجو فاقد هر عنصري بوده و جستجو ناموفق خواهد ب``ود .در غ``ير اين صورت keyرا با با مقدار کليد ريشه مقايسه کرده : اگر keyکمتر از مق``دار کلي``د ريش``ه باش``د ،هيچ عنصري در زيردرخت راست وجود ندارد که داراي کليدي براب``ر keyباش``د ، بنابراين زيردرخت چپ ريشه را جستجو مي کنيم. اگر keyبزرگتر از مقدار کليد ريشه باشد ،زي``ردرخت راس``ت را جستجو مي کنيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه181 : 7-5تحليل search اگر hارتفاع يا عم``ق ي``ک درخت جس`تجوي دودويي باش`د ، عمل جستجو را در مدت ) O(hانجام مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه182 : 7-5درج عنصري به داخل درخت جستجوي دودويي براي درج عنصر جديدي به نام ، keyابتدا بايد مشخص نم``ود ک``ه آيا کليد با عناصر موجود متفاوت است يا خير .براي انجام اين ک```ار بايد درخت را جستجو کرد ،اگرجستجو ناموفق باش```د ،عنصر را در محلي که جستجو خاتمه پيدا نموده است ،درج مي کنيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه183 : 7-5درج عنصري به داخل درخت جتجوي دودويي مثال 3 0 4 0 5 4 0 3 5 5 2 2 ذار اي گ ج جاي گذا ري 80 8 0 3 0 35 ي 3 0 4 0 8 0 گروه کامپيوتر 5 2 ساختمان داده ها به زبانC صفحه184 : 7-5تحليل insert_node زمان الزم براي جستجوي numدر ي``ک درخت براب``ر ) O(hمي باشد به نحوي که hبرابر با عمق يا ارتف``اع درخت است .بقيه الگوريتم نياز ب```ه زمان ) Θ(1دارد. بنابراين زمان کل مورد نياز insert_nodeبرابر با ) Θ(hمي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه185 : 7-5حذف عنصري از درخت جستجوي دودويي براي حذف 35از درخت زير بايد فيلد فرزند چپ والد اين گروه را برابر NULLقرار داده و گره را آزاد نمود : 3 0 4 0 8 0 گروه کامپيوتر 5 3 5 2 ساختمان داده ها به زبانC صفحه186 : 7-5حذف عنصري از درخت جستجوي دودويي زماني که يک گره برگ با دو فرزند حذف مي شوند ،گره را با بزرگترين عنصر در زير درخت چپ و يا کوچک````ترين عنصر در زيردرخت راست آن گره جايگزين و تعويض کرد. عمل حذف در زمان ) O(hانجام مي گيرد ،ب``ه نح``وي ک``ه h عمق درخت مي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه187 : 7-5درختان جستجوي متعادل درختان جستجوي متعادل درختان جستجو با بيشترين عمق )، 2 n ‏O(log ناميده مي شوند. درختان جستجوي متعادلي وجود دارن``د ک``ه عم``ل جس``تجو ،درج و ح```ذف را در زمان ) O(hممکن مي سازند از جمل```ه درخت```ان ‏red_black ، 2-3 ، AVL گروه کامپيوتر ساختمان داده ها به زبانC صفحه188 : 8-5درختان انتخابي فرض کنيد داراي kمجموعه و رشته مرتب شده اي از عناصر هس```تيم که بايد در يک رشته واحد ادغام ش``وند .هر دنبال```ه يا ترتيب ش``امل تعدادي رکورد به ترتيب غيرنزولي و فيلد مشخص``ي ب``ه ن``ام keyمي باشد. يک دنباله مرتب اجرا ( )runناميده مي شود. فرض کنيد که ،nتعداد رکوردها در kاجرا باشد ،عمل ادغ``ام مي تواند با تکرار رکورد با کوچکترين کليد انجام شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه189 : 8-5درختان انتخابي کوچکترين کليد بايد ازبين kامکان موجود پيدا شود و مي تواند رکوردي قبل از هر kاجرا ( )k-runsباشد. بهترين روش براي ادغ``ام kاج``را ( ، )k-runsنيازمن``د k-1 مقايسه براي تعيين و انتقال رکورد بعدي به خروجي مي باشد. به ازاي ، k>2مي توانيم با اس``تفاده از اي``ده درخت انتخ``ابي ، تعداد مقايسه هاي الزم جهت تع``يين کوچک``ترين عنصر را ک``اهش دهيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه190 : 8-5درختان انتخابي يک درخت انتخابي ،ي``ک درخت دودويي اس``ت ک``ه هر گره آن کوچکتر از دو فرزند خ``ود مي باش``د بن``ابراين ،گره ريش``ه نش``ان دهنده کوچکترين گره در درخت مي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه191 : 8-5درختان انتخابي 6 []1 مثال []3 []15 1 ][13 10 1 9 0 11 0 8 ][12 ][11 1 5 6 ‏run 7 2 گروه کامپيوتر 2 3 1 0 3 0 ‏run 3 []4 1 0 ][8 ][9 0 5 ‏run 4 9 2 5 0 ‏run 5 []5 9 2 0 ][10 1 5 1 ‏run 6 6 6 1 0 ‏run 8 ][6 8 9 0 ][14 8 2 8 ][7 1 7 1 7 6 []2 5 1 8 ‏run 2 ساختمان داده ها به زبانC 6 ‏run1 صفحه192 : 8-5درختان انتخابي )O(log2 k زمان تجديد ساختار درخت برابر مي باشد. )O(nlog2 k زمان الزم براي ادغام تمام nرکورد برابر مي باشد. )O(nlog2 k زمان کل الزم جهت ادغام kاجرا ( )runبرابر گروه کامپيوتر مي باشد. ساختمان داده ها به زبانC صفحه193 : 9-5جنگل ها جنگل مجموعه n ≥ 0درخت مجزا مي باشد. اگر ريشه درخت را حذف کنيم ،آنگاه داراي يک جنگل خواهيم بود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه194 : 9-5تبديل جنگل به يک درخت دودويي براي تبديل اين جنگل به يک درخت دودويي واحد : ابتدا نمايش دودويي هر يک از درخت``ان جنگ``ل را ب``ه دس``ت مي آوريم سپس تمام درختان دودويي را از طريق فيلد همزاد گره ريشه ب``ه يکديگر متصل مي کنيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه195 : 9-5تبديل جنگل به يک درخت دودويي ‏E ‏G ‏I ‏H ‏A ‏F ‏D ‏C ‏B تبديل به درخت دودويي ‏A ‏E ‏G ‏B ‏C ‏F ‏H ‏D ‏I گروه کامپيوتر ساختمان داده ها به زبانC صفحه196 : 9-5تبديل جنگل به يک درخت دودويي اگر ‏T1,...,Tn جنگلي از درختان باشد ،آنگاه درخت دودويي متناظر با اين جنگل يعني ) (T1,...,Tn :B ( )1اگر n=0باشد ،تهي خواهد بود(T. ) 1 `هT12 ,`T 11, داراي ريشه اي برابر با) 1m ،Bداراي زي``ردرخت `(`Tد باش مي ريش ()2 ‏T11,T12,T1m ) (T1 `وي ک``ه مي باش``د) ،ب``Tه ,...,نحB(`T چپي برابر با ‏n 2 زيردرختان ريش``ه مي باش``ند و در نهايت داراي زي``ردرخت راست مي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه197 : 9-5پيمايش جنگل پيمايش هاي postorder ، inorder ، preorderمتن``اظر درخت دودويي Tي``ک جنگ``ل F داراي يک تناظر طبيعي با پيمايش هاي Fمي باشند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه198 : 9-5پيمايش جنگل پيمايش preorderمربوط به Tمعادل با بازيابي گره هاي Fدر درخت preorderمي باشد: • اگر Fتهي باشد ،برگرديد. • ريشه درخت اول Fرا بازيابي کنيد. • زيردرخت ،درخت اول را به صورت preorderپيمايش کنيد. • ساير درختان Fرا به صورت preorderپيمايش کنيد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه199 : 9-5پيمايش جنگل پيمايش inorderمربوط به Tمعادل گره هاي Fدر درخت inorderاست که به صورت زير تعريف مي شود : • • • • اگر Fتهي باشد ،برگرديد. ريشه درخت ،درخت اول را به صورت inorderپيمايش کنيد. ريشه درخت اول را بازيابي کنيد. ساير درختان را به صورت inorderپيمايش کنيد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه200 : 9-5پيمايش جنگل هيچ گونه معادل طبيعي براي براي پيمايش postorderدرخت دودويي متناظر يک جنگل وجود ندارد .پيمايش postorder يک جنگل Fرا به صورت زير بيان ي کنيم : )1اگر Fتهي باشد ،برگرديد. )2زي```ردرخت ،اولين درخت Fرا ب```ه ص```ورت postorder پيمايش کنيد. )3ساير درخت``ان باقي مان``ده Fرا ب``ه ص``ورت postorder پيمايش کنيد. )4ريشه اولين درخت Fرا بازيابي کنيد گروه کامپيوتر ساختمان داده ها به زبانC صفحه201 : 10-5نمايش مجموعه مثال ده عضو از 0تا 9که به سه مجموع``ه مج``زا از هم تفکي``ک شده باشند ،مي توانند بدين صورت باشند : }S3 {2,3,5,},S2 {1,4,9},S1 {0,6,7,8 2 5 4 3 9 1 ‏S2 ‏S3 گروه کامپيوتر 0 8 7 6 ‏S1 ساختمان داده ها به زبانC صفحه202 : 10-5نمايش مجموعه در هر مجموعه بر خالف معمول که اشاره گرها به از والد ب``ه فرزن``دان در نظر گرفته مي شدند ،در اينجا اشاره گرها از فرزندان به والد تنظيم مي شوند و يا در حقيقت گره ها با رابطه پدري اتصال يافته اند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه203 : 10-5اعمال روي مجموعه ها حداقل اعمالي که بر روي مجموعه انجام مي شود ،به شرح زير است : )1اجتماع مجموعه مج``زا (Sj : )union اگر و Siدو مجموع``ه مج``زا باشند ،انگاه اجتماع آنها به صورت زير تعريف مي شود : باشدSيا عضو { همه اعضا به صورت xکه xيا عضو ‏i } Sj ‏SiUSj  (find(i) )2پيداکردن : ) iمجموعه اي ک``ه iعض``و آن اس``ت را پيدا کنيد گروه کامپيوتر ساختمان داده ها به زبانC صفحه204 : 10-5اعمال روي مجموعه ها مثال 0 4 9 8 7 6 1 ‏S1US2 گروه کامپيوتر ساختمان داده ها به زبانC صفحه205 : 10-5قانون WeightingبرايUnion(i ، )j تعريف قانون Weightingبراي) : Union(i ، jاگر تعدا گره ها در درخت iکمتر از تعداد گره ها در درخت jباشد j ،را والد ، i در غير اين صورت iرا والد jقرار مي دهيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه206 : 10-5پياده سازي قانون Weighting براي پياده سازي ق``انون Weightingباي``د ب``دانيم ک``ه در هر درخت چند گره وجود دارد .اين کار را بدين ترتيب انجام مي دهيم که در ريشه هر درخت يک فيلد countقرار مي دهيم .اگر iيک گره ريشه باشد ،آنگاه در ] count[iتعداد گره هاي آن درخت خواهد بود Count .به صورت يک عدد منفي در فيلد parent گذاشته مي شود .زماني که قانون Weightingرا بيان مي کنيم ،عمل اجتماع به اين صورت را union2مي ناميم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه207 : 10-5مجموعه ها اصل موضوعي :فرض کنيد Tيک درخت با nگره باشد که توسط union2ايجاد شده باشد ،در اين ص```ورت هيچ گرهي در ، T سطحي بيشتر از [log2 n]  1 نخواهد داشت. اگر در يک درخت nعضو وجو.د داشته باشد ،بيشترين زمان براي ‏O(log )2 n بود. خواهد يافتن يک عضو به صورت اگر ترکي```بي از n-1عم```ل unionو mعمل findداش```ته ص```ورتO(n ب```ه mlog باشيم ،در بدترين حالت ممکن ،زمان)2 n درمي آيد. تعريف ( قانون تخريب ) :اگر jگرهي روي مسير از iتا ريشه خود باشد ،آنگاه jرا فرزند ريشه قرار دهيد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه208 : 11-5شمارش درختان دودويي تعداد درختان دودويي مجزا : تعداد درختان دودويي با nگره ،تعداد جايگشت هاي از 1ت```ا nبا استفاده از يک پشته و باالخره تعداد راههاي ضرب n+1ماتريس ، باهم مساوي اند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه209 : 11-5تعداد درختان دودويي مجزا براي به دست آوردن تعداد درخت``ان مج``زا با nگره از ت``ابع زي``ر استفاده مي کنيم : ‏B(x)  bi x ‏i ‏i0 تابع فوق توليدکننده تعداد درختان دودويي است. 1  2n که bn برابر است با : ‏bn  ‏n  1  n  ) در نتيجه داريم : 4n 3 2 (bn O ‏n گروه کامپيوتر ساختمان داده ها به زبانC صفحه210 : فصل ششم :گراف ها اهداف ‏ ‏ ‏ ‏ آشنايي با گراف ماتريس مجاورتي جستجوي گراف شبکه ها گروه کامپيوتر ساختمان داده ها به زبانC صفحه211 : فصل ششم :گراف ها هر گراف Gشامل دو مجموعه Vو Eاست : : Vمجموعه محدود و غيرتهي از رئوس است : Eمجموعه اي محدود و احتماال تهي از لبه ها مي باشد. ) V(Gو ) : E(Gمجموعه رئوس و لبه هاي گراف Gرا نمايش مي دهند. براي نمايش گراف هم مي توانيم بنويسيم )G=(V ، E گروه کامپيوتر ساختمان داده ها به زبانC صفحه212 : 1-6گراف ها در يک گراف بدون جهت ،زوج رئوس ،زوج مرتب نيس``تند ،بن``ابراين زوج هاي ) (v1, v0و ) , v1با (v0 هم يکسانند. در يک گراف جهت دار هر لبه با زوج مرتب  v0 , v1  نمايش داده مي شود. انتها و v0 ابتداي لبه v1 لبه v0 دو, v1 ‏ متفاوت و هستند .بنابراين را, v0  دهند. نمايشv1مي گروه کامپيوتر ساختمان داده ها به زبانC صفحه213 : 1-6گراف ها ‏براي گراف بدون جهت ،لبه ها به صورت خطوط يا منحني نمايش داده مي شوند. براي گراف هاي جهت دار لبه ها به صورت فلش هايي که از انتها به ابتدا رسم شده است ،ارايه مي گردند. ثا ل م 0 0 2 1 2 0 6 ‏G3 1 ‏F 4 2 3 گروه کامپيوتر 3 ‏G1 ‏G2 جهت دار 1 بدون جهت ساختمان داده ها به زبانC صفحه214 : 1-6محدوديت هاي گراف ها محدوديت هاي زير بر روي گراف ها اعمال مي شود : يک گراف فاقد لبه اي از يک راس مانند ، iبه خ``ودش مي باش``د. اين مطلب بدين معني است که لبه ) vi , vi غير(معتبر مي باشد. يک گراف فاقد رويداد چندگانه از يک لبه مي باشد. گراف کامل :گراف کامل گرافي است که داراي ح``داکثر تع``داد لب``ه باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه215 : 1-6گراف ها براي يک گراف بدون جهت با nراس ،ح``داکثر تع``داد لب``ه ها ، تعداد متمايز و غ```يرمرتب زوج هاي) i ≠ (jv،i , v jمي باش```د .ايت تعداد برابر است با : ‏n(n-1 ) / 2 اگرگراف جهت داري با nگره وجود داشته باشد ،بيش``ترين تع``داد لبه هاي آن برابر است با : )n(n-1 گروه کامپيوتر ساختمان داده ها به زبانC صفحه216 : 1-6گراف ها ودو v0 راس اگر) v0 , v1 يک( لبه در گراف بدون جهت باشد ،مي گوييم رئ``وس يک لبه متالقي) , v j ‏v1 ‏v1 v0 روي (viو است . مجاور و لبه يک زير گراف باشدE(G , ) . )E(G , , ‏V ( ‏G ) ‏ ‏V ( ‏G ) ‏G و ،Gگرافي است مانند به نحوي ک``ه گروه کامپيوتر ساختمان داده ها به زبانC صفحه217 : 1-6گراف ها طول يک مسير تعداد لبه هاي موجود در آن است. مسير ساده ،مسيري است که همه رئوس آن احتماال به جز اولي و آخري مجزا باشند. حلقه يا سيکل ،يک مسيرساده است که اولين و آخرين راس آن يکي باشد. براي مثال 0،1،2،0يک حلقه درG1است. 0 2 1 3 ‏G1 گروه کامپيوتر ساختمان داده ها به زبانC صفحه218 : 1-6گراف ها در گراف بدون جهت مانن``د ، Gدو راس v0و v1را متص``ل مي گوين``د، اگر مسيري در Gاز v0به v1وجود داشته باشد. راسvj , v در يک گراف بدون جهت را متصل مي ناميم اگر ب```راي هر زوج ‏i )، V(Gمسيري از viبه vjدر Gوجود داشته باشد. يک مولفه اتصال يا به طور ساده تر يک مولفه ،در گراف ب``دون جهت ، بزرگترين زيرگراف متصل آن است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه219 : 1-6گراف ها يک گراف جهت دار کامال متصل ناميده مي شود ،اگر ب```راي هر زوج به viو vj همچنين از در ، V(G)vمسيري جهت دار از از رئوس j , vi به vj ‏vi وجود داشته باشد. يک مولفه کامال متصل ،بزرگترين زيرگرافي است که ک``امال متص``ل باشد. 0 2 مثال 0 مولفه کامال متصل 1 1 2 ‏G3 گروه کامپيوتر ساختمان داده ها به زبانC صفحه220 : 1-6گراف ها درجه يک راس تعداد لبه هاي متالقي با آن راس است . اگر در گراف Gبا nراس d،iدرج```ه راس iو eتع```داد لب```ه ها باشد ،به آساني مي توان ديد که تعداد لبه ها برابر است با : ‏n 1 ‏e ( di ) / 2 0 گروه کامپيوتر ساختمان داده ها به زبانC صفحه221 : 1-6نمايش گراف نمايش گراف ها به سه صورت است : ماتريس مجاورتي ليست هاي مجاورتي ليست هاي چندگانه گروه کامپيوتر ساختمان داده ها به زبانC صفحه222 : 1-6ماتريس مجاورتي فرض کني``د ) G=(V ، Eي``ک گراف با nراس باش``د ،n ≥ 1 ، ماتريس مجاورتي گراف Gي``ک آراي``ه دوبع``دي n × nب``ه ن``ام (ب``راي vi , v ‏j  ) i , vj گراف جهت دار ) در )E(G (vadj_matمي باشد .اگر لب``ه باشد ،آنگاه adj_mat[i] [j]= 0خواهد بود. ماتريس مجاورتي براي يک گراف بدون جهت متقارن اس``ت زي``را ) E(Gخواهد بود ،اگر و تنها اگر لبه نيز در) (vi , v j در(vi لبه ) , v j )E(G باشد گروه کامپيوتر ساختمان داده ها به زبانC صفحه223 : 6-1ماتريس مجاورتي (مثال ) 0 2 1 3 0 1 1 1 0 1 0 1 1 1 1 1 0 1 2 1 1 1 0 3 0 ماتريس مجاورتي 3 ‏G1 ‏G1 گروه کامپيوتر 2 1 ساختمان داده ها به زبانC صفحه224 : 1-6ماتريس مجاورتي براي گراف بدون جهت ،درجه هر راس مانن``د iمجم``وع عناصر سطري آن است : ‏n 1 ]adj_ mat[i][ j ‏ ‏j ‏0 براي يک گراف جهت دار ،مجم``وع س``طري ،درج``ه خارج``ه و مجموع ستوني ،درجه وارده خواهد بود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه225 : 6-1ليست هاي مجاورتي با اين نمايش n ،سطر ماتريس مجاورتي در nليست پيون```دي قرار مي گيرد .براي هرراس از گراف ، Gيک ليست وجود دارد. هر گره حداقل دو فيلد دارد :راس و اتصال در هر ليست مشخصي مانند ، iگره هاي ليست حاوي رئ```وس مجاور از راس iمي باشند. در يک گراف ب```دون جهت با nراس و eلب```ه n ،گره headو 2eگره ليست دارد .هر گره ليست دو فيلد الزم دارد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه226 : 6-1ليست هاي مجاورتي(مثال) ‏NUL ‏L 3 . 2 ‏vertex link 1 . ‏head ‏nodes . 0 0 ‏NUL ‏L 3 . 2 . 0 . 1 ‏NUL ‏L 3 . 1 . 0 . 2 ‏NUL ‏L 2 . 1 . 0 . 3 ‏G1 ساختمان داده ها به زبانC صفحه227 : گروه کامپيوتر 2 1 3 6-1ليست هاي مجاورتي درجه هر راس در يک گراف ب``دون جهت را مي ت``وان ب``ه سادگي با شمارش تعداد گره هاي آن در ليست مجاورتي تعيين کرد. اگر تعداد رئوس گراف Gبرابر با nباشد ،تعداد کل لبه ها ،در زمان ) O( n + eتعيين مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه228 : 6-1ساختار گره براي ليست هاي مجاورتي نمايش دوم :هر گره داراي چهار فيلد بوده و نشان دهنده يک لبه است. ‏tail ‏row link for tail column link for head head گروه کامپيوتر ساختمان داده ها به زبانC صفحه229 : 1-6ليست هاي مجاورتي چندگانه ) (vi , v j در نمايش ليست مجاورتي ،هر لبه در يک گراف بدون جهت مانند با دو وارده نمايش داده مي شود : ‏vi در ليست براي ‏vj در ليست براي گروه کامپيوتر ساختمان داده ها به زبانC صفحه230 : 1-6لبه هاي وزني در ماتريس مجاورتي ،کميت 1که نشان دهنده وجود يک لبه اس``ت را با وزن يک لبه تعويض مي کنيم .در ليست هاي مجاورتي و ليس```ت هاي مجاورتي چندگانه ،فيلد weightبه ساختار گره اضافه مي شود. ‏vertex2 vertex1 marked ‏path1 ‏path2 ساختار ي```ک گره ب```راي ليس```ت هاي مجاورتي چندگانه گرافي که لبه هايش داراي وزن باشد ،شبکه ناميده مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه231 : 2-6اعمال ابتدايي گراف با توج``ه ب``ه گراف ب``دون جهت ) G(V ، Eو راس vاز ) V(Gمي خ``واهيم رئوس``ي از Gرا ک``ه از vقاب``ل دسترس``ي هس``تند ،ب``ه دس``ت آوريم( يعني همه رئوس متصل ب``ه . )vب``راي اين ک``ار دو روش وج``ود دارد : جس`````تجوي عمقي :روش عمقي ت`````ا ح`````دودي شبيه پيمايش preorderيک درخت است. جستجوي رديفي :اين روش تا حدودي پيمايش ترتيب س````طحي را مجسم مي کند. در پيمايش هاي عمقي و رديفي ،فرض مي کنيم که براي نمايش گراف ها از ليست مجاورتي پيوندي استفاده شده است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه232 : 2-6جستجوي عمقي در آغاز راس vرا مالقات مي کنيم .بعد راس``ي مانن``د wرا ک``ه قبال مالقات نشده و مجاور به vاست را انتخاب کرده و روش جس``تجوي عمقي را با wدنبال مي ک```نيم .م```وقعيت جاري راس vدر ليس```ت مجاورتي با قرار دادن آن در يک پشته صورت مي گيرد .در نهايت ، جستجو به راسي مانن``د uخواه``د رس``يد ک``ه فاق``د هر گون``ه راس غيرمالقات شده در ليست مجاورتي باش``د .در اين مرحل``ه راس``ي از پشته انتخاب و و حذف شده و فرآيند فوق به همين صورت ادامه پيدا مي کند .بر اساس اين روش ،رئ``وس مالق``ات ش``ده ،خ``ارج ش``ده و رئوس مالقات نشده ،داخل پش``ته قرار مي گيرن``د .جس``تجو زماني پايان مي پذيرد که پشته تهي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه233 : جستجوي عمقي2-6 ي```ک درخت ميpreorder جس```تجوي عمقي شبيه پيمايش Void dfs (int V) زيرا. باشد { /* depth first search of a graph beginning with vertex V . */ node_pointer w ; visited[V] = TRUE ; print f ( “ %5d “ ، V ) ; for (w = graph[V] ; w ; w = w-> link ) if ( ! Visited [w->vertex] ) dfs (w-> vertex ) ; } 234 :صفحه Cساختمان داده ها به زبان گروه کامپيوتر 2-6جستجوي عمقي(مثال) گراف G ‏NUL ‏L 6 ‏NUL ‏L 2 . 1 ‏NUL ‏L 4 . 3 . 0 ‏NUL ‏L 6 . 5 . 0 ‏NUL ‏L 7 . 1 ‏NUL ‏L 7 . 1 ‏NUL ‏L 7 . 2 ‏NUL ‏L 7 . 2 . 3 . 5 . 4 گروه کامپيوتر . . ‏V0 0 1 . 2 . 3 . 4 . 5 . 6 . 7 ‏V2 ‏V6 ‏V1 ‏V4 ‏V5 ‏V3 ‏V7 نمايش ليست هاي مجاورتي ساختمان داده ها به زبانC صفحه235 : 2-6جستجوي عمقي(مثال) توضيح شکل قبل اگر روش جستجوي عمقي را از راس به ترتيب ‏v0 آغاز کنيم ،رئوس گراف G ‏v0 , v1, v2 , v3 , v4 , v5 , v6 , v7 گروه کامپيوتر مالقات مي شوند. ساختمان داده ها به زبانC صفحه236 : 2-6تحليل dfs اگر Gتوسط ماتريس مجاورتي نمايش داده شود ،زمان الزم ب```راي تعيين همه رئوس مجاور به ) v ، O(nاست .از آنجا که ح``داکثر n راس مشاهده مي شود ،کل زمان ) O(n2 خواهد شد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه237 : 2-6جستجوي رديفي پيمايش را با راس vشروع نموده ،پس از مالقات راس مزب```ور ،آنرا عالمت گذاري مي کنيم .اول هر يک از رئوس مجاور به راس vرا در ليست مجاورتي مالقات مي کنيم .زماني که همه رئوس مجاور با راس vرا مالقات کرديم ،تمام رئوس مالقات نش```ده ک```ه مجاور با اولين راس مجاور با vدر ليست مجاورتي است را مالقات مي ک``نيم .ب``راي انجام اين کار ماداميکه هر راس مالقات مي شود ،آنرا در يک ص``ف قرار مي دهيم .هنگامي که ليست مجاورتي تمام شد ،راسي را از صف حذف و با تست هر يک از رئوس در ليست مجاورتي اين فرآين```د را ادامه مي دهيم .رئوس مالقات نشده ،مالقات و سپس در ص```ف قرار مي گيرند .رئوس مالق``ات ش``ده نادي``ده گرفت``ه مي ش``وند .جس``تجو هنگامي که صف تهي گردد ،خاتمه مي يابد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه238 : 2-6جستجوي رديفي تابع bfsحاوي دس```تورات الزم جهت پياده سازي جس```تجوي رديفي است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه239 : 2-6درخت هاي پوشا چنانچه گراف Gمتص```ل باش```د ،پيمايش هاي جس```تجوي عمقي يا جستجوي رديفي ،تمام رئوس گراف Gرا مالقات مي کنند. در اين حالت با اعمال هر يک از پيمايش ها لبه هاي گراف Gب```ه دو قسمت تقسيم مي شوند : ( Tبراي لبه هاي درخت ) :مجموعه لب``ه هاي ب``ه ک``ار رفت``ه يا پيموده شده در جستجو مي باشد. ( Nبراي لبه هاي غير درخت ) :مجموعه لبه هاي باقي مان``ده مي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه240 : 2-6درخت هاي پوشا لبه هاي ، Tيک درخت که شامل تمام رئوس گراف Gمي باشد را تشکيل مي دهند . تعريف درخت پوشا :درختي که تعدادي از لبه ها و تمام رئ``وس G را در بر دارد ،درخت پوشا ناميده مي شود : گراف سه درخت پوشاي آن گروه کامپيوتر ساختمان داده ها به زبانC صفحه241 : 2-6درخت هاي پوشا درخت پوشايي که از فراخواني dfsبه دست مي آيد را درخت پوشاي عمقي مي نامند. چنانچه از روش bfsاستفاده شود ،درخت پوشاي حاصل را درخت رديفي مي نامند. پوشاي ‏V ‏V 0 0 ‏V2 ‏V6 ‏V2 ‏V1 ‏V5 ‏V0 ‏V3 ‏V4 ‏V6 ‏V5 ‏V7 درخت پوشاي bfs ‏V1 ‏V4 ‏V2 ‏V3 ‏V6 ‏V7 درخت پوشاي dfs گروه کامپيوتر ساختمان داده ها به زبانC ‏V1 ‏V4 ‏V5 ‏V3 ‏V7 صفحه242 : 2-6درخت هاي پوشا مقصود از زير گراف حداقل ،يعني زيرگرافي که تع``داد لب``ه هايش کمترين باشد. ‏هر گراف متصل با nراس ،بايستي حداقل n-1لبه داشته باشد و همه گراف ها متصل با n-1لبه ،درخت هستند. درخت پوشا داراي n-1لبه مي باشد. ايجاد زيرگراف هاي ح```داقل ،کاربردهاي متع```ددي در طراحي شبکه هاي ارتباطي دارد. مثال :اگر رئوس گراف Gنماينده شهرها و لبه ها معرف جاده هاي ارتباطي بين شهرها بلشد ،آنگاه حداقل تع``داد خط``وط م``ورد نياز براي اتصال nشهر به يکديگر n-1خواهد بود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه243 : 2-6اجزاي دو اتصالي و نقاط اتصال نقطه اتصال :يک راس مانند vاز گراف Gمي باش``د ب``ه نح``وي ک``ه , ‏G حذف راس vهمراه با تمام لب```ه هاي متالقي با ، vگرافي ب```ه ن```ام ايجادمي کند که حداقل داراي دو جز متصل است. گراف دو اتصالي يک گراف متصل است اگر فاقد نقاط اتصالي باشد . 9 8 0 7 1 گراف متصل 5 6 3 ‏V0 ‏V2 2 4 گروه کامپيوتر ‏V6 ‏V1 ‏V4 ‏V5 ‏V3 گراف دو اتصالي ‏V7 ساختمان داده ها به زبانC صفحه244 : 2-6اجزاي دو اتصالي و نقاط اتصال اجزاي دو اتصالي يک گراف بدون جهت متصل مانند Gيک زي```ر گراف دو اتصالي حداکثري به نام Hمي باشد .منظور از اين ح``داکثر اين اس``ت که Gفاقد زيردرختاني است که هم دو اتصالي و هم داراي خاص```يت H باشند. با استفاده از درخت پوشاي عمقي گراف ، Gمي ت``وان اج``زاي دو اتصالي يک گراف بدون جهت متصل را به دست آورد. يک لبه غيردرختي مانند)(u, vيک لبه غيربرگشتي است (back edge ) ،اگر و تنها اگر uجد vو يا vجد uباشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه245 : 2-6اجزاي دو اتصالي و نقاط اتصال ريشه يک درخت پوشاي عمقي يک نقطه اتصال است ،اگر و تنها اگر داراي حداقل دو فرزند باشد. هر راس مانند Uيک نقطه اتصال است ،اگر و تنها اگر داراي ي``ک فرزند مانند Wباشد به نحوي که قادر باش``يم با اس``تفاده از ي``ک مسير که شامل تنها ، Wنسل ها و يک لب``ه برگش``تي ،ب``ه ج``د u برسيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه246 : 2-6اجزاي دو اتصالي و نقاط اتصال براي هر راس در ) G ، low(uپايين ترين عدد عمقي اس``ت ک``ه مي توانيم از Uبا استفاده از يک مسير نسل ها به دنبال ح``داکثر ي``ک لب``ه برگشتي ،به آن برسيم. ‏Low (u) = min { dfn (u) ، min {low(w) │ w ‏is a child of u } ، min { dfn (w) │ ( u ، w } } ) is a back edge که uيک نقطه اتصال است ،اگر و تنها اگر uريشه يک درخت پوش``ا بوده و داراي دو فرزند يا بيشتر باشد و يا uريشه نباش``د و داراي ي``ک فرزند مانند wاس``ت ب``ه نح``وي ک``ه )low (w) ≥ = dfn (u است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه247 : 2-6اجزاي دو اتصالي و نقاط اتصال 0 5 6 3 5 4 6 2 7 9 9 8 7 3 1 2 1 8 0 4 ‏Vertex 0 1 2 3 4 5 6 7 8 9 ‏dfn 4 3 2 0 1 5 6 7 9 8 ‏low 4 3 0 0 0 5 5 7 9 8 مقدير dfnو lowبراي درخت پوشاي با root = 3 گروه کامپيوتر ساختمان داده ها به زبانC صفحه248 : 3-6درختان پوشاي با حداقل هزينه هزينه يک درخت پوشاي ي``ک گراف جهت دار داراي وزن ،مجم``وع هزينه هاي( وزن هاي) لبه ها در درخت پوشا مي باشد. درخت پوشاي حداقل هزينه ،درخت پوشايي است که داراي کم``ترين هزينه باشد. براي به دست آوردن درخت پوشاي حداقل هزين``ه ي``ک گراف جهت دارمتصل مي توان از سه الگوريتم متفاوت استفاده نمود : الگوريتم راشال ،الگوريتم پريم ،الگوريتم سولين هر سه روش از يک طراحي الگوريتمي به ن``ام خ``ط مش``ي greedy استفاده مي کنند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه249 : 3-6درختان پوشاي با حداقل هزينه براي درخت هاي پوش``ا از مالک کم``ترين هزين``ه اس``تفاده مي ش``ود. روش ما بايد داراي شرايط زير باشد : )1بايد فقط از لبه هاي داخل گراف استفاده کنيم. )2بايد دقيقا از n-1لبه استفاده کنيم. )3نبايد از لبه هايي که ايجاد يک حلقه مي کنند ،استفاده کنيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه250 : 3-6الگوريتم راشال در اين روش ،درخت پوشاي با کمترين هزينه ، Tلبه به لب```ه ساخته مي شود .لبه هاي مورد استفاده در ، Tبه ترتيب ص``عودي وزن ها مي باشد .يک لبه در Tخواهد بود ،اگر با لبه هاي قب``ل ک``ه در Tب``وده اند ،تشکيل يک حلقه ندهد چون Gمتص``ل اس``ت و داراي n > 0 راس است ،دقيقا n – 1لبه براي Tانتخاب مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه251 : 3-6الگوريتم راشال (مثال) 0 0 0 1 1 6 2 5 28 10 10 1 6 2 5 5 6 10 1 16 2 0 14 2 5 6 24 12 4 4 3 3 0 0 10 1 14 6 2 12 5 4 3 14 6 2 12 10 16 5 4 3 گروه کامپيوتر 22 0 10 16 4 3 0 1 12 4 3 18 1 14 12 5 4 3 10 16 6 2 25 22 ساختمان داده ها به زبانC 1 14 6 2 5 25 12 4 3 22 صفحه252 : 3-6الگوريتم راشال قضيه فرض کنيد Gيک گراف متصل بدون جهت باشد ،الگوريتم راشال يک درخت پوشاي حداقل را ايجاد مي کند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه253 : 3-6الگوريتم پريم الگوريتم پريم مانند الگوريتم راشال ،در هر زمان ي``ک لب``ه از درخت پوشاي حداقل هزينه را مي سازد .هر چن``د در هر مرحل``ه الگ``وريتم ، مجموعه لبه ها انتخاب شده يک درخت را تشکيل مي دهند .در مقابل ،مجموعه لبه هاي انتخاب شده در الگوريتم راشال در هر مرحل``ه ي``ک جنگل را تشکيل مي دهند .الگوريتم پريم با يک درخت مانند ، Tک``ه تنها شامل يک راس است ،شروع مي کن``د .اين مي توان``د هر ي``ک از رئوس در گراف اصلي باشد .سپس يک لبه با کمترين هزينه مانن``د ب``ه `کT {(u }), v (u, vT ) درخت مي باش``د .اين اضافه مي شود به نحوي که ن``يز خ``ود ي` عمل را تا زماني که Tشامل n – 1لبه باشد ،ادامه مي دهيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه254 : 3-6الگوريتم پريم (مثال ) 0 0 10 1 6 2 0 5 10 6 2 2 25 3 3 10 16 6 2 5 25 12 4 3 22 0 10 1 22 گروه کامپيوتر 1 10 16 6 2 5 25 12 4 3 25 4 0 4 5 18 3 0 22 2 6 12 4 3 5 14 24 4 6 5 10 1 16 25 1 28 10 1 0 22 ساختمان داده ها به زبانC 1 14 6 2 5 25 12 4 3 22 صفحه255 : 3-6الگوريتم سولين بر خالف الگوريتم پريم و راشال ،الگوريتم سولين چندين لبه را ب``راي اضافه نمودن در هر مرحله انتخاب مي کند .در ابتدا يک مرحل``ه ،لب``ه هاي انتخاب شده ،همراه با تمام nراس گراف ،تشکيل ي``ک درخت پوشا را مي دهند .در خالل يک مرحله ي``ک لب``ه ب``راي هر درخت در جنگل انتخاب مي کنيم .اين لبه داراي حداقل هزينه بوده يع``ني دقيق``ا داراي يک راس در درخت مي باشد .از آنجا که دو درخت در جنگ``ل مي توانند يک لبه يکسان انتخاب کنند ،لذا مي توانيم کپي تکراري از لبه ها را حذف کنيم .در ابتداي مرحله اول ،مجموعه لبه هاي انتخ``اب شده خالي مي باشد .اين الگوريتم هنگامي به پايان مي رسد ک``ه فق``ط يک درخت در انتهاي يک مرحله باقي و يا هيچ لبه اي ب``راي انتخ``اب باقي نمانده باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه256 : 3-6الگوريتم سولين (مثال ) 0 0 10 10 16 1 1 14 6 2 5 16 5 6 10 1 14 2 5 6 24 12 4 3 14 2 25 12 28 0 4 3 22 گروه کامپيوتر 12 22 ساختمان داده ها به زبانC 18 25 4 3 22 صفحه257 : 4-6يک مبدا و چند مقصد در اين مساله گراف جهت دار ) G = (V ، Eرا در نظر مي گيريم .تابع ‏v0 وزني w(e) >0را براي لبه هاي vGو راس مبدا فرض مي کنيم .مساله 0 ،تعيين کوتاهترين مسير از به بقيه رئوس در Gاست .فرض مي کنيم تمام وزن ها مثبت باشند. ‏length 10 1) V0 V2 25 2) V0 V2 V3 45 3) V0 V2 V3 V1 45 4) V0 V4 45 ‏path ‏V4 10 30 ‏V5 3 50 ‏V1 35 20 ‏V3 ‏V0 10 15 15 20 ‏V2 يک گراف و کوتاهترين مسير از V0 گروه کامپيوتر ساختمان داده ها به زبانC صفحه258 : 4-6کوتاهترين مسير بين هر جفت از رئوس مساله کوتاهترين مسير بين هر زوج از رئوس به مفهوم يافتن کوت``اهترين مس``ير بين ميvi , همه رئوس vj باشد ( به طوري که ) i ≠ j از آنجا که Gداراي nراس و shortestpathداراي ) n2 زمان( Oمي باشد ،ل``ذا کل زمان صرف شده) O(n3خواهد بود. گراف Gتوسط ماتريس مجاورتي هزينه خود با cost[i][j] = 0ارايه مي شود ( )i = jو در صورتي که لبه ( > i ، j < ) i ≠ jدر Gنباشدcost[i] ، ] [jحاوي عدد بزرگي خواهد بود که اين عدد بايد همان مح````دوديت هاي مطرح شده در خصوص مساله يک مبدا ( ) single sourceرا دارا باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه259 : 4-6کوتاهترين مسير بين هر جفت از رئوس ]i][ jرا[ Ak هزينه کوتاهترين مسير از iبه jتعريف مي کنيم که اين مسير هيچ راس مياني که انديس کوچکتر يا مساوي از (≤ index k )kداشته باشيم ،عبور نمي کند. ‏n 1 ‏A ][i][ j هزينه کوتاهترين مسير از iبه jدر Gاست. نکته اصلي در همه الگوريتم هايي که روي زوج ها عمل مي کنند ، ‏1 ‏A اين مي باشد که همه آنها با شروع کرده و ماتريس هاي متوالي ‏n 1 کندA0, A1. , A2,..., ايجادAمي را گروه کامپيوتر ساختمان داده ها به زبانC صفحه260 : 4-6کوتاهترين مسير بين هر جفت از رئوس ‏kراAبا عمل روي هر زوج اگر قبال Ak 1را توليد کرده باشيم ،مي توانيم از رئوس iو jبا توجه به يکي از دو قاعده زير به دست آوريم : )1کوتاهترين مسير از iبه jاز هيچ راسي با انديس بزرگ``تر از kعب``ور نمي کند و حتي از راسي با انديس kنيز نمي گذرد و بنابراين هزينه است. آن ‏k 1 ‏A چنين[i][ j ] کوتاهترين مسيري از راس kمي گذرد بنابراين چنين مسيري )2 شامل مسيري از iبه kو به دنبال آن مسيري از kبه iمي باشد .هيچ کدام از اين مسيرها با انديس بزرگتر از k-1عب``ور نخواه``د کرد ، مي باشد. و بنابراين هزينه آن ها ]Ak 1[i][k گروه کامپيوتر ]Ak 1[k][i ساختمان داده ها به زبانC صفحه261 : 4-6کوتاهترين مسير بين هر جفت از رئوس ‏k ‏k 1 ‏k ‏k 1 : A [i][ j] min{A [i][ j], A [i][k]  A [k][ j]},k 0فرمول 1 ‏1 ] : A [i][ j] cost[i][ jفرمول 2 ‏An 1[i][allcosts ]j تابع را محاسبه مي کند. برابر(O زمان کل n3) allcosts است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه262 : 4-6گراف جهت دار Gو ماتريس هزينه آن ( مثال) 0 0 1 0 6 1 4 0 2 11 4 ‏V1 2 2 0 ∞ گراف G ماتريس2مجاورتي هزينه3ها براي گروه کامپيوتر 6 ‏V2 ‏V0 11 3 گراف جهت دار G ساختمان داده ها به زبانC صفحه263 : k توليد شده توسط ( allcostsمثال) 4-6ماتريس هاي A 0 0 1 2 0 6 ()32 1 4 ‏A0 2 ‏1 ‏A 2 1 0 11 0 0 2 1 7 0 2 0 6 4 ()13 11 0 0 1 0 0 2 1 6 0 ∞ 0 2 3 ∞ 0 0 1 ‏A 2 1 0 0 4 6 0 0 4 6 1 5 0 2 1 6 0 2 7 0 2 7 0 2 ()34 گروه کامپيوتر 4 11 2 ‏A2 2 0 1 2 ()33 ساختمان داده ها به زبانC صفحه264 : 4-6بسته بودن تعدي در يک گراف جهت دار با لبه هاي بدون وزن مانند ، Gآيا براي هر دو راس مانند iو ، jمسيري از iبه jوجود دارد يا خير؟ دو حالت مي تواند مورد توجه قرار بگيرد : )1وقتي که همه مسيرها طول مثبت داشته باشند که بسته بودن تعدي يک گراف ناميده مي شود. )2زماني که طول مس``يرها غ``يرمنفي باش``د ک``ه بس``ته ب``ودن تع``دي انعکاسي يک گراف ناميده مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه265 : 4-6ماتريس بسته بودن تعدي و ماتريس بسته بودن تعدي انعکاسي تعريف :ماتريس بسته بودن تعدي ، ‏ ‏A ،يک گراف جهت دار مانند G ،ماتريسي است که اگر مسيري از iبه jبا طول بزرگ``تر از ص``فر وج``ود ‏A [i][ j] 1 ب``وده و در غ``ير اين ص``ورت `د]A [i][ j، باش` داش``ته 0 خواهد بود. *A تعريف :ماتريس بسته بودن تعدي انعکاسي ، ،ي```ک گراف جهت دار ‏A*[i][ j] 1 اگر مسيري بزرگتر يا مساوي با ص```فر از i مانند ، Gماتريسي است که * ‏A [i][ j] 0 بوده و در غير اين ص``ورت به jوجود ‏ * داشتهA باشدA، تنها تفاوت و بودA. مي[i خواهد[] ‏i] 1 باشد در عناصر روي قطر اصلي است .بنابراين گروه کامپيوتر ساختمان داده ها به زبانC صفحه266 : 5-6شبکه AOV تعريف :شبکه ) AOV (activity on vertexگراف جهت داري مانند Gاست که رئوس آن نمايانگر فعاليت ها يا عملکردها است و لبه هاي آن نمايانگر ارتباط```ات بين عملکردها مي باش```د ،اين گراف ،شبکه فعاليت هاي روي رئوس يا شبکه AOVناميده مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه267 : 5-6شبکه AOV تعريف :راس iدر يک شبکه AOVمربوط ب``ه گراف ، Gي``ک راس تقدمي براي راس jخواهد بود ،اگر و تنها اگر مس`````ير جهت داري از راس iبه jوجود داشته باشد. اگر و تنها اگر < > i ، jلبه اي در Gباشد i ،ي``ک راس تق``دمي بالفصل براي jاست. اگر iيک راس تقدمي براي jباشد ،آنگاه jراس تاخيري ب``راي i مي باشد. اگر iيک راس تقدمي بالفصل براي jباشد ،آنگاه jراس ت``اخيري بالفصل براي iمي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه268 : 5-6شبکه ( AOVمثال) ‏c9 ‏c8 ‏c1 1 ‏c1 ‏c10 ‏c7 ‏c3 ‏c1 2 ‏c1 4 ‏c2 ‏c1 3 ‏c6 ‏c5 ‏c4 ‏c1 5 گروه کامپيوتر ساختمان داده ها به زبانC صفحه269 : 5-6شبکه AOV تعريف :يک رابطه .تعدي است اگر وتنها اگر براي تمام سه گانه هاي ‏i . j ‚i ، j ، kو j . k ، i . Kرا نتيجه مي دهد( i.j and j.k )=> i.k يک رايطه .روي مجموعه Sغير انعکاسي است ،اگربراي تمامي مقادير iدر S ، i . iنادرست ( )flashباشد. رابطه اي که هم تعدي و هم غير انعکاس``ي باش``د ،ي``ک رابط``ه ترتي``بي ناميده مي شود. اگر رابطه تقدمي غيرانعکاسي نباشد ،آنگاه فعاليتي وجود دارد که راس تقدمي آن خودش است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه270 : 5-6شبکه AOV گراف جهت داري که هيچ حلقه اي نداشته باشد ،گراف acyclicجهت دار يا dagناميده مي شود. تعريف :ترتيب موضعي يک ترتيب خطي از رئوس گراف است به نحوي ک``ه به ازاي هر دو راس iو ، jاگر iيک راس تقدمي براي jدر شبکه باشد ، آنگاه iدر اين ترتيب خطي بيش از jقرار مي گيرد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه271 : 5-6فعاليت بر روي لبه ( )AOVشبکه يک شبکه فعاليت که ارتباط نزديکي با شبکه AOVداشته باشد ،فعاليت روي لبه يا شبکه AOEناميده مي شود. اعمالي که روي پروژه صورت گيرد با لبه هاي جهت دار نمايش داده مي شوند. رئوس شبکه نمايانگر وقايع است. يک واقعه فقط زماني اتفاق مي افتد که همه فعاليت هاي وارده ب``ه آن قبال کام``ل شده باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه272 : 5-6فعاليت بر روي لبه ( )AOVشبکه شبکه هاي فعاليت از نوع AOEدر ارزيابي اجرايي چندين ن``وع از پروژه ها به طور موثري مورد استفاده قرار مي گيرند .اين ارزيابي شامل تعيين چندين نکته در مورد پروژه ها به شرح زير است : ( )1کمترين زمان ممکن براي تکميل پروژه ( )2تعيين اينکه کدام فعاليتها بايستي زودتر انجام ش``وند ت``ا زمان تکميل پروژه کاهش يابد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه273 : 5-6فعاليت بر روي لبه ( )AOVشبکه چندين تکنيک و روش بسيار مهم براي ارزيابي مدل هاي شبکه پ```روژه توس```عه يافته اند از جمله : ( PERT )1ارزيابي اجرايي و تکنيک بازبيني) ( CPM )2روش مسير بحراني ) ( RAM PS )3تخصيص منبع و زمان بندي پروژه چندگانه ) گروه کامپيوتر ساختمان داده ها به زبانC صفحه274 : 5-6فعاليت بر روي لبه ( )AOVشبکه از آنجا که فعاليتهاي يک شبکه AOEمي توانند به ط``ور م``وازي انجام شوند ،کمترين زمان الزم براي کام``ل ش``دن پ``روژه ،ان``دازه طوالني ترين مسير از راس اغازي به راس پاياني است. مسيري با طوالني ترين طول ،يک مسير بحراني است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه275 : 5-6فعاليت بر روي لبه ( )AOVشبکه زودترين زماني که واقعه viمي تواند اتفاق بيفتد ،طوالني ترين مس``ير از راس آغازي v0به راس viاست. زودترين زماني که يک واقعه مي تواند اتفاق بيفتد ،زودترين زمان شروع همه وقايع موجود که از اين راس خارج شده اند را تعيين مي کند .اين زمان را به صورت ) early(iبراي فعاليت aiنش``ان مي دهيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه276 : 5-6فعاليت بر روي لبه ( )AOVشبکه براي هر فعاليت مانند aiمي توان ديرترين زمان را ن```يز تعري```ف کرد .که در واقع ديرترين زماني است که ي``ک فعاليت مي توان``د انجام شود به شرط اينکه زمان پروژه را افزايش ندهد. همه فعاليتهايي که به صورت ) early(i) = late(iهستند ، فعاليت هاي بحراني ناميده مي شوند. تفاضل ) early(iو ) ، late(iاندازه يا ميزان بحراني ب``ودن يک فعاليت را نشان مي دهند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه277 : 5-6محاسبه زودترين زمان به منظور به دس````ت آوردن زودترين و ديرترين زمان ب````راي تمام فعاليتهاي يک شبکه ،مناسب است که براي تمام وق````ايع در شبکه ، ابتدا زودترين زمان روي``داد واقع``ه يع``ني ] earliest[jو سپس ديرترين زمان رويداد واقعه يا ] lastest[jمحاسبه نم```ود .سپس اگر ai فعاليت ب``ه وس``يله لب``ه < > k ، lاراي``ه ش``ود ،مي ت``وانيم ) early(iو) late(iرا از فرمول زير محاسبه کنيم : ‏early(i) earliest ][k ‏ai ‏late(i) = latest [l] – duration of ‏activity محاسبه مي زمان ] earliest[jو ] lastest[jدر دو مرحله گردد :مرحله پيشرو و مرحله پسرو گروه کامپيوتر ساختمان داده ها به زبانC صفحه278 : فصل هفتم :مرتب سازي ‏ ‏ ‏ ‏ ‏ ‏ ‏ اهداف جستجو جستجوي دودويي مرتب سازي درجي مرتب سازي سريع مرتب سازي ادغام مرتب سازي ليست ..... گروه کامپيوتر ساختمان داده ها به زبانC صفحه279 : فصل هفتم :مرتب سازي فرض کنيد مجموعه اي از اطالعات مربوط به اش```يا داريم .اگر اين مجموعه به راحتي در حافظه قابل دسترس``ي قرار گيرن``د ، آنرا ليست مي نامند. در صورتي که براي ذخيره کردن مجموعه ب``ه حافظ``ه خ``ارجي نياز باشد آنرا فايل مي نامند. اطالعات يک شي از مجموعه فوق را رکورد مي نامند. هر جز از رکورد را فيلد مي ناميم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه280 : 1-7اصطالحات زماني که يک ليست از رکوردها را جستجو مي کنيم ،هدف پي``دا نمودن رکوردهايي است که داراي فيلدي با مشخصات م```ورد نياز باشند .اين فيلد را اصطالحا کليد مي نامند. کارايي روش و خط مشي جستجو بستگي به آرايش و نح```وه قرار گرفتن رکوردها در ليست دارد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه281 : 1-7جستجوي ترتيبي فرض کنيد که ليست و يک کليد جستجو به ن``ام Searchnum داشته باشيم .هدف بازيابي رکوردي است ک``ه کلي``د آن منطب``ق ب``ر searchnumباشد .اگر اين ليست داراي nرک``ورد باش``د ،با list[i].keyبه مقدار کلي`د رک`ورد iدسترس`ي پي`دا مي ک`نيم، ليست را با جس``تجوي مق``ادير کلي``دهايlist[n-1].key ، … ، list[0].keyمورد بررسي قرار مي دهيم تا به رکورد م```ورد نظر برسيم يا تمام ليست را جستجو کنيم. گروه کامپيوتر ساختمان داده ها به زبانC صفحه282 : 1-7تحليل تابع seqsearch تابع seqsearchنحوه جستجوي ترتيبي را نشان مي دهد. تحلي````ل ت````ابع : seqsearchقب````ل از شروع جس````تجو ، seqsearchرا در م````وقعيت list[n].keyقرار مي دهيم. اين موقعيت در واقع انتهاي ليست را نشان مي ده``د .با جلوگ``يري از تست پايان ليست ،يعني شرايطي که i > n -1باش``د ،مي ت``وانيم براحتي ساختار حلقه را ساده کنيم .اگر عمل جس``تجو م``وفقيت آم``يز نباش``د ، i = n ،مق``دار 1-را ب``رمي گردانيم .بن``ابراين در ي``ک جستجوي ناموفق نياز به n + 1عمل مقايسه کليد داريم که زمان آن) O(nخواهد بود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه283 : 1-7تحليل تابع seqsearch ميانگين تعداد عمل مقايسه در يک جس``تجوي م``وفقيت آم``يز براب``ر است با : ‏n 1 (i  1) / n (n  1) / 2 ‏ ‏i ‏0 گروه کامپيوتر ساختمان داده ها به زبانC صفحه284 : 1-7جستجوي دودويي در جستجوي دودويي بايستي ليست بر اساس فيلد کليد مرتب شود ،يعني : ≤ … ≤ ‏list[1].key گروه کامپيوتر .list[0].key ≤ ‏list[n-1].key ساختمان داده ها به زبانC صفحه285 : 1-7جستجوي دودويي اين جس`````````تجو با مقايس`````````ه searchnumو ، list[middle].keyب`````````ه ازاي middle=(n-1)/2شروع مي شود. هنگام مقايسه سه حالت ممکن است روي دهد : : searchnum< list[middle].key )1در اين حالت رکوردهايي بين ] list[middleو ] list[n-1کنار گذاشته ش``ده و جس``تجو با رکوردهاي ] List[0ت``ا ] List[middle-1دنبال مي شود. : Searchnum= list[middle].key )2در اين حالت جستجو با موفقيت ب```ه پايان مي رسد. : searchnum> list[middle].keyدر اين حالت ،رکوردهاي بين ] List[0و )3 ] list[middleکن``ار گذاش``ته ش``ده و جس``تجو با رکوردهاي ] list[middle+1ت``ا ] list[n-1دنبال مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه286 : 1-7درخت تصميم گيري براي جستجوي دودويي 4 6 [] 8 9 0 9 5 []11 5 8 1 7 [10 ] 8 2 ][9 [] 5 4 8 5 6 ][7 گروه کامپيوتر ][6 3 0 ][4 2 6 [] 2 [] 3 4 [] 0 1 5 ][1 ساختمان داده ها به زبانC صفحه287 : 1-7وارسي ليست()list Verification نوعا مقايسه ليستها جهت تعيين تست يکي بودن يا تع```يين اختالف آنها نوعي بررسي ليست به حساب مي آيد. مسئله وارسي ليست يک نمونه از جستجوي مکرر يک ليست اس``ت که هر کليد آن به عنوان کليد جستجو در ليست ديگري به کار مي رود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه288 : 1-7وارسي ليست()list Verification تابع : verify1دو ليست را در نظر مي گيرد که به صورت تصادفي مرتب شده اند .به سادگي مي توان ثابت نمود که زمان مجانبي اين تابع در ب``دترين حالت برابر با ) O(mnمي باشد. تابع : verify2از همان ورودي ت``ابع verify1اس``تفاده مي کن``د با اين تفاوت که ليستها قبل از وارسي ،مرتب مي ش```وند .در ب```دترين حالت ،زمان الزم ) O(tsort (n) + tsort (m) + m+nخواهد بود . ) : tsort (nزمان الزم جهت مرتب کردن nرکورد از ليست اول ()list1 ) : tsort (mزمان الزم براي مرتب کردن mرکورد از ليست دوم ()list2 مي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه289 : 2-7مرتب سازي دو نوع از کاربردهاي مهم مرتب سازي عبارتند از : کمک در امر جستجو تطابق عناصر و وارده ها در يک ليست گروه کامپيوتر ساختمان داده ها به زبانC صفحه290 : 3-7مرتب سازي درجيInsertion Sort در اين نوع مرتب سازي ،در هر لحظه فق``ط ي``ک رک``ورد در داخ``ل ليست قاب``ل رويت اس``ت بن``ابراين رک` Ri `ورد را در بين رکوردهاي مرتب شده)0, R1,...,R(i  1 طوريRقرار مي دهيم که رشته حاصل با ان``دازه i ‏K0 K . 1 ...Ki 1 نيز مرتب شده باشد گروه کامپيوتر ساختمان داده ها به زبانC صفحه291 : 3-7تحليل تابع insertion sort زمان محاسباتي جهت درج يک رک.رد به داخل ليست مرتب ش``ده O(i) ، خواهد بود. زمان کل در بدترين حالت برابر است با : ‏n 1 ) O( i) O(n 2 ‏i 0 گروه کامپيوتر ساختمان داده ها به زبانC صفحه292 : 3-7مرتب سازي درجي(مثال) رشته (1و2و3و4و ) 5را با n = 5در نظر گرفت``ه ،بع``د از عم``ل درج ، داريم : ][3 ][2 ][1 ‏i ][0 ][4 - 5 4 3 2 1 1 4 5 3 2 1 2 3 4 5 2 1 3 2 3 4 5 1 زمان محاسباتي مرتب سازي درجي ) O(( k + 1 ) nمي 5 4 3 2 1 4 باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه293 : 3-7انواع مرتب سازي درجي مرتب سازي درجي دودويي : براي انجام اين عمل بايستي به جاي جس``تجوي ترتي``بي از جس``تجوي دودويي استفاده نماييم. در اين حالت ،تعداد انتقال رکورد بدون تغيير باقي خواهد ماند. مرتب سازي درجي ليست : عناصر يک ليست را مي توان ب``ه جاي قرار دادن در آراي``ه در ي``ک ليس``ت پيوندي پويا قرار داد. در اين حالت ،تعداد انتقال رکورد صفر مي شود زيرا فق``ط فيل``د اش``اره گر تغيير مي کند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه294 : 4-7مرتب سازي سريع تفاوت مرتب سازي سريع با درجي در اين اس``ت ک``ه در اين ن``وع مرتب سازي کليد مفصل Kiدر سمت راست با توجه به کل فايل در Ki مح``ل ) s(iقرار بگ``يرد ، قرار مي گيرد .بنابراين اگر کليد بوده)s(iوKبهK j  )j  s(i مي باشد. ، ازاي پس به ازاي ‏i)  بعد( sازKجايگذاري ،فايل اصلي به دو زير فاي``ل ک``ه ش``امل Kرو از jاين ‏R0 ,..., از)Rs(i `يم مي 1شR`n مي باش`  1 ‏1 ,..., `وند. `ند)Rs(،iتقس` و رکوردهاي آنجايي که رشته مرتب ش``ده از تمام رکوردها در زي``ر فاي``ل اول ممکن است در سمت چپ ) s(iو تمام رکوردها در زير فاي``ل دوم در سمت راست ) s(iقرار گيرند ،لذا اين دو فاي``ل مي توانن``د ب``ه طور مستقل مرتب گردند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه295 : 4-7مرتب سازي سريع ‏O(nlog باشد. ميانگين زمان محاسبه براي مرتب سازي سريع )2 nمي قضيه فرض کنيد)Tavg(n زمان الزم براي مرتب سازي يک فايل با nرک```ورد باشد .بنابراين به بزاي مقدار ثابت kداريم : )Tavg(n) knloge n; (n 2 گروه کامپيوتر ساختمان داده ها به زبانC صفحه296 : 4-7مرتب سازي سريع مرتب سازي سريع جهت پياده سازي عم``ل بازگش``ت پ``ذيري ب``ه فضاي پشته نياز دارد. حداکثر عمق بازگشت پذيري log nخواهد بود و به فضاي پشته ) O(log nنياز خواهد بود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه297 : 5-7زمان مرتب سازي بهينه ميO(n بهترين زمان ممکن براي مرتب سازي )log2 n باشد حداقل عمق يک درخت تصميم گيري براي مرتب سازي nعنصر ‏log باشد. مي مجزا و قابل تفکيک برابر با2 (n!)  1 هر الگوريتمي که عمل مرتب سازي را تنها با مقايسه انجام مي دهد ، در بدترين حالت بايستي زماني برابر )(nlogz n داشته باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه298 : ) درخت تصميم گيري(مثال5-7 [0،1،2] K0 K1 No Yes [0،1،2] Yes [0،1،2] No [0،2،1] stop stop ІІ 299 :صفحه [1،0،2] K1 K2 VI Yes No No Yes [1،2،0] [2،0،1] [0،2،1] [1،0،2] No Yes [1،0،2] K0 K2 stop I K0 K2 K1 K2 stop ІІІ Cساختمان داده ها به زبان stop V گروه کامپيوتر stop VI [2،1،0] 6-7مرتب سازي ادغام الگوريتم ): O(1 مراحل در ) O(1فضاي ادغام هنگامي که تعداد رکوردها يع``ني n مجذور کامل بوده و تع``داد رکوردهاي هر فاي``ل م``ورد ادغ``ام ن``يز مضربي از n باشد ،در نظر گرفته مي شود. گروه کامپيوتر ساختمان داده ها به زبانC صفحه300 : 6-7مراحل الگوريتم )O(1 مرحله : 1رکوردnبا بزرگترين کليدها را مشخص کنيد .اين امر با رديابي دو فايل مورد ادغ``ام از سمت راست به چپ صورت مي گيرد. مرحله : 2رکوردهاي فايل دوم که از مرحله اول شناسايي شده اند را با آن دسته از رکوردهايي که در سمت چپ رکوردهايي که از فايل اول شناسايي شدند ،تعويض کنيد .اين امر موجب ‏n مي شود که رکورد با بيشترين کليد ،تشکيل يک بالک مجاور را بدهد. مرحله : 3بالک با بيشترين رکورد را با بالک هاي منتهي اليه سمت چپ تعويض کنيد( مگر ‏n اينکه آن بالک قبال بالک منتهي اليه سمت چپ باشد ) .بالک منتهي الي``ه س``مت راس``ت را مرتب کنيد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه301 : 6-7مراحل الگوريتم )( O(1ادامه) مرحله : 4تمام بالک ها به جز بالک با بزرگترين رکوردها را به ترتيب غير نزولي آخرين کلي```د در بالک مرتب کنيد. مرحله : 5هر تعداد غير مرحله ادغامي که براي ادغام بالک ( غير1ازn  بالک هايي با بزرگ```ترين کليد ) نياز باشد را اجرا کنيد. مرحله : 6بالک با بزرگترين کليد را مرتب کنيد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه302 : 6-7مرتب سازي ادغام تکراري( غير بازگشتي ) در نسخه تکراري فرض خواهد شد که رشته ورودي شامل nليست مرتب شده به طول يک است .ليست ها را دو به دو ( جفتي ) ادغ``ام مي کنيم تا تعداد n/2ليست با ان``دازه 2ب``ه دس``ت آوريم .سپس n/2ليست حاصل را مجددا دو به دو ادغام مي کنيم و اين عم``ل را ادامه مي دهيم تا يک ليست باقي بماند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه303 : 6-7مرتب سازي ادغام بازگشتي براي نسخه بازگشتي ،ساختار رکورد خود را طوري تغي``ير مي دهيم ت``ا ي``ک فيلد اتصال ( )Linkرا نيز دربرگيرد. الگ```وريتم ادغ```ام در ب```دترين حالت و حالت ميانگين ب```ه زمان محاسباتي برابر با ) O(n log nنياز دارد. اين الگوريتم همچنين متناسب با تعداد رکوردهايي که در فايل بايد مرتب مي شدند ،نيازمند فضاي اضافي است. گروه کامپيوتر ساختمان داده ها به زبانC صفحه304 : 7-7مرتب سازي heap روش مرتب سازي heapنيازمند تنها يک مقدار حافظه اض``افي است و در همين حال ،بدترين حالت و زمان متوس``ط آن براب``ر با ) O(n log nخواهد بود .با وجود اينکه مرتب سازي heap کمي کندتر از مرتب سازي ادغ``ام با اس``تفاده از ) O(nفض``اي اضافي است ولي از مرتب سازي ادغام با استفاده از ) O(1فضاي اضافي سريعتر مي باشد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه305 : 7-7مرتب سازي heap براي مرتب سازي يک ليست n-1 ،گذر بر روي ليست اعمال مي شود. در هر گذر ،اولين رکورد در heapبا آخرين رک``ورد تع``ويض مي گردد .از آنجا که اولين رکورد هميشه شامل بزرگترين کليد است ،اين رکورد با بزرگترين کليد را در محل nام قرار مي دهيم .در گ```ذر دوم رکورد با دومين کليد ب``زرگ را در م``وقعيت n-1قرار مي دهيم و در نهايت در iامين گذر ،رکورد با iامين کليد بزرگ را در موقعيت n - i + 1قرار مي دهيم. کل زمان محاسباتي ) O(n log nخواهد شد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه306 : 8-7مرتب سازي مبنا در اينجا توجه خود را روي مرتب سازي رکوردهايي معطوف مي کنيم که داراي چندين کليد هستند .اين کليدها داراي برچسب 0 1 ‏K بهK 0 ,K ,..., نحوي ک``ه نش``ان دهن``ده با اهميت ترين باشد. ‏K r 1مي ‏r 1 ‏K مشخص کننده کم اهميت ترين کليد است. کليد و روش هاي مختلف مرتب سازي : ( M SDبا ارزش ترين رقم ) ( LSDکم ارزش ترين رقم ) گروه کامپيوتر ساختمان داده ها به زبانC صفحه307 : 8-7مرتب سازي مبنا در مرتب سازي مبنا با استفاده از مبنا rکليد مرتب سازي را تجزيه مي کنيم. زمان محاسباتي کل برابراست با : ) O(M AX_DIGIT (RADIX_SIZE + n انتخاب مبنا در زمان مرتب سازي مبنا موثر است . گروه کامپيوتر ساختمان داده ها به زبانC صفحه308 : 9-7مرتب سازي ليست و جدول اين مرتب سازي ،ليس``ت را ب``ه ط``ور ف``يزيکي مرتب نکرده بلک``ه فيلدهاي اتصال را براي نشان دادن ترتيب عناصر اصالح مي کند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه309 : 10-7خالصه مرتب سازي داخلي مرتب سازي درجي زماني که ليست به صورت جزيي مرتب ش``ده باشد ،خوب کار مي کند. مرتب سازي ادغام بهترين روش براي بدترين حاالت است. مرتب سازي سريع بهترين ميانگين را دارد. عملکرد مرتب سازي مبنا بستگي به کليد و انتخاب مبنا دارد. به ازاي n ≤ 20مرتب سازي درجي ()insertion_sort سريعترين است. ب``````راي مق``````ادير nبين 20ت``````ا 45مرتب سازي سريع ( )quicksortبهترين و سريع ترين مي باشد. ب`````````راي مق`````````ادير بزرگ`````````تر از ، nمرتب سازي ادغام( ) merge_sortسريع ترين مي باشد گروه کامپيوتر ساختمان داده ها به زبانC صفحه310 : 10-7خالصه مرتب سازي داخلي مرتب سازي داخلي در هر زمان مي تواند سه بالک (جميعا به طول ‏R1 750رکورد ) را در قالي رانش به ترتيب تا ‏R6 مرتب نمايد. در اين مورد مي توان از مرتب سازي سريع يا heapاستقاده کرد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه311 : 11-7مرتب سازي خارجي (روش هاي مرتب سازي فايل هاي بزرگ ) در زمان خواندن يا نوشتن از /به ديسک زمان هاي زيرمهم است : )1زمان جستجو() Seek time )2 زمان تاخير () latency time )3زمان انتقال () Transmission time گروه کامپيوتر ساختمان داده ها به زبانC صفحه312 : 11-7مرتب سازي خارجي معموال روش مرتب سازي بر روي دستگاه هاي حافظ````ه جانبي ، مرتب سازي ادغام است. اين روش اساسا شامل دو مرحله يا فاز مجزا است : )1در ابتدا ،سگمنت هاي فايل ورودي با استفاده از ي``ک روش مرتب سازي داخلي مناسب ،مرتب مي ش``ود .س``گمنت هاي مرتب شده اصطالحا رانش ( )runناميده مي شوند. )2در فاز دوم ،رانش هاي تولي``د ش``ده در ف``از اول ب``ر اساس الگوي درخت ادغام ،ادغام شده و اين فرآيند تا هنگامي ک``ه تنها يک رانش باقي بماند ،ادامه پيدا مي کند. گروه کامپيوتر ساختمان داده ها به زبانC صفحه313 : 11-7مرتب سازي خارجي براي تعيين زمان مورد نياز مرتب سازي خارجي بايد موارد زير را در نظر گرفت : = حداکثر زمان جستجو ‏t=sحداکثر زمان تاخير =tlزمان الزم براي خواندن يا نوشتن يک بالک 250رکوردي ‏t rwمجموع = ‏t ( ‏t ‏ ‏t ‏ ‏t ) ‏s ‏t ‏rw ‏IOزمان الزم براي مرتب سازي داخلي 750رکورد = ‏t=ISزمان الزم براي ادغام nرکورد از ميانگير ورودي به ميانگير خروجي ‏ntm گروه کامپيوتر ساختمان داده ها به زبانC صفحه314 : 11-7ادغام kطرفه به طور کلي ادغام kطرفه بر روي mرانش حداکثر نيازمند ‏logK m ‏ گذر بر روي داده ها مي باشد. با افزايش درجه ادغام ،در ميزان ورودي و خروجي صرفه جويي مي شود گروه کامپيوتر ساختمان داده ها به زبانC صفحه315 : 11-7بکارگيري ميانگير براي عمليات موازي اگر kرانش به وسيله يک ادغام kطرفه با هم ادغام شوند ،واضح است که به ح````داقل kميانگير ورودي و ي````ک ميانگير خروجي جهت انجام عمليات ادغام نياز داريم. اگر ورودي ،خروجي و ادغام داخلي به طور موازي وهمزمان انجام ش```ود ، کافي نيست. گروه کامپيوتر ساختمان داده ها به زبانC صفحه316 : 11-7مراحل الگوريتم مربوط به ميانگير مرحله : 1اولين بالک هر يک از kرانش را وارد کرده و kصف پيوندي که هر ک``دام داراي ي``ک بالک داده مي باشد را برقرار ميکنيم. kبالک ورودي باقي مانده را به داخل ي``ک پش``ته پيون``دي قرار داده و بالک هاي ورودي را آزاد کنيد .همچنين ouرا برابر صفر قرار دهيد. مرحله : 2فرض کنيد ] lastkey[iآخرين کليد وارد شده از رانش iباش``د ،فرض کني``د ک``ه nextrunرانش```ي باش```د ک```ه lastkeyح```داقل باش```د .اگر ∞+ ] ≠ lastkey[nextrunباشد ،آنگاه بالک بع``دي از رانش nextrunرا مق``داردهي اوليه کنيد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه317 : 11-7مراحل الگوريتم مربوط به ميانگير مرحله : 3تابع kwaymergeرا براي ادغام رکوردهايي از kصف ورودي و قرار دادن آنها در داخل ميانگير خروجي ouمورد استفاده قرار دهيد .ادغام تا زماني ادامه مي يابد ک```ه يا ميانگير خروجي پر شود و يا رکورد ∞ +داخل ouادغام شود .اگر در طي اين ادغ```ام ،يکي از ميانگيرهاي ورودي ،قبل از اينکه ميانگير خروجي پر شود و يا اينکه ∞ +داخل ouادغام گردد ،خالي شود kwaymerge ،بر روي همان صف به ميانگير بعدي منتق```ل و ميانگير خالي را به پشته ميانگيرهاي خالي برگشت مي دهد .هر چند ،اگر ميانگير ورودي در همان زمان که ميانگير خروجي پر شده يا ∞ +داخل ouادغام گردد ،خالي شود ،آنگاه ميانگير خالي در صف باقي مانده و kwaymergeبه ميانگير بع``دي ب``ر روي ص``ف منتق``ل نمي شود ،مگر اينکه ادغام خاتمه يابد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه318 : 11-7مراحل الگوريتم مربوط به ميانگير مرحله : 4تا کامل شدن عمليات ورودي /خروجي صبر کنيد. مرحله : 5اگر يک ميانگيرورودي خوانده شد ،آنرا ب``راي رانش مناسب ب``ه صف اضافه مي کنيم .رانش بعدي را با اس``تفاده از nextrunتع``يين کنيد به نحوي که ] lastkey[nextrunحداقل گردد. مرحله : 6اگر ∞ ≠ lastkey[nextrun] +باش```د ،آنگ```اه بالک بعدي از رانش nextrunرا خوانده و ميانگير ورودي را آزاد کنيد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه319 : 11-7مراحل الگوريتم مربوط به ميانگير مرحله : 7شروع به نوشتن محتويات ميانگير خروجي ouنماييد ou .را براب```ر با ou -1قرار دهيد( ) ou = ou – 1 مرحله : 8اگر رکورد با کليد ∞ +داخل ميانگير خروجي ادغام نشده باش``د ،ب``ه مرحله 3مراجعه کنيد در غير اين صورت تا تکميل عمليات نوشتن صبر نم``وده و سپس الگوريتم را خاتمه دهيد. گروه کامپيوتر ساختمان داده ها به زبانC صفحه320 :

51,000 تومان