(ِdata structures-java object oriented programming languages)ساختارهای دیتا - محب...

23
مان" یه وترتیب: محب ته بهار سال4931 دی خورشی هجرینشگاه کابل دااینسدهء کمپیوترس دانشک دیتا ساختارهایData Structure ویرایش دوم

Upload: muhibullah-aman

Post on 22-Jan-2017

194 views

Category:

Education


2 download

TRANSCRIPT

Page 1: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

هجری خورشیدی 4931بهار سال تهیه وترتیب: محب هللا "امان"

دانشگاه کابل

دانشکدهء کمپیوترساینس

ساختارهای دیتا

Data Structure دومویرایش

Page 2: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 2 of 23 "تهیه وترتیب: محب هللا "امان

به نام یگانه پروگرامر هستیData Structure Using Java

در ارتباط است و دیتا سترکچر هم در حقیقت یک بخش از سافت ویر انجنیرینگ با تمام ابعاد سافت ویر در زمان ساختن آن سافت

خیرهء دیتا را در حافظهء اصلی کمپیوتر ذبارت دیگر روش های وبا به ع ویر انجنیرینگ بوده که از ساختار داخلی دیتا بحث میکند.

(RAM( به نام ساختار دیتا )Data Structure).یاد میکنند

دیتا چیست؟

؛ تجزیه وتحلیل انسانها و یاپراسس ماشینها آماده میباشد. communicationعبارت از معلومات ارایه شدهء است که برای

دیتا سترکچر به ما هدایت میکند که :

.چگونه دیتا باید ذخیره شود

چگونه بایدorganize گردد

چگونهRetrieve .شود

چگونهrepresent .گردد

د ، قابل استفاده ومؤثر بدست آید که باعث ضایع شدن وقت پراسسر وخرابی دیتا نگردد. دیتا سترکچر برای تا یک سافت ویر مفی

organize ( کردن دیتا در حافظهء اصلیRAM ) از ساختارهایی مانندArray ،Stack ،Queue ،Linked List ،Graph ،

Trees وغیره استفاده میکنند که هرساختار مذکور باالیData Sorting ،Data Searching ،Hash table ،Graph

algorithm ،Data Compressing وغیرهapply .میگردد

فواید دیتا سترکچر

Ease of Use یعنی استفاده از دیتا سترکچر پیچیدگی های یک سافت ویر را کم ساخته وسافت ویر مذکوررا آسان قابل :

استفاده می سازد. Speed چون با استفاده از دیتا سترکچر دیتا به طور بسیار منظم در میموری کمپیوتر :organize میگردد بنأ وقت و

سرعت پراسسر ضایع نگردیده و سرعت باالمیرود. Efficiency :.یعنی استفاده از دیتا سترکچر در مؤثریت یک پروگرام به خاطر هدفی که ساخته میشود کمک میکند

Efficient Use of Memory : آشنایی با روش های متفاوت ذخیره و نمایش دیتا درRAM باعث میگردد که ما طوری

ا با بهترین روش دسترسی نیاز داشته باشد.دیتا را در حافظه ذخیره کنیم که کمترین حافظه ر Reusability( تمام ساختارها قابلیت بار بار استفاده شدن :reusabilityرا دارا می باشد که ) باعث سهولت در ساختن

پروگرام ها می شود.

Type of Operation زمانیکه ما از ساختارهای ستاندارد برای ساختن پروگرام ها استفاده میکنیم در ساختار های مذکور :

میتوانند انواع مختلف عملیات تطبیق گردد.

انواع دیتا سترکچر: دیتا سترکچر به دونوع می باشد.

Primitive Structure عبارت از ساختارهای :built in می باشد که هر کدام تنهاSingle value را ذخیره میکند. مانند

int, char, String, double, float, Boolean .وغیره

Non Primitive Structure چندین : از مجموعهءPrimitive Data Type تشکیل میگردد که هرکدام می تواند چندین

قیمت را درخود تحت یک نام ذخیره نماید. واین نوع ساختارها به نوبت خود به دوبخش تقسیم میگردد که عبارتند از :

Linear Data Structureذخیره کل خطی )مسلسل( در حافظهء کمپیوتر: این نوع ساختار ها دیتا را به ش

وغیره. Array ،stack ،Queueمیکند. مانند

Non-Linear Data Structure ذخیره میکند مانند گراف ها، در حافظهء کمپیوتر: دیتارا به اشکال مختلف

چارت ها وغیره

Page 3: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 3 of 23 "تهیه وترتیب: محب هللا "امان

Object Oriented Design یعنی ( می باشد.Object-Oriented Programming languageقسمیکه میدانیم جاوا یکی ازلسان های پروگرام نویسی شی گرا )

( نرم behavior( و اعمال )attributesدراین نوع لسان های پروگرام نویسی اوال نقشه یا طرح کار مشخص شده وتمام مشخصات )

می توانند از نقشه و طرح کار مذکور استفاده نموده و تمام خواص ومشخصات را objectافزار درآن معرفی میگردد و سپس چندین

د بگیرند.که در طرح ذکر شده را بخو

به ما اجازه میدهد که دیتا و عملیات مربوطهء آنرا در قالب کالس ها طرح نموده و OOA (object oriented Approach)یعنی

بنأ دو جزء اساسی لسان های پروگرام نویسی شی گرا عبارتند از: بسازیم. objectاز آن میتوانیم بی نهایت

Classes ویک طرح کار انجام دهند.یک نرم افزار باید آنرا داشته وهای می باشند که : مجموعهء از مشخصات و فنکشن

(blue print ویا نمونه برای )Object .ها می باشد تا تمام خصوصیات شانرا از کالس بگیرند

Object قلم ، کمپیوتر( وغیر قابل لمس )زمان، فشار وغیره( می باشد )کتاب: درلغت عبارت از بعضی اشیای قابل لمس ،

ها به بخش از نرم افزار گفته می شوند که میتود ها و مشخصات Objectو دراصطالح لسان های پروگرام نویسی ،

شامل سه بخش است. Objectمعرفی شده در کالس هارا تطبیق می نمایند. وهر

o Attribute

o Behavior

o Unique Identity

های آن عبارت از رنگ ؛ سایز ؛ نوع ، و سال تولید آن می باشد attributeاست که Objectبطور مثال: موتر یک

های آن عبارت از سرعت گرفتن ، تیل مصرف کردن، توقف نمودن ، سرعت گرفتن methodیا behaviorدرحالیکه

موتر است. آن هم نمبر پلیت همان unique Identityو ..... می باشد.

Object Oriented Programming Language از سه میکانیزم به منظور ساده سازی مادل ها استفاده میکنند.که به نام اصول

لسان های پروگرام نویسی شی گرا نامیده می شود. وعبارتند از:

4. Inheritance: بعضی از کالس ها مشخصات وbehavior از کالس های دیگر را به ارث میگیرند که این شانرا

مشترک behaviorو attributeیعنی ممکن دو ویا چندین کالس دارای چندین یادمیگردد. inheritanceخاصیت به نام

باشند که این اجزای مشترک در یکی از کالس ها معرفی می شوند وسایر کالس ها این خصوصیات را از کالس مذکور به

Parentویا super class ،base classرند. و کالس که خصوصیات مشترک درآن معرفی میگردند به نام ارث میگی

class یاد میگردد درحالیکه سایر کالس ها به نامChild class ،sub class .یادمیگردند

، قد ، وزن وهمچنین مثال: سه کالس انجنیر ، دکتور ومعلم هر سه دارای بعضی مشخصات مشترک از قبیل نام ؛ عمر

های مشترک مانند خوردن ، آشامیدن ، خواب کردن ، مطالعه کردن می باشند. بنأ به خاطر سهولیت یک behaviorدارای

می سازیم که این خصوصیات و افعال مشترک را در آن اضافه میکنیم. ودرین حالت سه کالس Humanکالس تحت نام

میتوانیم extends) درجاوا با استعمال کلمهء کلیدی .ودش را نیز داشته باشندیات خاص خفوق الذکر می توانند خصوص

یک کالس را وارث کالس دیگرمعرفی کنیم(.

2. Encapsulation: کردن عبارت ازپنهانAttribute ها و behavior هایی بی مورد یکObject وبروز دادن و آشکار

شخصه ها و متود های زیادی باشد دارای م objectبه آن نیاز است. یعنی ممکن یک درحال حاضر ساختن مشخصات که

نمایند.ی ماز مشخصات و متود های مربوط به همان حالت استفاده نظربه حاالت مختلف ولی

زمانیکه در دانشگاه کابل های مختلفی می باشم. چون Behaviorدارای مشخصات و Objectبطور مثال من منحیث یک

)اسم محصل ، اسم پدر محصل ، تخلص محصل؛ درس خواندن ( م و مشخصات محصل بودنم ثبت شده اممیشوم با نا داخل

ثبت شده درعین حال در یکی از مکاتب با نام ومشخصات معلمی ) اسم معلم ، اسم پدر معلم ؛ تخلص معلم ، درس دادن (

دنم و یااینکه کدام مضامینی راتدریس میکنم کار نداشته . یعنی هیچ وقتی دانشگاه کابل به مشخصات همچون معلم بوام

ودرمقابل مکتب هم به محصل بودنم واینکه درکدام مضامین چقدر نمره دارم کاری ندارد.

9. Polymorphism :( مشخصاتattributes ویا )Behavior هایی که تحت نام مشابه بوده ولی به اشکال مختلفی عمل

بطور مثال که سهولیات زیادی را در برنامه نویسی معاصر به بار آورده است.یادمیگردند.میکنند به نام پولی مارفیسم

است ولی میتواند دارای چندین حالت باشد میتواند الماس باشد ویا ذغال. Objectمیدانیم که کاربن یک

Page 4: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 4 of 23 "تهیه وترتیب: محب هللا "امان

اجازه دهد تا این مشخصات userان به مشخصات کمپیوتر های مختلفی را ذخیره نماید وهمچنطور مثال : پروگرام را می نویسیم که

رادیده و تغییر بدهد.

که اضافه میشود مشخصات خودرا از این کالس بگیرد. PCمی سازیم تا هر PCsRecordاوال یک کالس به نام

میتوانیم بی نهایت که درآن معرفی شده است. Objectمی باشد که تمام وخواص مشخصات blue printفوق صرف یک کالس

Object از کالس فوق بسازیم که هرobject این کالس تمام مشخصات وmethod بتهمیگیرد. ال معرفی شده را بخودهای

Object متود ها همیشه داخلmain کالس دیگری را می سازیم که دارای . وحال معرفی میگرددmain method بوده و در آن

object .هارا از نوع این کالس طور ذیل معرفی میکنیم

Page 5: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 5 of 23 "تهیه وترتیب: محب هللا "امان

فوق را به شکل ذیل مالحظه خواهید کرد. نتیجهء پروگرام

نمایید. codingمثال دوم: کالس ذیل را

Date

Day Month Year Min Year

Return Day() Return Month() Return Year() Return Serial of Day()

Page 6: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 6 of 23 "تهیه وترتیب: محب هللا "امان

Array یاد arrayلیست و یامجموعهء از عناصر ومتحولین همنوع را بانام مشابه که درمیموری به شکل مسلسل ذخیره میگردد به نام

arrayمیگردند. باالی accessها از یک دیگر فرق و indexبا استفاده از بوده و Fixed sizeند. که این متحولین مشابه میکن

مطابق به Arrayوغیره را انجام دهیم. عناصر insertion ،Deletion, sorting, searchingاز قبیل میتوانیم عملیات مختلفی را

شکل ذیل در حافظه دخیره میگردند.

20 30 22 14 67 88 65 33 98 72

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

می باشد. Arrayنشاندهندهء اندیکس هر حجره []می باشد که aعبارت از Arrayدرحالت فوق نام

Page 7: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 7 of 23 "تهیه وترتیب: محب هللا "امان

arrayفواید Array ( یک ساختارdata structureساده بوده که به آسانی معرفی گردیده و عملیات مختلفی را ) support میکند. وهمچنین

elementکردن دیتارا بسیار سریع ساخته است زیرا که ما میتوانیم همزمان تمام accessپراسهء arrayاستفاده از اندیکس ها در

کنیم. accessهای شان indexرا به بسیار آسانی توسط arrayهایی

Arrayنواقص Array دارای نواقص نیز میباشد از جمله مهمترین نقص آنfixed size بودن آن است. یعنی ما مجبور استیم کهarray میشه را ه

اضافه تراز مقدار موقعیت مورد نیاز معرفی کنیم ولو اینکه نیازی نداشته باشیم که این عمل باعث ضیاع حافظه میگردد. معموال

هایی تنظیم arrayدر insertionمیباشد بسیار پایین بوده وبه همین ترتیب unsortedهای که به شکل arrayدر search سرعت

کار دشوار است. deletionعملیهء unsorted arrayوهم در sorted arrayدرحالیکه هم در ت است.( بسیار سخsortedشده )

Arrayطرزمعرفی DataType ArrayName[] = new DataType[ArraySize];

String name[]=new String[50];

int list[]=new int[15];

List[5]=70;

List[10]=list[5]+100;

System.out.println(“Index 44”+list[44]);

بسازیم. ها ویا فلوچارت اوال باید الگوریتم وکودنویسیو تعیین روش ومراحل کار ات برای ساده شدن موضوع

الگوریتم چیست؟

در اصل از یاد میگردد و algorithmدلخواه میگردند به نام outputهایی مسلسل که منجربه بدست آمدن activityمجموعهء از

کلمهء )الخوارزم( گرفته شده که منسوب به محمد بن موسی خوارزمی است. ویا به عبارت دیگر مراحل تکمیل نمودن یک پروگرام

روی ورق بیان میشود به نام الگوریتم یاد میگردد. مثال: stepبه stepکه به شکل

Step1: start

Step2: Declare

Step3:initialize

Step4:increment

step5:Display

Step6:stop

فلوچارت چیست؟

وبا استفاده از چارت ها نمایش میدهد. که درین دیاگرام شروع visualدیاگرام است که مراحل تکمیل شدن یک پروگرام را به شکل

وختم کار توسط بیضوی نشان داده میشود قرار شکل ذیل:

Page 8: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 8 of 23 "تهیه وترتیب: محب هللا "امان

تمام شاگردان را ثبت کرده و سپس این نام و نمرات را نشان دهد. طور مثال: پروگرام را می نویسیم که نام و نمرات

الگوریتم:

دوarray .معرفی کنیم

نام و نمرات را داخلarray .به ثبت برساند

.نام ونمرات را نمایش دهد

import java.util.Scanner;

public class List {

int size;

int score[];

public List(int s) {

size = s;

score = new int [size];

}

Scanner keyboard = new Scanner(System.in);

public void insert(int n) {

for(int i=0; i<n; i++)

score[i]=keyboard.nextInt();

}

public void display(int m) {

Page 9: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 9 of 23 "تهیه وترتیب: محب هللا "امان

for(int i=0; i<m; i++)

System.out.println(score[i]);

}

}

کالس دومی

public class arrayapp {

public static void main(String[] args) {

List SwE5 = new List(45);

List IS5 = new List (55);

List IT5 = new List(60);

SwE5.insert(45);

SwE5.display(45);

IS5.insert(55);

IS5.display(55);

IT5.insert(60);

IT5.display(60);

} }

Searching Algorithm اهمیت زیاد دارد: array( در elementدوروش برای جستجو کردن یک عنصر )

Linear Search

Binary Search

مقایسه میگردد ودرصورت مساوی بودن نتیجه را در arrayعنصر خواسته شده با تک تک عناصر موجود در linear searchدر

می یابد.

public student find(String searchname) {

int j;

for(j=0; j<nelems; j++)

if( a[j] = searchname)

break;

if( j == nelems)

return null;

else

return a[j];

}

شده صورت میگیرد اوال اندیکس وسطی را دریافت نموده و عناصر خواسته شده sortکه عموما در لیست های binary searchدر

را با عنصر وسط مقایسه میکند. درصورتیکه بزرگ تر از عنصر وسط بود کوچک تر از عنصر وسط را مدنظر نگرفته و عین

پراسه را باالی عناصر بزرگ تر از عنصر وسط اجرا می کند.

Page 10: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 10 of 23 "تهیه وترتیب: محب هللا "امان

public boolean find(int searchkey) {

int lowerBound = 0;

int upperBound = n-1;

int middle=0;

while(true) {

middle = (lowerBound + upperBound) / 2;

if (student[middle] == searchkey)

return true;

else if(lowerBound>upperBound)

return false;

else {

if(student[middle] < searchkey)

lowerBound = middle + 1;

else

upperBound = middle - 1;

} } }

Page 11: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 11 of 23 "تهیه وترتیب: محب هللا "امان

Stack Stack ( درلغت به معنی ذخیره گاه بوده وعبارت از ساختار دیتاdata structure بوده )از مجموعهء کهitem هاییorder شده

ویا LIFO (Last In First Out)تنها از یک انجام آن صورت میگیرد. و به نام deletionو insertionکه طوری تشکیل شده باشد

FILO (First In Last Out) .کی رفتن یبطور مثال: ظرف های کفتریا را فرض کنید که سربسر چیده شده اند وبرای گ هم یاد میگردد

ازظروف ، ظرف راکه در باالی همه ظرفها قرار دارد میگیریم ونمیتوانیم ظرف پاییننی را بگیریم. تازمانیکه ظروف فوقانی رادور

نکرده باشیم.

ویا فرض کنید که بلوز دلخواه آبی تان زیر چند بلوز دیگری به رنگ های سرخ ، سفید ، سیا قرار گرفته و شما بخاطر بدست آورن

بلوز دلخواه تان اوال باید بلوز های دیگر را در طرف دیگر چیده و سپس بلوز آبی را بدست بیاورید. )فقط یک مثال است.(

عبارت از ساختار دیتای میباشدکه پراسس دیتا تنها از قسمت فوقانی آن امکان پذیر stackدرروشنی مثال های فوق گفته میتوانیم

کردن عناصر تنها به قسمت فوقانی removeکردن عناصر ویا accessر است که درآن به منظور است.وبا به عبارت دیگر ساختا

آن مراجعه مینماییم.

عملیات محدودی را نسبت به سایر ساختار ها انجام داده میتواند زیراکه درآن صرف میتوانیم عناصر را stackگفته میتوانیم که

insert وremove کنیم. کهInsert نمودنvalue هارا درstack به نامpush وگرفتنvalue هارا به نامpop .که یاد میکنند

وهمچنان به یک عملیهء دیگری نیاز داریم که خالی بودن و یا صورت میگیرد. (top of stack)هردوعملیه از قسمت فوقانی

مینامیم. isEmptyرا بررسی کند که دراینجا آنرا stackپربودن

Page 12: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 12 of 23 "تهیه وترتیب: محب هللا "امان

initializeبه صفر constructorرا با تعریف stackعناصر خالی میباشد و ما میتوانیم stackا اجراشدن پروگرام ها طور عموم ب

اشغال شده باشد و درقسمت فوقانی stackیادمیکنند و زمانیکه حجره های stack underflowرابه نام stackکنیم. که این حالت

را میتوان با تعریف متود exceptionیادمیکنند. که این حالت stack overflowنداشته باشد این حالت را به نام pushجایی برای

( کرد.handleکنترول ) ()isFullدیگری به نام

webدر back، دکمهء Web Browsers ،Undo mechanism ،paste mechanismدرمواردی مهم از قبیل stackاز

browser ها وwindow وصدها مورد دیگر استفاده ها ، نگهداشتن مسیر زمانیکه در گراف ها بین عناصر مختلف میرویم

میگردد.

رانشان میدهد. Stackپروگرام ذیل شکل ساده وابتدایی استفاده از

یم.را ساخته و از آن استفاده میکن Stackکالس object( را ساخته و درآن main methodو حال متود اصلی )

Page 13: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 13 of 23 "تهیه وترتیب: محب هللا "امان

Balanced Parentheses

، بررسی عملیات ریاضیکی وقوس ها می باشد بدون شک دراکثر عملیات ریاضیکی قوس ها بکار stackیکی از موارد استفاده از

برده میشوند و آغاز و پایان بجای قوس ها در حل مسایل زیاد کمک میکند. لذا درین بخش پروگرام را می سازیم تا یک افاده الجبری

را گرفته و بررسی کند که درست است ویاخیر؟

ال کالس را دیزاین میکنیم که بجابودن قوس هارا بررسی کند.بدین منظور او

Page 14: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 14 of 23 "تهیه وترتیب: محب هللا "امان

را که درست بودن قوس ها را چیک میکند به ادامه دستورهای فوق ، نوشته میکنیم. isBalancedمتود وحال

کالس که قبال ذکر شد با متود ها و عملیات مربوطهء آن مینویسیم.راهمانند stackوحال کالس

Page 15: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 15 of 23 "تهیه وترتیب: محب هللا "امان

Queue شده باشد اولین بار پراسس واردکه اولین بار itemدرین ساختار که وتنها با این تفاوت stackتار دیگر است که تقریبا مشابه به ساخ

باالی آن تطبیق FIFOاصلی این ساختار هم در صف قرار دادن پراسه ها ویا دیتا ها تا روش وهدف . (First in First Out)میشود

قرار دارند شخصی که اولین بار درصف قرار گرفته اولین بار از صف (Queueدرشکل ذیل چندین نفر در صف )مثال گردد.

ن بار مورد پراسس قرار میگیرد.خارج میشود و به همین ترتیب شخصی که آخرین بار به صف پیوسته است آخری

Page 16: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 16 of 23 "تهیه وترتیب: محب هللا "امان

الت زیادی واقع میشود که اشیا ویا اشخاص در صف استفاده های زیادی به عمل می آید در زندگی روزمره حا Queueساختار از

(queue قرار میگیرند. مثال )ما با استفاده از ساختار . که توسط محافظان ، وغیره ازرسیبرای بصف ، صف نانواییQueue

بسیار به آسانی میتوانیم حاالت مذکوررا مادلینگ کنیم.

printمثال میتوانیم آنهارا کنترول کنیم. queueدرسیستم های کمپیوتری نیز بسیار حاالت پیش میشود که تنها با استفاده از مچنان ه

درین حاالت فایل که اول برای چاپ شدن آمده اول باید چاپ شده وسپس به فایل شدن فایل ها ، تایپ حروف ازکیبورد وغیره. یعنی

همین ترتیب دکمهء که از کیبورد اول فشارداده میشود باید اوال پراسس شده و سپس درروی صفحه نمایش داده شود.وبه دومی برود.

می باشد. last=-1و first=0در ابتدا استفاده میکنیم که lastو first( ما از دومتحول به نام های queueکنترول قطار )برای

ثال:م

class Queue {

private int maxSize;

private long[] queArray;

private int first;

private int last;

private int nItems;

public Queue(int s) {

maxSize = s;

queArray = new long[maxSize];

first = 0;

last= -1;

nItems = 0;

}

public void insert(long j) {

if(last == maxSize - 1)

last = -1;

queArray[++last] = j;

Page 17: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 17 of 23 "تهیه وترتیب: محب هللا "امان

nItems++;

}

public long remove() {

long temp = queArray[first++];

if(first == maxSize)

first = 0;

nItems--;

return temp;

}

public long peekFirst() {

return queArray[first];

}

public boolean isEmpty() {

return (nItems ==0);

}

public boolean isFull() {

return (nItems==maxSize);

}

public int Size() {

return nItems;

}

public static void main(String[] args) {

Queue theQueue = new Queue(5);

theQueue.insert(10);

theQueue.insert(20);

theQueue.insert(30);

theQueue.insert(40);

theQueue.remove();

theQueue.remove();

theQueue.remove();

theQueue.insert(50);

theQueue.insert(60);

theQueue.insert(70);

theQueue.insert(80);

while( !theQueue.isEmpty() ) {

long n = theQueue.remove();

System.out.print(n);

System.out.print(" ");

}

System.out.println(" ");

}

}

Page 18: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 18 of 23 "تهیه وترتیب: محب هللا "امان

Greedy Algorithm که در هر مرحلهء پراسس بهترین حالت را انتخاب نموده وبه هیچ وجه فکر مراحل بعدی پراسس را نمیکند. ازاینرو الگوریتم است

بطور مثال اپلیکیشن ( یاد میشوند. این نوع الگوریتم ها موارد استعمال زیاد داشته greedy algorithmبه نام الگوریتم های حریص )

استفاده میکنند: greedy algorithmهای ذیل به منظور حل پرابلم ها از

MST (Minimum Spanning Tree)

OSPF (Open Shortest Path First)

File Compression & Hoffman Algorithm

A simple scheduling algorithm

Greedy algorithm در ساختار های مانندgraph وTree .میتواند تطبیق شود

Graph ( می باشد که در مسایل زیاد استفاده میگردد و برخالف سایر data structureیکی ازروش های ذخیره دیتا در میموری )

یعنی قسمت های میموری که درآن عناصر جا میکند. representدر میموری non linearسترکچرهای که خواندیم دیتارا به شکل

میگیرد باالی یک خط مستقیم وبه شکل پیوسته ذخیره نگردیده بلکه درقسمت های مختلف از حافظه وبه شکل غیر مسلسل ثبت شده

دارند.ولی عناصر باهم دیگر شان یا با استفاده از لینک مستقیم ویاهم از طریق عناصر همجوار شان ار تباط

nodeها )لینک ها(ساخته شده است و این edgeها )عناصر ( و nodeپس گفته میتوانیم که گراف ساختار است که از مجموعهء

حذف شود طوریکه هر binary treeاز parentو childاگر اصطالحات ویا ارتباط دارند. ها edgeتوسط ها بایکدیگر شان

childساختار است که هر binary treeدیگر وصل شود ساختار ذیل بنام گراف یاد میگردد) عنصر بتواند به هریکی از عناصر

(.ندداشته میتوا childو چندین parentتنها یک

Vertices or Nodes

Node ها ویا عناصر هرکدام میتواند موقعیت های از حافظه باشد که هر کدام آن یکtask رانشان میدهد. و این عناصر اکثرا

بسازیم objectیعنی ما باید بخاطر عناصر کالس هارا بسازیم و سپس از آن در کالس های جاوا تمثیل شود. objectمنحیث

معرفی میگردد. nodeمنحیث یک objectوهر

Edges مجموعهء از الین های که دو :node را باهم وصل میکند به نامedge دد. درصورتیکه یاد میگرedge ها جهت دار

(directed edge باشند نشان می دهد که کدام )task ویاnode قبل ازtask .دیگری پراسس شود

Adjacency vertices دوعنصر زمانی همجوار گفته میشوند که توسط یک :edge .به شکل مستقیم ارتباط داشته باشد

Path مجموعه از :vertices های متصل که دوnode را باهم وصل میسازد به نامpath یاد میگردد. مثال درشکل ذیل ارتباط بین

نامیده میشود. pathکه این مسیر به نام صورت گرفته Bو Dبا استفاده از عناصر متصل به هم Aو Gعناصر

Page 19: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 19 of 23 "تهیه وترتیب: محب هللا "امان

Completed or connected Graph گراف ها زمانی :completed نامیده میشوند که هرnode به تمامnode های دیگر

های جداگانه ارتباط داشته باشند.مثال: edgesدرگراف با استفاده از

Directed Graph

ها بین عناصر مشخص است. وجهات نشان میدهد که کدام عنصر قبل از عنصر دیگری تحت edgeگراف های اند که جهات

پراسس قرارگیرد.

Undirected Graphهت بین عناصر مشخص نگردیده باشد.: گراف های اند که ج

Weighted Graph( گراف های که درآن لینک ها :edges دارای وزن باشد به نام )weighted Graph یاد میگردد.وزن میتواند

مثال:فاصله ، قیمت وغیره باشد.

)شکل فوق یک مثال است تا گراف های وزن دار واضح شود موقعیت والیات منطقی نیست(

Page 20: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 20 of 23 "تهیه وترتیب: محب هللا "امان

ونمایش گراف درمیموریمعرفی

حال به چگونگی معرفی هر یک از اجزای فوق در پروگرام ها می پردازیم.

ده شود. واز طرف دیگر تمام عناصر دارای ها نمایش دا objectهمانطوریکه قبال ذکر کردیم عناصر گراف بهتر است با استفاده از

معرفی میگردد. واضح است که اوال باید یک کالس را داشته arrayها به شکل objectخواص و مشخصات مشابه می باشند بناء

هارا معرفی کنیم. بناء کالسی را برای عناصر طور ذیل دیزاین میکنیم. objectباشیم تا بتوانیم از آن

دو روش ذیل استفاده میگردد.( ازedgesبرای تمثیل راه ها )

Adjacency Matrix یا(array )های دوبعدی

Adjacency list

Adjacency matrix درحقیقتtwo dimensional Array می باشد که هر جزء آن مشخص می کند که آیا بین دو عنصر راه

NxNها در میموری باید edgeعنصر باشد درینصورت ما برای تمثیل کامل Nوجود دارد ویاخیر.ودرصورتیکه گراف دارای

dimensional array بطور مثال گراف ذیل راکه دارای چهار عنصر میباشد مدنظر گرفته و با استفاده از م.را معرفی نمایی

adjacency matrix .طوری ذیل ارتباط عناصر را نشان میدهیم

A B C D

A 0 1 1 1

B 1 0 0 1

C 1 0 0 0

D 1 1 0 0

Page 21: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 21 of 23 "تهیه وترتیب: محب هللا "امان

بطور مثال: میخواهیم چند شهر مختلف افغانستان را در گراف شرح دهیم.

اوال کالس را میسازیم که خصوصیات عناصر را درخود نگهدارد و عناصر در این گراف شهر ها می باشد که دارای بناء

خصوصیات زیاد می باشدولی ما تنها به دو مشخصه آن )نام شهر( و )آیا شهر دیده شده ( اکتفا میکنیم.

هارا تمثیل نماید. edgesاستفاده نموده و Verticesمیسازیم که از کالس graphوحال کالس دیگری را به نام

درین مرحله کالس را میسازیم که شهرها و راهارا درآن اضافه کنیم.

Page 22: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 22 of 23 "تهیه وترتیب: محب هللا "امان

Search in Graphجستجو در گراف های Objectیکی از عملیات بسیار اساسی که میتواند توسط گراف ارایه شود جستجو دربین عناصر است که عناصر میشود شامل

ر ها باهم واینکه کدام روت مختلف باشد مثال عناصر میتواند روتر را درشبکه تمثیل کند که جستجوی روتر ها یعنی جستجوی شبکه ها

searchingکه با استفاده از . به همین ترتیب عناصر میتواند شهرها را در یک نقشه تمثیل کند. ارتباط مستقیم )همجوار( دارند

که آیا بین دو شهر راه موجود است ویاخیر؟ میتوانیم دریابیم

د از:که عبارتن برای جستجوی یک عنصر باید گراف بطور مکمل دیده شود وبرای این کار گراف از دو ستراتیژی استفاده میکند.

DFS (Depth-First Search)

BFS (Breadth-First Search)

استفاده میکند درحالیکه Stackبرای اجرای عملیه از DFSکند ولی هردو روش ذیل تمام عناصر موجود یک گراف را بررسی می

BFS ازQueue .استفاده میکند

Page 23: (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا - محب الله امان

Page 23 of 23 "تهیه وترتیب: محب هللا "امان

DFS (Depth-First Search) را Aمثال که باید ازآن جستجو شروع( nodeروش جستجو در گراف ، طوری صورت میگیرد که اوال یک نقطهء آغاز )دراین

فته ر Bبه اولین همسایه وسپس نموده و نشانی میکنیم. visitو آنرا Bمثال رفته A همجوار nodeسپس به اولین انتخاب نموده و

زمانیکه به میکنیم. تا (pushداخل ) Stuckهارا در nodeدرهرمرحله و هیم.ترتیب ادامه میدونشانی میکنیم. وبدین visitوآنرا

های همجوار جستجو شود. Nodeتمام نموده و به عقب بیاییم. تا popهارا nodeرسیدیم nodeآخرین