data structure in c

80
ها : داده مان ت خ سا( ورت ص ه ب ي ي ا ه ت ك! س داده ي مان ت خ ا ر س هD,F,R ه در ا;pma&ن د ك) اس ت ي م) D ( ه ن م ه دا وع م ج مDomain ،) F ( ع ب وا ت وعه م ج مFunctions و) R ( . ت س داده ا مان ت خر سا ب م ك حا ن ي ي وا ق وعه م ج مRules ) ال) ث م وان ن ع ه ب ه وع م ج م م ي ر ي گ ت رN ظ ن را در ره اي ي ج ن گاه ر) روش ف! ك ي هاي ف ص داده مان ت خ ا م س ي ه وا خ نر گ اD ي فر مع ر ب ر ورت ص ه ب ود.) ش ي مD= { ! اك) وسc ت ف ص، ي ت) س هدا ب واد م ف ص, …} : د ار ثg ت ار ث ع ود) ش ي م هg ن ف ر گ ه كار داده ب مان ت خ سا ن ي كه در ا ي ع ب وا ت ل ق حدا1 ) ع ب ا تCreat ف ص اد ج ن ا راي ب2 ) ع ب ا تIsfull ف ص ودن ترc ب ص ي خ) ش ت راي ب3 ) ع ب ا تAdd ف ص ه د ب دت رد ح ف! ك ي ردن ك ه اف اض راي ب4 ) ع ب ا تis Empty ف ص ودن ت ي ل ا ص ح ي خ) ش ت ت ه ج5 ) ع ب ا تDelete ف ص ارر ف ب! ك ي ردن ك ارج ح راي ب ردد: گ ي م ن ي ث ع بر ب ر ورت ص ه ع ب ب وا ت ن يرد ا ب ه و ن م داCreat (name, max size ) : : = Queue Is full (name,max size) : : = Boolean Add (item,queue) : : = Queue Is Empty (name): : = Boolean Delete (queue ) : : = Item مه ل ك م ي ه دار وج تQueue د دارد و و ج گاه و) روش ف ن ي كه در ا ت س ا هاي ف صام م ت وعه م ج مqueue ه ب ف ص! ك ي. ت سر ا ب ر حg ت ل م ا وار ل ف صً لا) ث م وص ص خ ور ط ن مي هItem و ت س ا ف ص ان رت ي) ش م ام م ت ه وع م ج مitem دي م ح ا اي ا;pma&قً لا) ث م وص ص خ ه رد ب ف! ك ي. ت س ا1

Upload: shekharchndr

Post on 23-Jun-2015

419 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Data Structure in C

داده‌ها : ساختمانصورت ) به تايي سه يك داده ساختمان آن ( D,F,Rهر در كه مجموعه Dمي‌باشد

)F،( Domainدامنه) توابع ساختمان Rو( Functionsمجموعه بر حاكم قوانين مجموعه( . است (Rulesداده

مثال عنوان بهبگيريم نظر در را اي زنجيره فروشگاه يك صفهاي داده ساختمان بخواهيم اگر

. Dمجموعه مي‌شود معرفي زير صورت بهD= { پوشاك بهداشتي ، صف مواد صف , …}

: از عبارتند مي‌شود گرفته كار به داده ساختمان اين در كه توابعي حداقلصف Creatتابع (1 ايجاد برايصف Isfullتابع (2 بودن پر تشخيص برايصف Addتابع (3 به جديد فرد يك كردن اضافه برايصف is Emptyتابع (4 بودن خالي تشخيص جهتصف Deleteتابع (5 از نفر يك كردن خارج براي

: مي‌گردد تعيين زير صورت به توابع اين برد و دامنهCreat )name, max size ( : : = QueueIs full )name,max size( : : = BooleanAdd )item,queue( : : = QueueIs Empty )name(: : = BooleanDelete )queue ( : : = Item

كلمه داريم وجود Queueتوجه فروشگاه اين در كه است هاي صف تمام مجموعهو است .queueدارد التحرير لوازم صف C مثًال خصوص به صف يك

طور و Itemهمين است صف مشتريان تمام item Cمجموعه مثًال خصوص به فرد يك. است احمدي آقاي

قوانين : از عبارتند حكمفرماست صف داده ساختمان بر كه قوانيني

1.. كرد حذف فردي توان نمي خالي صف از2.. كرد اضافه فردي توان نمي پرشده كه صفي به3.. شود مي خارج صف از نفر اولين همواره4.. شود مي اضافه صف انتهاي به جديد فرد همواره

تابع: تذكر C مثًال كنيم اضافه داده ساختمان اين به نيز ديگري توابع است Mergeممكنتابع يا يكديگر در صف دو ادغام و Splitبراي كوتاهتر صف دو به صف يك شكاف براي

كنيم . تعيين قانون توانيم مي نيز توابع اين براي

: الگوريتم‌ها مقايسه

: كرد مقايسه مي‌توان جهت دو از را مختلف هاي الگوريتم . هر نياز مورد حافظة ها الگوريتم اجراي سرعت ديگري و مصرفي حافظه يكي

صحيح متغير هر دانيم مي C مثًال كرد تعيين توان مي دقت به را ، هر 2الگوريتم و بايتاعشاري حرفي 4متغير يا كاراكتري متغير هر و .1بايت گيرد مي حافظه بايت

مي ترتيب بدين ، دانيم مي نيز را ها العمل دستور براي نياز مورد حافظه اينكه ضمندو بين و كند مي مصرف حافظه بايت چند الگوريتم يك كه كرد تعيين بدقت توانمي مصرف كمتري حافظه كه را آن توانيم مي دهند مي انجام يكساني كار كه الگوريتم

نداريم چنداني توجه ها الگوريتم مصرفي حافظه به درس اين در اما كنيم، تعيين كندسادگي به حافظه افزايش اينكه ضمن است زياد بسيار كنوني كامپيوترهاي حافظه زيرا

) باشد ) مي ارزان حافظه است پذير امكان

1

Page 2: Data Structure in C

مهم‌تر نكته است: اما بديهي ، آنهاست سرعت بررسي ها الگوريتم مقايسه هنگاماست . . تر سريع الگوريتم آن باشد كمتر الگوريتم يك در ها العمل دستور تعداد هرچه

اين به که كند تعيين را ها العمل دستور تعداد يا شمار تا داريم نيازي ابزاري بنابراينتابع C اصطًالحا کنيم .Oابزار مي اطًالق

تابع رياضي و دقيق است :Oتعريف زير صورت به

دنباله ( اگر ( بي مرتبه گوئيم مي گاه آن برود نهايت بي سمت به باشد واگرا

دنباله مرتبة مانند آن مانند نهايت مثبتي عدد اگر به Kاست، باشد داشته وجودكه طوري

است : زير شکل به رود مي كار به مرتبه براي كه نمادي

دنباله : مثال .مرتبه كنيد تعيين را

P+1=3 P=2

كنكور مثال. كنيد تعيين را زير برنامه قطعه شمار يا اجرا زمان

X=0 ; For ) i=1 ; i <= n ; i++ ( For ) j=1 ; j <= n ; j++ ( { X= X +1; Y = Z*X; Z=Y-X; }

Printf ) "%d%d%d", X , Y , Z (;.:مثال كنيد تعيين را زير برنامه اجرا زمان

For ) i=1 ; i <= n ; i++ ( For ) j=1 ; j <= i ; j++ ( X++;

مهم هاي فرمول. باشد مي مفيد بسيار اجرا زمان پيداكردن مورد در زير روابط

2

Page 3: Data Structure in C

.

.

امتحان سوال مثالFor ) i=1 ; i <= n ; i++ ( For ) j=1 ; j <= i ; j++ ( For ) k=1 ; k <= i * j ; k++( X++;

ها ) (Arraysآرايهبا كه جا هر باشند، مي جنس يك از كه است حافظه از متوالي خانه تعدادي آرايه هر

آرايه C مثًال كنيم استفاده آرايه از توانيم مي باشيم داشته كار سرو مرتب هاي دادهداراي هفته مي 7روزهاي ختم جمعه به و شود مي شروع شنبه از كه است عنصر

باشد . مي شکل اين به دانشگاه در فرد يك تحصيل هاي سال آرايه طور همين گرددStructure array is Objects : A set of pairs < index , value > where for each value of index there is a value from the set item . index is a finite ordered set of one or more dimensions , for example , {0, … ,n-1} for one dimention , {)0,0(, )0,1( , )0,2( , )1,0( , )1,1( , )1,2( , )2,0( , )2,1( , )2,2(} for two dimentions , etc .Functions :

For all A Array , i index , x item , j , size integer Array Create)j,list( ::= return an array of j dimentions where list is a j-tuple whose ith element is the size of the ith dimention. Items are undefined . Item Retrieve )A,i( ::= if ) i index ( return the item associated with index value i in array A Else return eror Array Store )A,i,x( ::= if )i in index( Return an array that is identical to array A except the new pair <i,x> has been inserted else return eror .end Array

) ( مي‌باشد انديس مقدار، صورت به مرتب هاي زوج از مجموعه يك واقع در آرايه هراست : زير صورت به آرايه هفته روزهاي مورد در C مثًال

3

Page 4: Data Structure in C

و) و( ... ) 7جمعه شنبه يك و (2وو ) شنبه (1و

آرايه : اصلي توابعيكي دارند حضور آرايه هر داده ساختمان در اصلي تابع ديگري Createسه ، ايجاد براي

Store سومي و آرايه سازي ذخيره است .Retrieveبراي آرايه عناصر بازيابي براي

ها آرايه دادة Structure Array isساختمان

( عناصر مجموعه از مقدار يك انديس مقدار هر براي كه ها زوج از اي (itemمجموعهگرفته : نظر . Objectsدر بيشتر يا بعد يك از مرتب متناهي مجموعه انديس شود مي

است بعدي يك انديس مجموعه يك C بعدي }n,…,1,2{مثًال دو انديس مجموعه يك و (2,2(,)2,1(,)1,2(,)1,1{)است.{

Functions توابعآرايه Createتابع خروجي

آرايه بعد jيك برد كند مي اعًالن عنصر iبعدي است iتوسط شده داده ليست امنوع يا جنس از آرايه عناصر C . itemضمنا .itemو listو jهستند مهم‌اند

int a [ 10 ] ; Retrieveتابع مجموعه iاگر از انديس انديس Aيك آن با متناظر عنصر صورت اين در در iباشد

.Aآرايه خطا صورت اين درغير شود مي برگرداندهآرايه ) Storeتابع يك انديس Aورودي (item xو iو

store )A , i , x( : Array: : = هاي iاگر انديس مجموعه آرايه Aدر صورت اين در )Aباشد جديد اضافه i , x) زوج

غير در شود، مي برگردانده است جديد آرايه يك كه حاصل و شود مي درج يا گردد ميصورت .Errorاين دهد مي

اي جمله چند :جبرانجام سپس و اي جمله چند تعدادي تعريف يعني ها اي جمله چند جبر از منظورجمله ... چند روي گيري، مشتق ، تقسيم ، ضرب ، جمع نظير رياضي ساده محاسبات

. است ها اي

درجه اي جمله چند :nيك است زير كلي شكل داراي

اعداد و ضريب .(n,…,1)ها مي‌باشند توانA)X(=

A)X( درجه اي جمله چند اي 7يك جمله چند واقع در باشد، به )A)xمي توان مي را: داد نمايش زير صورت

مناسب راه يك

توانيم مي است، آرايه از استفاده اي جمله چند اين نمايش براي مناسب راه يكاي 8آرايه جمله چند ضرايب و كنيم تعريف . )A)xعنصري با دهيم قرار آرايه آن در را

اي جمله چند حساب آرايه )A)xاين :aدر شود مي ذخيره زير صورت بهa

-420-5000300

براي مجموع يافتن

4

Page 5: Data Structure in C

بخواهيم مانند )A)xاگر ديگر اي جمله چند يك با بايد )B)xرا كنيم يك )B)xجمع در رانام 10آرايه به صورت bعنصري كنيم :=)B)x به ذخيره زير

0015000-201 b

مجموع يافتن براي آرايه )A)x(+ B)xسپس چپ سمت در صفر خانه دو ابتدا aبايد . مي زير برنامه قطعه از استفاده با سپس شود درجه هم اي جمله چند دو تا دهيم قرار

: دهيم قرار آرايه داخل را زير اي جمله چند دو حاصل توانيمFOR ) i = 0 ; i <= 9 ; i++( C[i] = a[i] + b[i];

: تذكراگر كلي حالت به nدرجه )x(Bو mدرجه )A)xدر فوق الگوريتم اجراي زمان باشد،

.))O )max)m,nصورت بود خواهدفرض C مثًال ندارد، چنداني كارايي اما رسد مي ذهن به كه است روشي اولين قبل روش

اي جمله چند دو بخواهيم كنيم .=)x(Q و =)P)x كنيد جمع هم با راسازي ذخيره براي C طول )P)xاوًال به اي آرايه كه 1001به داريم آن 999نياز خانه

جمع براي C ضمنا است چپ )x(Pو )Q)xصفر سمت تا Q)x( 998بايد دهيم قرار صفرو است مطلوب حافظه لحاظ از نه روش اين مشكًالت اين به توجه با شود، درجه هم

طول به اي حلقه از بايد C عمًال زيرا ، اجرا سرعت لحاظ از چند 1001نه جمع جهتبا جمًالت نوشتن از رياضيات در كه همانطور خاطر همين به كنيم، استفاده اي جمله

نمي ذخيره را صفر جمًالت نيز ها اي جمله چند جبر در كنيم، مي خودداري صفر ضريب ( ضريب. با همراه كنيم ذخيره را صفر غير جمًالت تنها بخواهيم اگر ،( Coeficientكنيم

نما [ يا توان C حتما . ]Exponetبايد كنيم ذخيره نيز راCoefExp

هر خاطر همين چنين به بود خواهد عنصري دو ساختار يك اي جمله چند يك جملهزبان در را داده Cساختاري نوع تعريف هنگام توانيم در (Typedef)مي كنيم، تعريف

جمله هر :(Term)واقع دارد را زير ساختار اي جمله چند يكTypedef struct { float coef ;

int expon ; } term ;

متغيرها قسمت در توانيم مي اي جمله چند يك تعريف اي (VAR)براي جمله چندterms : كنيم تعريف زير صورت به را

VAR term terms [1000] ; ( تابع همان داده ساختمان اين در مقدار ساختن ذخيره از( Storeبراي استفاده با

)dotعملگر) نقطه( . 0توسط جمله( بخواهيم اگر C مثًال دهيم مي انجام را مقداردهيقسمت termsاول در دهيم مقدار قسمت 2عدد coetرا در را 1000عدد expو

. دهيم مي قرار Start A finishA start B finish B free 0 1 2 3 4 999

-3152Coef0201000exp

Term[1].Coef = 2;

Term[1].exp=1000;

5

Page 6: Data Structure in C

هاي اي جمله چند جمًالت آرايه )x(Bو )A)xتمام در زير صورت به توانيم مي رااي . termsعمومي جمله چند شروع خانه بايد منظور اين براي دهيم a (Start A)قرار

اي جمله چند پايان اي a(finishA)و جمله چند پايان و شروع همچنين ،B)x( شود تعيينچند خالي خانه اولين C اي ضمنا نام termsجمله به سراسري متغير يك با Freeبايد

. باشد مشخص

( ها اي جمله چند (Paddجمعيعني فشرده صورت به را اي جمله چند يك توان مي چگونه كه ديديم قبل قسمت در

( الگوريتم طي اينجا در كرد، ذخيره صفر جمًالت گرفتن نظر در حاصل padd)بدونهاي اي جمله چند تك )x(Bو )A)xجمع تك روي بايد منظور اين براي كنيم مي تعيين را

اي جمله چند طور )A)xجمًالت همين متغير )B)xو دو از منظور اين براي كنيم، حركتa وb متغير، كنيم مي جمًالت aاستفاده محدوده )A)xروي يعني كند مي حركت

از آن متغير finish Aتا start Aتغييرات ترتيب همين به باشد قسمت . bمي بار هر دركه را اي جمله توان كه aمي را اي جمله توان قسمت با مي‌كند اشاره آن آن bبه به

( دستور توسط مقايسه اين مي‌كنيم مقايسه كند مي . )Compare )terms)aاشارهexp ( , terms )b( . exp)). مي‌شود انجام

: دهد رخ است ممكن حالت سهterms )a( . exp > terms )b( . expالف(

اي جمله چند جمله حالت اين اي )A)xدر جمله چند از بزرگتر بايد )B)xتواني پس داردجمله آن C را )A)xعينا آن كه جمع حاصل اي جمله چند در بنويسيم )C)xرا ناميم مي

اي) جمله چند در جديد جمله نوشتن برنامه )C)xعمل زير انجام Next Termتوسط ) جمله نوشتن از پس نهايت در شود به )x(Cدر )A)xمي واحد كنيم aيك مي اضافه

. شود مشخص جمله آن تكليف زيرا

ب (مساوي terms)s( . exp = terms)b( . expحالت

هاي جمله حالت اين هم )x(Bو )A)xدر با آنها ضرايب بايد سپس دارند مساوي تواناز يكي همراه به را جمع حاصل بودآنگاه صفر مخالف ضرايب مجموع اگر شود جمع

اي جمله چند در ها در )C)xتوان شد صفر ضرايب مجموع اگر اما نويسيم، )C)xميبه واحد يك صفر غير چه و باشد صفر ضرايب مجموع چه نهايت در نويسيم، نمي چيزي

a به هم واحد يك و كنيم مي .bاضافهterms)a( . exp < terms)b( . expج(

اي جمله چند جمله توان كه چون حالت اين جمله )B)xدر آن است در )B)xبزرگتر راC)x( سپس و نويسيم .bمي بريم مي پيش واحد يك را

هاي اي جمله چند از يكي تا دهيم مي ادامه آنقدر را فوق شود، )A)xعمليات )A)xتمامكه شود مي تمام ترتيب a>finish Aزماني همين به كه )B)xباشد شود مي تمام زماني

b> finish B جمله چند جمًالت C عينا شد تمام ها اي جمله چند از يكي كه هنگامي شوددر را ديگر . )C)xاي اي جمله چند پايان آنكه براي نهايت در نويسيم مشخص )C)xمي

دهيم .Finish C = free- 1شود مي قرار

اي جمله چند دو جمع براي الزم تابع

void padd )int starta , int finisha , int startb , int finishb , int *startd , int *finishd(

{/* add A )x( and B )x( to obtain D )x( */ float coefficient ; *startd = avail ; while )starta <= finisha && startb <= finishb(

6

Page 7: Data Structure in C

switch )COMPARE )terms [starta] . expon, terms [startb] . expon(( { case -1 : /* a expon < b expon */ attach )terms [startb] . coef , terms [startb] . expon( ; startb++ ; break ; case 0 : /* equal exponents */ coefficient = terms [starta] .coef + terms [startb] . coef ; if )coefficient( attach )coefficient , terms [starta] .expon( ; starta++ ; startb++ ; break ; case 1 : /* a expon > b expon */ attach )terms [starta] . coef , terms [starta] .expon( ; starta++ ; }/* add in remaining terms of A )x( */For ); starta <= finisha ; starta++( Attach )terms [starta] .coef , terms [starta] . expon( ;/* add in remaining terms of B )x( */For ) ; startb <= finishb ; startb++( Attach )terms [startb] . coef , terms [startb] . expon( ;*finishd = avail-1 ;}

2 )a وb و كند مي جمع .Cرا آورد مي بدست را3. كند( مي معرفي را متغيرهاآغازين( 5 مقداردهي خط.)x(Bو )A)xهنوز( 6 نشده تمامدر( 9 ضرايب .tمجموع گذاريم مي

.Attachجر سيپرو( 10 شود مي زده صدا New term گيرد مي ورودي متغير دو Max term آرايه termطول

از( 22 باقيمانده .)A)xجمًالت بنويس رابه aجمًالت 27تا( 23 برسد كه زماني تا نويسد مي finish Aرابه bجمًالت 33تا( 29 كه زماني تا نويسد مي .finish Bرا برسد .Cپايان( 34 كند مي مشخص را

جديد جمله يک نمودن اضافه براي تابعي

void attach )float coefficient , int exponent (

{/* add a new term to the polynomial */ if )avail >= MAX_TERMS( { fprintf )stderr , "too many terms in the polynomial \n"( ; exit )1( ; } Terms [avail] . coef = coefficient ; Terms [avail++] .expon = exponent ;} Start finish start finish free f f f finish free

7

Page 8: Data Structure in C

A A B B C 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

ضري2-61111-4-112-642ب

Termتوان0137935790157

A)x(= 2x

B)x(= xحبابي سازي :Bubble Sortروشمرتب

طول به اي آرايه در ابتدا روش اين آرايه nدر انتهاي سمت به را عنصر بزرگترينطول به آرايه‌اي در سپس دهيم، مي تكرار (n-1)هل در ، كنيم مي تكرار را كار همين

طول به اي آرايه در در (n-2)بعد تا كرده تكرار را آن C مرتبا و كنيم مي را كار اينطول به اي با 2آرايه حلقه يك سپس دهيم، مي هل دوم خانه سمت به را بزرگتر عنصر

از iمتغير كه داريم متغير 2تا nنياز با حلقه يك و شود مي كم يكي يكي ،J داريم نيازاز .(i-1)تا 1كه مي‌شود اضافه يكي يكي

: دهد مي انجام را حبابي سازي مرتب عمل زير برنامه قطعهFor ) i = 1 ; i < n ; i++ ( For ) j = 1 ; j < n - i ; j++ ( if a [ j] > a [ j+1] { Temp = a [ j]; a [ j] = a [ j+1]; a [ j+1 ] = temp ; }

i= 5

19 27 18 41 41 20

i = 40 18 27 27 20

i= 3شوند 19 18 نمي جابجا ولي شوند مي مقايسه i=2

اجرا زمان

8

an

an-1

a3a2

a1

27 19 41 18 20

19 27 18 20 41

19 18 20 27 41

18 19 20 27 41

Page 9: Data Structure in C

) تنك ) اسپارس Sparse Matrixماتريسهاي C معموًال گويند، مي اسپارس ماتريس باشد زياد آن صفرهاي تعداد كه را ماتريسي هر

اسپارس هاي ماتريس جزو باشد صفر ها آن عناصر از نيمي از بيش كه هايي ماتريسحدود در اگر عمل در اما شوند، مي گرفته نظر صفر 80در ماتريس يك عناصر درصد

. ماتريس C مثًال شود مي مشخص بازه صورت به ماتريس بودن اسپارس خاصيت باشنداست : اسپارس ماتريس يك زير

به نزديك ماتريس اين در شود مي مشاهده كه هستند 80همانطور صفر عناصر درصدرا صفر غير عناصر تنها و نكنيم ذخيره را صفر عناصر كه رسد مي نظر به بنابراين

و سطر يعني آن محل C حتما صفر عنصر يك مقدار بر عًالوه بايد سپس كنيم، ذخيرهدر زير صورت به تايي سه يك بايد صفر غير عنصر هر پسبراي كنيم ذخيره نيز را ستون

بگيريم . نظرValuecolumnRow

اسپارس ماتريس حساب اين با سطر ستون در Aمقدار: شود ذخيره زير صورت به تواند مي قبل مثال

شده :351 فشردهA

-212414-154

325255765246

زبان در را قسمتي سه ساختار اين كه آن )Cبراي داده نوع قسمت در بايد كنيم تعريفTypedef ) ركورد العمل دستور از استفاده ركورد Structبا يك داده Matrix termنوع

: كنيم تعريف زير صورت به را

#define max-terms 101 Typedef struct { int col ;

int row ; float value ; } term ;

term a [ max-terms ] ;

( متغيرها قسمت در نهايت در اسپارس( var و ماتريس توانيم از CAمي آرايه يك را

ماتريس :Termجنس كنيم تعريفVar Matrixterm ca [ max-terms ] ;

9

Page 10: Data Structure in C

ماتريس: تذكر ابعاد آنكه صفرم Aبراي خانه شود گرفته نظر اين Caدر براي راصفرم خانه در ، گرفتيم نظر در . Caمنظور و ها ستون تعداد سطرها تعداد ترتيب به

ماتريس صفر غير عناصر A Cتعداد عمًال پس ، دهيم مي قرار در Caرا زير صورت به: شود مي گرفته نظر

سطر تعداد ستون تعداد صفر عناصرغير تعداد

صفرم 876 Caخانه‌

351CA

-212414-154325255765246

مهم تعريف: تذكر در كه آرايه Caهمانطور شده يعني Caمشخص است بعدي يك: مي‌باشد زير صورت به

يكم خانه دوم خانه هشتم خانهصفرم خانه

. مي‌شود داده نمايش صورت اين به كار سادگي براي

: ماتريس كردن ترانهادهآنها ترانهادة كردن پيدا شود مي انجام ماتريسها روي كه عملياتي ترين ساده از يكي

و سطر جاي ماتريس ترانهاده در ، دانيم مي مقدماتي رياضيات از كه همانطور استاگlر يعlني شlود مي عlوض مlاتريس بlا سlتون‌هاي مlاتريس و mيlك nسlطرنماد با كه آن ترانهاده گاه آن باشد ماتريسي `Aيا ATستون شود مي داده × mنشان

n: بود خواهد زير صورت به

: مي‌دهد انجام را ترانهاده عمل زير ساده برنامه قطعه معمولي هاي ماتريس براي

For ) i =1 ; i < m ; i++( For ) j = 1 ; j < n ; j++ ( at [ j] [ i] = a [ i] [ j];

الگوريتم اين اجراي ماتريس ) )O)mnزمان هاي درايه تعداد به (Aاست فشرده صورت به كه اسپارس ماتريس يك ترانهاده كردن پيدا براي ببينيم حال

: كرد عمل توان مي چگونه است شده ذخيرهگيريم : نظرمي در را قبل مثال ماتريس

876CA: 351

-2

12

10

6 7 8 1 5 3 2 1 2 6 4 2

Page 11: Data Structure in C

فشرده

414-1

54

325255765646

ترانهاده كردن پيدا براي مي‌رسد نظر يعني Aبه آن فشرده شكل روي ساده CAازدوم و اول ستون‌هاي جاي كه است آن راه جاي CAترين C عمًال كار اين با كنيم عوض را

: داريم و شود عوضمي غير‌صفر عناصر ستون و سطر876

)CA( : 315-221

441-145

352255756264

ماتريس ابتدا اگر يعني Aاما ترانهاده ماتريس روي از سپس كنيم، ترانهاده شكل رانهايت در بنويسيم را آن :Cفشرده آيد مي بدست زير صورت به

876CA

T: -221441352264315-145255

هاي شكل شود مي مشاهده كه CAو T(CA)همانطورT فشرده شكل در ، نيستند يكي باهم

هايي آن در C ضمنا ، اند شده مرتب سطر شماره ترتيب به صفر غير عناصر اسپارس ماتريسبينيم مي اند، شده مرتب ستون شماره براساس دارند يكسان سطر شماره چنين T(CA)كه

در كlه اسlت آن رسlد مي ذهن بlه كlه اي ايlده اولين ، نlدارد ، خاصlيتي كlنيم مlرتب را عناصlرماتريس دوم tو Aاگر و اول ستون تعويض براي نياز مورد زمان ، باشد داشته صفر غير عنصر

فشlردة سlازي مlاتريس مlرتب روش يlك از اگlر كlردن مlرتب بlراي سlپس بlود خواهlدنيز آن براي نياز مورد زمان كنيم استفاده حبابي سازي مرتب مانند و معمولي بود خواهد

روش : اين زمان نهايت در

t : دوم و اول هاي ستون جابجايي CAبراي

t : كردن مرتب براي

ماتريس ماتريس Aاگر حالت m×nيك بدترين در اينجا mn = tباشد در و دارد صفر غير عنصرالگlوريتم نيlاز مlورد اسlت زمlان معمlولي ترانهlاده الگlوريتم از بlدتر بسlيار كlه بlود خواهlد

آن زمان .كه بود

11

Page 12: Data Structure in C

كردن ترانهاده براي بهتر روش

ترانهاده Transposeالگوريتمرا معمولي ترانهاده الگوريتم قسمت اين در ، است زياد بسيار اجرا زمان ديديم قبل روش در

ماتريس دوم ستون به الگوريتم اين در كنيم مي ستون CAمعرفي در واقع در ، مي‌كنيم توجهصفر CAدوم غير عناصر ستون سطر Aشمارة شماره به ترانهاده در است قرار كه دارد قرار

ماتريس دوم ستون در ، شود كه ) tو CAتبديل شود مي يادآوري داريم عناصر tعنصر تعداد ) ترانهاده است قرار كه جديد ماتريس به را يك شماره عناصر كليه اول بار است صفر Aغير

شماره كه عناصري باردوم كنيم، مي منتقل بار 1باشد طور همين و ، كنيم مي منتقل nدارندشماره كه عناصري كنيم ) n-1ام مي منتقل ماتريس nدارند هاي ستون ( Aتعداد است

ماتريساسپارس يک ترانهادهvoid transpose ) term a[ ] , term b [ ] (/* b is set to the transpose of a */{ int n , i , j , cuurentb ; n = a [0] .value ; /* total number of elements */ b [0] . row = a [0] . col ; /* rows in b = columns in a */ b [0] .col = a [0] . row ; /* columns in b = rows in a */ b [0] . value = n ; if ) n > 0 ( { /* non zero matrix */ currentb = 1 ; for ) i = 0 ; i < a [0] .col ; i++ ( /* transpose by columns in a */ for ) j = 1 ; j <= n ; j++ ( /* find elements from the current column */ if ) a [ j] .col = = i ( { /* element is in current column , add it to b */ b [currentb] . row = a[ j] .col ; b [cuurentb] .col = a [ j] . row ; b [currentb] . value = a[ j] .value ; cuurentb++; } }}

2 )b ترانهاده با شود .aبرابر مي داده قرار3 )terms ، صفر غير عناصر تعداد ماتريس Cهمان هاي ستون ، Aتعداد i و متغير يك

، جريان شمارنده در ، خانه‌هاي جاري كند .Bروي حركتآغازين( 8تا 5 دهي Initialمقدار6)terms= b[0] . value9 : : باشد( صفر ماتريس ، ماتريس اگر است terms = 0شرط شده تمام كارش برنامه

) 13 0 ترانهاده 80138 × 13ماتريس)

: شود مي انجام زير مراحل باشد صفر غير اگراول( 12 C =1دفعه13 )i 8تا 1از. كند مي تغييرستون( 14 در .cعناصر يابد مي راآييم( 15 مي زماني شرط اين است .1برابر colيا a[ i ] = Cداخل

12

Page 13: Data Structure in C

اجراي برابر زمان معمولي ترانهاده آن )O)ntالگوريتم در كه هاي nاست ستون تعدادو Aماتريسي tاست

صفر غير عناصر .Aتعداد باشد ميحالت بدترين

867-221441352264315-145255756

) تند ) سريع Fast Transposeترانهادهاجرا زمان معمولي ترانهاده روش كه )O)ntدر حالتي در و بدترين )mn = tشد باشد

اين( در ، مي‌شويم آشنا سريعتر روشي با قسمت اين در نيست مناسبي زمان حالتاز كمكي 2روش ها Row startو Row sizeآرايه آن دوي هر طول كه گيريم مي كمك

n ( ماتريس هاي ستون تعداد به ( Aاست واقع در ) Row size ) iدر عناصر تعدادسطر ) Aام iستون در عناصر تعداد و ( Bام iيا كه ) Row start ) iمي‌باشد را

سطر شروع مكان واقع ترانهاده iدر ماتريس در محاسبه Bام زير صورت به باشد ميكنيم : مي

Row start )0( = 1;Row start ) i ( = Row start [i – 1] + Row siza [ i – 1];

آرايه سريع ترانهاده الگوريتم در را كليدي واقع Row startنقش در زيرا دارد برعهدهمي آرايه اين از استفاده با ، كند مي مشخص ترانهاده ماتريس در را شروع مكان

صفر غير عناصر تمام به Aتوانيم كنيم .Bرا منتقلماتريساسپارس يک سريع ترانهاده

Void fast_transpose )term a [ ] , term b [ ] ({/* the transpose of a is placed in b */ int row_terms [MAX_COL] , starting_pos [MAX_COL] ; int i , j , num_cols = a[0] . col , num_terms = a [0] . value ; b [0] . row = num_cols ; b[0] . col = a[0] . row ; b [0] .value = num_terms ; if )num_terms > 0 ( { /* nonzero matrix */ for )i = 0 ; i < num_cols ; i++( row_terms [i] = 0 ; for ) i = 1 ; i <= num_terms ; i++( row_terms [a [i] .col ] ++ ; starting_pos [0] = 1 ; for )i = 1 ; i< num_cols ; i++( starting_pos [i] = starting_pos [ i-1] + row_terms [ i-1] ; for )i = 1 ; i <= num_terms ; i++( { j = starting_pos [ a [i] .col ] ++ ;

13

Page 14: Data Structure in C

b [ j] . row = a [i] .col ; b[ j] . col = a [i] .row ; b [ j] .value = a[i] . value ; } }}

متغير (1 و aيك اسپارس جنس .bاز طور همين هم)bدر aترانهاده (2 اجرا زمان C ضمنا شود مي داده كه )Oقرار تعداد tاست

و صفر غير .nعناصر باشد مي ها ستون تعدادآرايه (3 دو تعريفآغازين( 7و6 مقداردهي8 )terms تمام كار

سطر ) Rowsiza ) iمقدار( 10 در عناصر تعداد برابر كه محاسبه bام iرا باشد ميكند . مي

آغازين( 11 دهي مقدار و دهد مي قرار صفر را همه 12. دهد( مي انجام محاسبات

Row size )a [ i] . Col (2خانه 2عدد

سطر ) Row start ) iتوضيح( 13 شروع مكان كه مي iرا ترانهاده ماتريس در امخط ) كند مي مشخص ( 15و 14باشد

اصلي( 23تا 16 ماتريس از ترانهاده aانتقال ماتريس bبه22. ننويسد( اين روي را بعدي اعداد چون كند مي پيدا افزايش يكي C حتما

اجرا ) O )n +t ( O ) n + t + n + t زمانبرابر سريع ترانهاده الگوريتم اجراي براي ًالزم زيرا :)O )n + tزمان باشد مي

از انتقال bبه aبراي

آغازين Rowstartبراي دهي مقدار Rowsizeبرايتشكيل RowSizeبراي

0 1 2 3 4 5 6013101200

101

01

001

01

Rowsize

(2)

Rowstart

Rowstart

876CA

)1(

35122-212

3414-154

6543210325

9854431255765

65432102469854431

9654278

3

Row Start ) 0 ( = 1 ; Row Start [ i ] = Row Start ) i – 1( + Row Size)i – 1(;

( 3)

14

Page 15: Data Structure in C

867CAT

:

12345678

-221441352264315-145

255756

: آرايه‌ها نمايشدر متوالي و جنس هم خانه تعدادي به آرايه هر كه شده اشاره C قبًال كه طور همان

يا پاسكال نظير باًال سطح زبان‌هاي در باشند داشته اسم يك همگي كه است Cحافظهاستفاده خانه آن انديس از است كافي آرايه‌ها در خصوص به خانه يك به رسيدن براي

داريم را خانه اولين آدرس فقط ها آرايه از اسمبلي نظير پايين سطح زبان در اما كنيمبا حافظه هاي خانه در C حتما بايد كنيم پيدا دسترسي خصوص به خانه يك به آنكه براي و

آرايه يك برسيم نظر مورد خانه به تا برويم پيش اول خانه آدرس از در nاستفاده بعدياست . Cزبان برابر اي آرايه چنين عناصر تعداد باشد مي زير شكل به كلي حالت در

با :

a [ L1 . . . n1 , L2 . . . n2 , . . . , Ln . . . nn ] خاص حالت )در را ابعاد تمام پايين محدوده بگيريم ( Liاگر نظر در يك = Liبرابر

حاصلضlرب ( (1 آرايlه عناصlر تعlداد صlورت اين سlعي تlا در ادامlه در بlود خواهlددو و بعدي يك هاي آرايه مورد در را آرايه از خصوص به خانه يك آدرس مي‌كنيم

. كنيم تعيين بعدي سه و بعدي

بعدي( يك هاي آرايه الفصورت به ها آرايه اين كلي آرايه a [ i ]شكل خانه اولين آدرس اگر باشد، مي

خانlه برابlر آدرس پيlداكردن بlراي ، بايlد iباشlد اگlر (i –1)ام و بlرويم پيش خانlهطول به آرايه هرخانه كنيم آدرس dفرض آنگاه باشد به aiبايت زير صورت به

آيد : مي دستآدرس =

a

كنيم مي فرض كار سادگي (d = 1)باشد 1نيز dبراي

بعدي ( دو هاي آرايه بصورت به ها آرايه اين كلي باشد شكل آدرس مي كردن پيدا براي ،

سطر ستون iخانه و )jام همان عناصر ( ام از بايد از i - 1ابتدا كنيم عبور سطرهر در كه سطر سطر آنجا ابتداي آدرس داريم، تعيين iعنصر زير صورت به ام

شود . مي

15

Page 16: Data Structure in C

سطر= ابتداي امiآدرس

سطر عنصر iدر به رسيدن براي از jام بايد بعدي يك هاي آرايه مشابه (j – 1) ام

آدرس پس كنيم، عبور آيد : aعنصر مي دست به زير صورت بهj + * i+ = آدرسa

:تذكربعدي دو آرايه تمام aعناصر ابتدا يعني شود مي ذخيره حافظه در سطري صورت به

حافظه در يعني آخر الي و دوم سطر عناصر سپس شود مي ذخيره اول سطر عناصربعدي دو آرايه يا مي‌گردد :aماتريس ذخيره زير شكل به

بعدي( سه هاي آرايه جصورت به ها آرايه اين اگر شكل مثًال باشد a[1. . 2,1 . . 4, 1 . . 3]مي

k j i

گيريم . مي نظر زيردر صورت به را آن باشد مي بعدي سه آرايه يك

aaaaa a aaa

) ( سپس شود مي ذخيره اول ماتريس صفحه عناصر تمامي ابتدا ها آرايه گونه اين درصفحه عناصر نهايت در طور همين و صفحه آدرس n1عناصر آنكه براي به aijkام را

عناصر از بايد ابتدا آوريم صفحه i -1دست هر در چون و كنيم عبور ماتريس يا صفحهاندازه صفحه n2n3به ابتداي آدرس دارد وجود با :iعنصر است برابر ام

صفحه= ابتداي ام iآدرس

صفحه در كنيم مي عمل بعدي دو هاي آرايه مانند بعد به اينجا به iاز رسيدن براي اماز jسطر بايد سطر j-1ام هر و كنيم عبور دارد .n3سطر عنصر

سطر= ابتداي در jآدرس صفحهامامiماتريس) (

16

Page 17: Data Structure in C

آدرس نهايت در با : و است برابر aآدرس=

[ i,j,k]

) Queueصف) پشته( (Stackو

كنيم : استفاده توانيم مي شيوه دو از ترتيبي هاي داده بازيابي براي كلي طور به

اول شيوه درمي‌شود ) بازيابي كه است اي داده اولين ورودي داده FIFO = first in first out)اولين

صف ) را بازيابي شيوه وفور ( Queueاين به ساختار اين از نيز دركامپيوتر ، مي‌ناميم . ترجمه اول خط ابتدا مترجم توسط برنامه يك ترجمه هنگام C مثًال شود مي استفاده

( ميانگير حافظه‌هاي در يا آخر الي دوم خط سپس شود ( Bufferمي سيستم از نيز( . پشته از استفاده ترتيبي اطًالعات بازيابي دوم شيوه در شود مي استفاده Stackصفباشد( مي خروجي داده اولين ورودي داده آخرين پشته در LIFO)مي‌باشد

=last in first of) . مورد در C مثًال دارد كامپيوتر در فراواني كاربردهاي نيز ساختار اينكه است پرانتزي آخرين به مربوط شود مي بسته كه پرانتزي اولين تو در تو پرانتزهاي

شود مي شروع يا شود مي باز كه اي حلقه آخرين تو در تو اي حلقه يا است نشده بازرسد . مي اتمام به كه است اي حلقه اولين

پشته مجرد داده نوعStructure stack is Objects : a finite ordered list with zero or more elements .Functions : For all stack stack , item elements , max_stack_size positive integer Stack creates )max_stack_size( :: = Create an empty stack whose maximum size is max_stack_size Boolean isfull )stack , max_stack_size( :: = If )number of elements in stack = = max_stack_size( Return true Else return false Stack add )stack ,item( :: = If )isfull)stack(( stack_full Else insert item into top of stack and return Boolean isempty )stack( :: = If )stack = = creates )max_stack_size(( Return true Else return false Element delete )stack( :: = If )isempty)stack(( return Else remove and return item on the top of the stack

صف مجرد داده نوعStructure queue is Objects : a finite ordered list with zero or more elements .

17

Page 18: Data Structure in C

Functions : For all queue Queue , item elements , max_ queue _size positive integer queue creates )max_ queue _size( :: = Create an empty queue whose maximum size is max_ queue _size Boolean isfullq )queue , max_ queue _size( :: = If )number of elements in queue = = max_ queue _size( Return true Else return false queue addq )queue ,item( :: = If )isfull)queue(( queue _full Else insert item at rear of queue and return queue Boolean isemptyq )queue( :: = If )queue = = createq )max_ queue _size(( Return true Else return false Element deleteq )queue( :: = If )isemptyq)queue(( return Else remove and return item on at front of queue

Object بيشتر: عناصر يا عنصر صفر با مرتب ليست متناهي تعدادي

Functionتوابع

مثبت صحيح Integer Positiveاعدادنام ) ( Creatتابع به خالي صف يك ، صف اندازه و صف كه queueنام كند مي ايجاد

آن اندازه تابع maxحداكثر است تعداد Falseو Trueخروجي is fullسايز اگر است،مساوي صف در عناصر و غلط maxافراد صورت اين غير در ، درست شده ساز

است .

Add تابع else عنصرitem صف انتهاي در قرار queueرا اختيار در جديد صف و كند مي درج

مي‌دهد.براي قانون: متغير يك انتها و باشد مشخص آن انتهاي بايد صف rearهر

. شود مي اضافه صف ته به شود مي اضافه خواست نفر موقع هراين Is Emptyتابع غير در و باشد صفر عناصرش تعداد كه باشد مي خالي صفي

و است پر . (Maxsize = 0)صورت است جنس Deleteتابع از خروجي و خواهد مي صف صف Itemاسم كه شود چك و

. نباشد خاليدهد . مي ارجاع را آن و كند مي خارج صف از را صف ابتداي عنصر return= ) قانون

ارجاع (Front جلو

. شود نمي خارج كسي صف سوم نفر از وقت هيچ

18

Page 19: Data Structure in C

Queue CreateQ )max_queue_size( ::= #define MAX_QUEUE_SIZE 100 /* Maximum queue size */ typedef struct { int key ; /* other fields */ } elemnt ; element queue [MAX_QUEUE_SIZE] ; int rear = -1 ; int front = -1 ;Boolean IsEmptyQ)queue( ::= front = = rear Boolean IsFullQ)queue( ::= rear = = MAX_QUEUE_SIZE -1

قسمت Createتابع و Varدر است آرايه .rearو Frontيك شوند مي صفرRear ، كند مي اشاره نفر آخرين به هميشه

F r f r Front اولين از قبل يكي به

نفر CBA

آنهم نفر يك صف Cدراينصف داده ساختمان به مربوط تذكرات

1. . ) ( يكي دارد پارامتر متغير دو به نياز صف شروع frontهر مكان تعيين براي ) ديگر ) و صف ابتداي مي‌كند .rearصف مشخص را صف انتهاي كه

اما rearهمواره .2 كند مي اشاره صف نفر آخرين اولين frontبه از قبل يكيمي‌كند مشخص را صف نفر

كه .3 است خالي صف .frontمساوي rearهنگامي باشد كه .4 است پر صف .Maxsizeيا nمساوي rearهنگامي باشد

پشته ساختارپشته داده ساختمان به مربوط نكات

آن : 1 و داريم پارامتر يك فقط پشته ساختار در نكته اولين lTop به همواره كه است. كند مي اشاره پشته باًالي عنصر

كه 2 است خالي پشته هنگامي lTop ( 1-باشد- ( ) 1مساوي = Top) كه 3 است پر پشته هنگامي lTop مساويMaxsize -1 ( . ( Top = maxsize - 1باشد

top

CBA

پشته : يا صف ساختار عمده تفاوت ADD:Top = top+1;Stack[top] =item;

Top{

A

Delete: Item=stack[top];

Top{B

19

Page 20: Data Structure in C

Top=top-1;A

صف در جايگذاريVoid addq )int *rear , element item({/* add an item to the queue */ if )*rear = = max_queue_size -1( { queue_full ) ( ; return ;} queue [++*rear] = item ;}

يکصف از عنصري حذف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] ;}

پشته به عنصر كردن اضافه عنصر Pushعمل كردن كم است .Popوعبارات ارزشيابي

نظير ابتدا 7*6+5عباراتي اگر زيرا ، هستند مبهم عبارات محاسباتي نظر را 6و 5ازدر را حاصل سپس كرده نتيجه 7جمع كنيم عمل 77ضرب ابتدا اگر اما ، بود خواهد

حاصل جمع عمل سپس دهيم انجام را شود .47ضرب ميساده راه پرانتزگذاري يك در ، است گذاري پرانتز عبارات گونه اين ابهام رفع براي

در نيست موسوم رياضيات در كار اين اما كرد تعيين را عملگرها اولويت توان ميعبارت بنابراين است مقدم جمع به نسبت ضرب عمل گونه a+bcرياضيات هيچ

مختلف عملگرهاي براي توانيم مي نيز حساب ماشين يا كامپيوتر در ، ندارد ابهامياست . مقدم جمع به نسبت ضرب بگوييم نيز آنجا C مثًال كنيم تعيين اولويت

كند؟ اعمال را عملگرها اولويت تواند مي چگونه حساب ماشين يا كامپيوتر امااعمال ، شويم آشنا بيشتر عبارات ساختار با بايد سئوال اين به دادن جواب براي

عملوند ) دو روي عملگري هر يعني هستند دوتايي اعمال C معموًال (Operandرياضيمقدار دو جمع براي C مثًال ميكند نويسيم Bو Aاثر كه A+Bمي نوشتاري شكل اين در

ميانوندي ) شكل است آمده عملوند دو درميان را ( Infixعملگر عملگر اگر داريم،يعني بنويسيم عملوند دو از پيشوندي ) AB+پيش اگر ( Prefixشكل و داشت، خواهيم

( پسوندي شكل بنويسيم عملوند دو از پس را ( Postfixعملگر حالت اين در داريمحساب +AB مي‌نويسيم ماشين يا كامپيوتر در رياضي عبارات ابهام رفع براي عمل در ،

يك از استفاده با را عبارت حاصل سپس كنيم مي تبديل پسوندي صورت به را ها آنكنيم . مي محاسبه پشته

وجود راه دو كنيم تبديل پسوندي حالت به ميانوندي حالت از را عبارت يك آنكه برايدارد:

زپشته ا استفاده با وديگري مستقيم صورت به يكيمستقيم روش ابتدا در است آمده پايين در كه عملگرها اولويت جدول به توجه با

صورت به را عمل هر سپس ميكنيم مشخص را اعمال انجام مي Postfixترتيب تبديلشكل اند شده تبديل پسوندي به كه عباراتي تمام دادن قرار هم كنار با نهايت در و كنيم

كنيم . مي تعيين را عبارت كل پسوندي

20

Page 21: Data Structure in C

عملگرها اولويت جدول در

رده * هم توان notدربيسيكاست

10orunarx = يكتايي تفريقUمنفي) (

1005-3 U 7دوتايي 111

جمع مانع ياي

بيتهاي كردن برعكس . Xorاز 1و 0براي كنيم مي 1استفاده0 Xor

11010001 1 0 0

11111111 0 1 1

00101110مكمل

نكته :. است مقدم باشد چپ سمت كه عملگري آن اولويت هم عملگرهاي بين در

عملگر اولويت

پرانتز ) ( 1 U ) منفي ) يكتايي تفريق

2 3 not 4 * , / , % , and 5 + , - , or , xor 6 < , < = , = , < > , > = , >

در عملگرها Cاولويت

.مثال بنويسيد : پسوندي صورت به را زير عبارت A+B*)C+D/E(/F

: دارد اصلي ايراد دو اما است ساده بسيار قبل روشبار يكي شود پيمايش بار دو بايد عبارت مي اول آنكه تعيين آن در موجود عملگرهاي

شود مي مشخص آنها اولويت و اين باردومشوند شود مي پسوندي به تبديل عبارتنيست پذير انجام حتي اوقات گاهي مي‌باشد گير زمان آنكه ضمن در. عمليات C مثًال

اولويت آن در موجود عملگرهاي تمام تا نيست دست در عبارت كل حساب ماشين. شوند بندي

21

Page 22: Data Structure in C

مشكل اين رفع برايشود مي انجام كامپيوتر و حساب ماشين در C عمًال كه كنيم مي استفاده روشي از

( پشته يك از روش مي ( Stackدراين استفاده پسوندي به ميانوندي عبارات تبديل براي: داريم توجه اساسي نكته دو به كنيم

. نداريم پرانتزي هيچ پسوندي عبارت در اينكه اولجاي تنها يعني كند نمي تغيير پسوندي به ميانوندي شكل از عملوندها آنكه دوم

مي‌شود عوض عملگرهاكنيم مي رعايت را زير قوانين

نمي : 1قانون پشته در را عملوندي هيچ و گيرند مي قرار پشته داخل ها عملگر تنهانويسيم . مي خروجي در C مستقيما را آن عملوند يك به رسيدن محض به نويسيم

اولويتي : 2قانون كه بگيرد قرار ديگر عملگر باًالي پشته در تواند مي عملگري تنهاپشته باًالي عملگر مساوي يا كمتر اولويتي جديد عملگر اگر باشد داشته آن از بيش

قرار پشته در جديد عملگر سپس شود مي خارج پشته از عملگر آن ابتدا باشد داشتهگيرد . مي

باًالي ( :3قانون پشته در تواند مي عملگر اين داراست را اولويت باًالترين عملگر. ) بگيرد قرار ديگر يك باًالي حتي ديگري عملگر هر

دارد : ( .تذكر اولويت نوع دو عملگرجاري ) اولويت پشته ( )ICPيكي در اولويت پشته در اولويت ديگري ( ISP و

پايين ( قرارگرفت پشته در اينكه محض به اما است باًالتر همه از عملگر جاري اولويتمي ( ديگري عملگر هر بود پشته داخل عملگر اگر يعني داشت خواهد را اولويت ترين

بگيرد . قرار آن باًالي تواندپشته ) : 4قانون از را پشته در موجود عملگرهاي كليه عملگر به رسيدن محض به

مي خروجي در را ها عملگر آن برسيم باز پرانتز عملگر اولين به تا كنيم مي خارجنويسيم ( . نمي خروجي در ولي كنيم مي خارج ازپشته نيز را عملگر نويسيم

نماد # ) :5قانون با كه عبارت انتهاي به رسيدن داده ( number signهنگام نشانمي خارج را آن در را موجود عملگرها تمام يعني مي‌كنيم خالي را پشته شود مي

نويسيم . مي خروجي در و سازيمبه: پشته از استفاده با را قبل عبارت كنيد .postfixمثال تبديل

Tokenize جزبنديpost1

#F/)E/D+C(*B+A

بعدي stackپشته out putخروجي nextعبارتtoken

هيچي #هيچي A#AA + #+AB+ #BAB* + #*AB( * + #(ABC( * + #CABC+ ( * + #+ABCD+ ( * + #D

22

Page 23: Data Structure in C

ABCD/ + ( * + #/ABCDE/ + ( * + #E

ABCDE+/* + #)ABCDE*+// + #/

ABCDE/+*F/ + #FABCDE/+*F+/ خالي#

از تبديل براي postfixبه infixتابعvoid postfix )void({/* output the postfix of the expression . the expression string , the stack , and top are global */ char symbol ; precedence token ; int n = 0 ; int top = 0 ; /* place eos on stack */ stack [0] = eos ; for )token = get_token )&symbol,&n( ; token != eos ; token = get_token )&symbol,&n(( { if )token = = operand( printf )"%c" ,symbol( ; else if )token = = rparen( { /* unstack tokens until left parenthesis */ while )stack [top] != lparen( print_token )delete)&top(( ; delete )&top( ; /* discard the left parenthesis */ } else { /* remove and print symbols whose isp is greater than or equal to the current token s icp */ while )isp [stack[top]] >= icp[token]( print_token )delete )&top(( ; add )&top , token( ; } } while ))token = delete )&top(( ! = eos ( print_token )token( ; printf )"\n"( ;}

e:expression وروديe. است عبارت يك كه: توضيح ميانوندي عبارت پسوندي شكل . eخروجي باشد پشته Next tokenمي و

برنامه . evalمشابه عبارت جز آخرين كه شده فرض باشند e ،# Cمي ضمنا #باشداست . شده قرارداده پشته ته در

{ پشته{ آغازين دهي ;Stack [ 1] = `#` ; top = 1مقدارحلقه :whileدر ) ( داخلي با ispدومي را پشته و icpدر كند مي جاري icpمقايسه

. شود مي‌خواهد پشته وارديكي يكي جديد عملگر كه زماني پشته yتا باًالي چاپ Deleteاز خروجي در و كند مي

كند . مي

23

Page 24: Data Structure in C

عبارت يک ارزشيابي postfixتابعint eval )void({/* evaluate a postfix expression , expr , maintained as a global variable . '\0' is the end of the expression . the stack and top of the stack are global variables . get_token is used to return the tokentype and the character symbol . operands are assumed to be single character digits */ precedence token ; char symbol ; int op1 , op2 ; int n = 0 ; /* counter for the expression string */ int top = -1 ; token = get_token )&symbol , &n( ; while )token != eos( { if )token = = operand( add )&top , symbol –'0'( ; /* stack insert */ else { /* remove two operands , perform operation , and return result to the stack*/ op2 = delete )&top( ; /* stack delete */ op1 = delete )&top( ; switch )token( { case plus : add )&top , op1 + op2( ; breake ; case minus : add )&top , op1 - op2( ; breake; case times : add )&top , op1 * op2( ; breake; case divide : add )&top , op1 / op2( ; breake; case mod : add )&top , op1 % op2( ; } } token = get_token )&symbol , &n( ; } return delete )&top( ; /* return result */}

proc كردن دهي مقداربه تبديل عبارتي ، شده postfixيك كرد؟ را ارزشيابي توان مي طور چه

شده: تذكر تبديل پسوندي صورت به كه را عبارتي توان مي پشته از استفاده باعملگر . يك به رسيدن محض به و دهيم مي قرار پشته در را عملوندها نمود ارزشيابي

روي عمل آن آنكه از پس و كنيم مي خارج عملوند نياز مورد اندازه به پشته باًالي از

24

Page 25: Data Structure in C

به تا دهيم مي ادامه را كار اين نويسيم، مي پشته باًالي را حاصل شد انجام عملوندها. برسيم پسوندي عبارت انتهاي

:مثال. آوريد بدست زير مقادير ازاي به را قبل مثال عبارت

At E +*F/+A= 5 , B= -3 , C= 1 , D=6 , E= 2 , F = 4

5 -3 1 6 2 / + * 4 / + /

1243

261-3555-361-35-34511-351

*-3-356552+/

-34-

12255

+/

صفحلقوي

مواجه صف بودن پر پيغام با اما نباشد پر صف واقعا است ممكن عادي هاي صف درطول به صفي C مثًال است كاذب پيغام يك كه بخواهيم 5شويم كه بگيريد نظر در را

: دهيم انجام آن روي را زير عمليات F r

1 lA وB وC مي واردشوند

CBA

F r2 lA وB شوند مي CBAخارج

F r3 lD شود مي DCBAوارد

F r4 lC شود مي DCBAخارج

F r5 lE وF شوند مي EDCBAوارد

ورود .Fبراي شويم مي مواجه صف بودن پر پيغام با

هستند ) صف داخل نفر دو تنها صف اين در واقع كه( E,Dدر چون مساوي rearاماmax size ، شود مي صادر صف پربودن پيغام است راهي شده رفع اولين براي كه

25

Page 26: Data Structure in C

يعني جديد فرد كه آنست رسد مي ذهن به مشكل جاي Fاين به يعني Aرا دهيم قرارصف ديگر عبارت به است اول خانه پنجم، خانه از بعد خانه كنيم فكر منطقي صورت به

گيريم . مي نظر در اي دايره يا حلقوي صورت به را

از بيش مقدار عددي بگوييم آنكه براي رياضيات از nدر يعني باشد يك nنداشته بهاز توانيم مي دهيم :modبرسيم قرار را زير رابطه يعني كنيم استفاده

از nتا 1محدودهrear = ) rear + 1( % n

: مهم تذكربودن خالي و پر كه است اين آن و آيد مي بوجود شكل يك حلقوي هاي صف در

اگر ها صف اين در نيست تشخيص قابل است rearمساوي frontصف ممكن باشدكه : است آن راه يك مشكل اين رفع براي و باشد خالي C كامًال يا پر C كامًال صف

ندهيم frontو rearبين اجازه يعني بگذاريم خالي خانه اين frontبه rearيك در برسدجاي به از ) nحالت صف .n-1 خانه كنيم( مي استفاده خانه

قبل) مثال در صف ولي 5طول .(4است كنيم مي استفاده تا

26

ED A F C B

Page 27: Data Structure in C

پيوندي هاي ليستو متوالي همنام خانه تعدادي ها آرايه شديم آشنا ها آرايه ساختار با قبل هاي فصل در

ترين مهم باشند مي حافظه در جنس ولي مزيتهم آنهاست مشخص ترتيب همين آنهاشود . مي تبديل ضعف به مزيت اين اوقات گاهي

طول به اي آرايه در كنيد فرض C كنيم . 1000مثًال حذف را دهم عنصر بخواهيمبه را دوازدهم سپس بنويسيم دهم عنصر جاي به را يازدهم عنصر بايد كار اين براي

جاي به را هزارم عنصر طور همين و بنويسيم يازدهم 999جايبايد . C عمًال صورت اين در منتقل 990بنويسيم چپ سمت به يكي كدام هر آرايه خانه

. ) ( خانه يك ششم و پنجم خانه بين بخواهيم اگر آرايه همين در چپ به شيفت شودبايد C عمًال كنيم اضافه جديد 995جديد خانه براي جا تا شوند منتقل راست سمت به خانه

باشد زياد ها آن در اضافه و حذف عمليات كه ساختارهايي در C عمًال ، شود ايجادمنظور همين به ، نيست صرفه به مقرون ها آرايه از كه :استفاده آنست بهتر

به هزارم تا اول هاي خانه يعني بگيريم نظر در منطقي شكل به را ها خانه ترتيبپيوندي ) ليست را ساختاري چنين نباشند سرهم پشت فيزيكي ( Linked List صورت

ناميم . مي ( زنجير يا پيوندي ليست گره( ) chain هر تعدادي هر( node از آن در كه شده تشكيلدارد : دوقسمت حداقل گره

قسمت ) dataيكي پيوند يا ربط ديگري كند( .Link و مي اشاره بعدي گره به كه node

Linkdata C مثًال

نام به زير :1000شامل headزنجير است گرهhead

^a999a3a2a1a0

عبارتي به و تهي و كند نمي اشاره جا هيچ NULLيعني ^به

nodeساختار زبان ساختار Cدر توانيم در nodeمي ساختار اين كنيم معرفي زير صورت به را

داده نوع دستور Structقسمت از استفاده :Structبا شود مي تعريف زير صورت بهnodeساختار

Struct node { int data ;

struct node *link ; };

Pointer نوع از ساختار يك به گري اشاره واقع ساختار nodeدر بايد بنابراين باشد ميقسمت در نيز را گر ساختار typedefاشاره معرفي از عًالمت nodeقبل ، كنيم تعريف

زبان در گرها باشد .*، Cاشاره مينام‌هاي مثال: به گره سه با پيوندي ليست يك زير به thirdو secondو firstبرنامه

(. مي‌گردد ايجاد زير متغيرها: تذكرشكل و بزرگتر حروف كليدي كلمات دربرنامه) كوچك حروف

First second thirdNull302010

#include <stdio.h> Struct node { int data

27

Page 28: Data Structure in C

struct node }; Typedef struct node chain ; Typedef chain *ptrnode ; Main ) ( ; { Chain first,second,third,ptrnode,p; First.data = 10; First.link = &second ;

Second.data = 20 ; Second.link = &third; Third.data = 30 ; Third.link = ) ptrnode ( null ; }

داراي تا ايم نوشته طوري را برنامه پايين در لذا ، ندارد خروجي هيچ اوليه برنامهباشد : خروجي

P = &first ;While ) p!= ) ptrnode ( null ( { Printf ) "%d\n", p data( ; p = p link ; }

P

Linkdataزبان تابع Cدر دهيم . mallocتوسط تخصيص حافظه توانيم = pمي

malloc)sizeof)chain(( اندازه به حافظه در که شود مي ، chainساختار( (sizeباعث C ضمنا و شود مي گرفته نظر در اين . Pحافظه با باشد مي حافظه آن به گر اشاره يک

. کنيم ايجاد را آن بود ًالزم گره يک که هرگاه توانيم مي خاصيت

زنجير: تذكر اما ندارد نمايش صفحه روي خروجي هيچ قبل مثال برنامه اول قسمتكند . مي ايجاد حافظه رادر

هر: تذكر بتوانيم اينكه يعني آنهاست پويايي پيوندي هاي ليست كاربرد مهم‌ترين C عمًالگرفته كار به پويايي اين زير برنامه در ، كنيم ايجاد آنرا داشتيم نياز گره يك به كه زمان

. و شود مي خوانده ورودي از نامنفي حقيقي عدد تعدادي زير برنامه در شود ميگر اشاره با آن گره اولين كه شود مي ايجاد پيوندي ليست آنهايك headتوسط

آن هاي گره در كه مقاديري مجموع و شده پيمايش زنجير سپس ، است شده مشخصباشد . نامنفي C حتما عدد اولين كنيم مي فرض همچنين ، شود مي تعيين دارد وجود

برنامه اين اختصار Pointerدر به Ptr را ، data راd وlink راL. دهيم مي قرارنام به ليست يک در را آن و خواند مي ورودي از منفي نا حقيقي عدد تعدادي زير برنامه

Head . در که عناصري مقادير مجموع و کرده پيمايش را ليست سپس دهد مي قرارمنفي . ) عدد کننده استفاده که زماني کند مي چاپ و محاسبه را دارد وجود ها گره

شود . ( مي خارج برنامه از کند وارد

#include <alloc.h>#include <stdio.h>Struct node {

Float d ;

28

Page 29: Data Structure in C

Struct node *L ; } ;

Typedef struct nodes ;Typedef nodes *ptrnode ;Main ) ( { Ptrnode head,p1,p2 ; Float x, sum = 0 ; Scanf )"%f",&x( ; P1 = ) ptrnode ( malloc ) sizeof ) nodes(( ; P1 d = x ; Head = p1 ; Scanf ) "%f", &x ( ; While ) x >= 0 ( { p2 = ) ptrnode ( malloc ) sizeof ) nodes (( ;

p2 d = x ;p1 L = p2 ;p1 = p2 ;scanf ) "%f" , &x( ;

} P2 L = ) ptrnode ( null ; P1 = head ; While ) p1 != ) ptrnode ( null( ;

{ Sum = sum + p1 d ; P1 = p1 L ; }

Printf ) "sum = %f\n" , sum ( ; }

ازاي به را قبل ) x=13.5و 11و 8.5و 13و 1 -مثال نماييد( .Traceرديابي مقابل Sum خروجي شرط

WHILE X 13.5 0 sum = 46 11 true 13.5 8.5 true 24.5 13 true 33 -1 false 46

Head q q q138.51113.

5 P × P × P × P ×

Head q

29

Page 30: Data Structure in C

^138.51113.5

P P × P × P × P × P×

تمرين :سپس كند ايجاد نامنفي حقيقي عدد تعدادي از پيوندي ليست يك كه بنويسيد برنامه‌اي

عدد كوچكترين همراه به را ليست در موجود عدد بزرگترين و كرده پيمايش را ليستكند . چاپ خروجي در را ليست داخل اعداد ميانگين همچنين و ليست

رشته‌هاConcat رشته دو الحاق

SubStr ) S , i , j(: string

S : a b c d e f g h

SubStr ) S , 1 , 3( ; a b c

كاركتر رشته iاز طول Sام بگوييم :jبه اگر مثال اين در C مثًال كند مي جداsub str ) s,4,2( b و d. دهد ميرشته يك در الگو يك يافتن

Pos S

S : C b a b C a b C a d a a a b C a b C a C a b d d برابر

نابرابر نابرابر

P : a b C a b C a C a b

Pos P اندازه abcيك به كرديم اين . abcپيدا در ها رفتن جلو و عقب اين عقب گرديم برمي

باشد . مي گير زمان هاي رشتهاجرا )O ) lengh p , lengh S زمان

روي در Pفقط و عقب به و Sبرگشت ندارد عقب به برگشت و نيست صورت اين بهرود . مي جلو

مقابل : مثال رشته A B C D E F G H I Jدر

30

Page 31: Data Structure in C

پيداكردن براي نيست .GHاينجا بيشتر يكي چون نيست مشكلي

شكست تابع. است آرايه يك بردار يك واقع در شكست تابع

صفر اول خانه بنابراين برگرديم اول خانه به بايد بخوريم شكست اول كاراكتر در اگراست.

شکست تابع محاسبهvoid fail ) char *pat ({/* compute the pattern s failure function */ int n = strlen )pat( ; failure [0] = -1 ; for ) j = 1 ; j < n ; j ++( { i = failure [ j-1] ; while )) pat [ j] != pat [ i+1] && )i >= 0(( i =if failure [i] ; if )pat [ j] = = pat [ i+1]( failure [ j] = i+1 ; else failure [ j] = -1 ; }}

كاراكتر كاراكتر 5در به خورد .2شكست بيايد

j: 0 1 2 3 4 5 6 7 8 9

2104321000 F: P: a b c a b c a c

توجه با ابتدا گرديم برمي اينجا ازsو pبه

i j 0 2 1 3

Failure 2 شكست 4 P الگوي براي را شكست تابع كند مي 3 خط 2 : محاسبه 5

31

Page 32: Data Structure in C

4 6

1 7 0 8 9 10

. يكسانند چون اول كاراكتر بيايد خوردي شكست چهارم كاراكتر در اگرابتدا در انديسها تست توسط الگو تطابق

int nfind )char *string , char *pat ( {/* match the last character of pattern first , and then match from the beginning */ int i , j , start = 0 ; int lasts = strlen ) string( -1 ; int lastp = strlen ) pat( -1 ; int endmatch = lastp ; for )I = 0 ; endmatch <= lasts ; endmatch++ , start++( { if )string [endmatch] = = pat [lastp]( for ) j = 0 ; I = start ; j < lastp && string[i] = = pat [ j] ; i++ , j++( ; if ) j = = lastp( return start ; /* successful */ } return -1 ;}

Match ( ) بودن ) يكسان بودن معرف (match makerمنطبقرشته رشته Patزير تابع Sو Fو

1 2 3 4 5 6 7 8 9 10P: a b c a b c a c a b Pos s 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

S: C b a b C A b C a b A a A b C a B C Acab

از يكي كه دهيم مي ادامه زماني تا را .pos sيا pos pحلقه شود تمام Pos S Pos P

1 1 2 2 ) رويم مي سوم كاراكتر سراغ نيستند )مساوي

3 3 4 4 5 5 6 6 ) روند مي جلو يكي هردو مساويند )وقتي

7 7 نيست ( 8 8 ) مساوي

كاراكتر 9 9 رويآييم مي‌ پنجم

32

Page 33: Data Structure in C

10 6 Pos P : = F ) Pos P – 1 ( + 1 = 5 11 3

12 1 13 2

1 2پيوندي پشته و صف

سازي شبيه را صف ساختار توان مي چگونه آرايه از استفاده با كه ديديم قبل فصل دردو پيوندي صف يك در است پذير امكان كاري چنين نيز پيوندي ليست از استفاده با كرد

( كند اشاره صف ابتداي به يكي كه داريم ًالزم گر ( Frontاشاره انتهاي به ديگري و ( tailيا rearصف )

Front rear

nكرد . اضافه صف انتهاي به جديد گره يك توان مي راحتي به

ليست يک انتهاي به گره يک کردن اضافهvoid attach )float coefficient , int exponent , poly_pointer *ptr({/* create a new node with coef = coefficient and expon = exponent , attach it to the node pointed to by ptr . ptr is updated to point to this new node */ poly_pointer node ; temp = )poly_pointer( malloc )sizeof )poly_node(( ; if )IS_FULL)temp(( { fprintf )stderr , "the memory is full \n" ( ; exit ) l ( ; } temp -> coef = coefficient ; temp -> expon = exponent ; )*ptr( -> link = temp ; *ptr = temp ;}

نام به جديد گره پارامتر Xيك دو و گيرد .yو iمي شود مي ارسال پروسيجر به{}توضيح

صف yگره به .iرا كند مي اضافه امگره بود خالي صف اگر كه است اين براي اگر frontجديد Xشرط صورت اين درغير

بايد نبود خالي . rearصف Xشود Front

DeleteDispose كند مي آزاد را حافظه

پيوندي يکصف ابتداي از حذفelement deleteq )queue_pointer *front({/* delete an element from the queue */ queue_pointer temp = *front ; element item ;

33

Page 34: Data Structure in C

if )IS_EMPTY )*front(( { fprintf ) stderr , "the queue is empty \n"( ; exit ) l ( ; } item = temp -> item ; *front = temp -> link ; free )temp( ; return item ;}

يك داريم برمي صف از نفر يك .Dataوقتي كنيم مي حذف را

F rear

X

پشته مورد در Top

پيوندي پشته ساختار Top

يك يا^ اضافه جديد Xبرايمي‌گيريم

^

زيربرنامه‌هاي است پذير امكان سادگي به عمليات نيز پيوندي پشته مورد ADDدرStack وDelete Stack آمده باًال در دهند مي انجام را حذف و اضافه عمليات کهاست.

پشته ايجاد هنگام پشته null topچون كنيم نمي چك بنابراين استنه . يا است خالي

X ^ Top

بع د

Topپيوندي : جمله‌ايهاي چند

را ها اي جمله چند توانستيم ها آرايه از استفاده با قبل هاي فصل دراستفاده با ، دهيم انجام ها آن روي را رياضي ساده عمليات و كنيم ذخيره

شبيه را ها اي جمله چند توان مي راحتي به نيز پيوندي هاي ليست ازليست از گره يك را اي جمله چند يك جمله هر منظور اين براي كرد سازي

حقيقي عدد كه ضريب قسمت يكي دارد قسمت سه كه گيريم مي پيونديگره به گر اشاره سومي و است صحيح عدد كه توان قسمت ديگري ، است

) اي ) ( ) جمله چند گره بعدي جمله node polyبعديLink expCoef

34

Page 35: Data Structure in C

اي جمله چند دو جمعpoly_pointer padd )poly_pointer a , poly_pointer b({/* return a polynomial which is the sum of a and b */ poly_pointer front , rear , temp ; int sum ; rear = )poly_pointer( malloc )sizeof )poly_node(( ; if )IS_FULL)rear(( { fprintf )stderr , "the memory is full \n"( ; exit ) l ( ; } front = rear ; while )a && b( switch )COMPARE )a -> expon , b -> expon(( { case -1 : /* a -> expon < b->expon */ attach )b -> coef , b -> expon , &rear( ; b = b -> link ; breake; case 0 : /* a ->expon = b ->expon */ sum = a -> coef + b -> coef ; if )sum( attach )sum , a -> expon , &rear( ; a= a -> link ; b = b -> link ;break ; case 1 : /* a ->expon > b ->expon */ attach )a -> coef , a -> expon , &rear( ; a = a -> link ; } /* copy rest of list a and then list b */ for ) ; a ; a = a -> link ( attach ) a -> coef , a -> expon , &rear ( ; for ) ; b ; b = b -> link ( attach )b -> coef , b -> expon , &rear( ; rear -> link = NULL ; /* delete extra initial node /* temp = front ; front = front -> link ; free )temp( ; return front ;}

attack. كند= مي ضميمه ، كردن ملحقattack همان مي‌دهد New termكار انجام . را

سوال : نمونه1. For ) i = 1 ; i =< n ; i++( { j = 2*i ; K = n - i ; While ) j <= k ( j = 2 * j ;

35

Page 36: Data Structure in C

}4.F)q(:= IF isemptr )q( Thenq;F)ADD Q [ i,q]( : : = IF Isempty )q( Then ADD Q )i,q(;Else ADD Q )Delete Q, F )Delete Q((;

36

Page 37: Data Structure in C

ها درخت و ها گرافگراف يكي Gهر است شده تشكيل مجموعه دو ديگري Vاز .Eو

V نقاط يا ها گره يا رئوس مجموعه را آن كه است متناهي و تهي غير مجموعه يكو ناميم مي عضوي Eگراف دو هاي زيرمجموعه از تعدادي ، Vنيز مجموعة Eاست را

. داشته وجود يال راس دو بين اگر گراف هر در ناميم مي گراف خطوط يا ها لبه يا يالهاهستند مجاور دلخواه راس يك با كه را رئوسي تعداد و ناميم مي مجاور را آنها باشد

ناميم . مي رأس درجهراس زير گراف در C رأس 2درجه bمثًال و . 3درجه dاست باشد و V (مي Eرئوس

يالها(G=)V,E( C a b e d V={a,b,c,d,e,f,p,q}

p f q G

يك به گراف رئوس و يالها از گذشتن با و كرده شروع گراف راس يك از بتوانيم اگرراس دو بين گوييم مي نباشد تكراري يالي و راس هيچ آنكه شرط به برسيم ديگر راس

. دارد وجود مسير

را گراف آن باشد داشته وجود مسير يك حداقل گراف دلخواه راس دو هر بين اگر. ناميم مي مرتبط يا همبند

بين زيرا نبود مرتبط همبند گراف يك از مثالي قبل وجود eو bمثال مسيري هيچندارد .

رأس همان به C مجددا بتوانيم رئوس و ها يال از گذشتن با و كرده شروع راس يك از اگرخواهيم دوره يك آنگاه ، باشد داشته وجود تكراري يال و راس آنكه بدون بازگرديم

داشت .قبل درگراف C طول C d e Cمثًال به دوره دارد .3يك يال سه زيرا است

d F e c d طول به دوره است .4يك

درخت تعريفناميم . مي درخت را دوره بدون همبند گراف هر

:مثالمقابل و 11درخت دارد .10راس يال

. باشد مي يال بدون و دارد راس يك تنها که باشد مي درخت يك نقطه

معادلند ) ( : باشند ارزي هم درختها مورد در زير نكات

1)G. است درخت يكدلخواه (2 راس دو هر داريم .Gبين فرد به منحصر مسير يك فقط3)G همبند گراف كه nيك است دارد .n-1راسي يال4)G گراف با nيك باشد .n-1راسي همبند كه است يال

37

Page 38: Data Structure in C

5)G گراف با nيك باشد .n-1راسي نداشته دوره كه است يال6)G گراف كه nيگ است دوره بدون دارد .n-1راسي يال7)G برداشته آن يال يك اگر كه است همبندي گراف يعني است همبند نيمال مي

شود . مي ناهمبند شود8)G C حتما آن به يال يك شدن اضافه با يعني است نادوره ماكزيمال گراف يك

داشت . خواهد دوره

: زير صورت به كنند مي تعريف بازگشتي صورت به را ها درخت كامپيوتر درتعريف :مي‌باشد :درخت زير صورت به چندگره از مجموعه‌اي

دارد .الف ريشه نام به خاصي گره lهاي ب مجموعه به ريشه جز به گره‌ها بقيه l طوري به ، اند شده افراز

از كدام هر .كه مي‌ناميم ريشه درخت زير يك را ها:مثال

T3 T2

T1

گرفت ريشه توان مي را اي گره هر .دردرختيا سطح باشد داشته ريشه كه درختي هر .Levelدر كنيم مي تعريف

دردرخت مقدماتي تعاريفسطح در را ريشه درخت هر كه (Level)در را رئوسي تمام و كنيم مي تعريف يك

برابر ريشه تا آن‌ها سطح Kفاصله در راس K+1باشد يك اگر گيريم، مي نظر درسطح در سطح kبخصوص در رئوسي با سطح k+1ام راس باشد مجاور يا Kام پدر راسطح رئوس سطح k+1والد رئوس آن و ناميم سطح K+1مي راس فرزندان ام Kرا

) راس ) زير درخت در C مثًال شوند مي ناميده نيا هم فرزندان خود ، كنيم مي Cنامگذاريهاي نام به فرزند بنايراين G , H , Iسه ، كه G , H , Iدارد داريم توجه هستند نيا هم

J,I. نيستند نيا همناميم . مي درخت عمق را درخت يك در سطح حداكثرعمق زير درخت در C است . 5مثًال

رأس در C مثًال است وي فرزندان تعداد برابر راس درجه درخت و 3درجة Cهر استاست .Dراس يك درجهناميم .Kراس مي برگ را صفر درجة رئوس ، ندارد فرزندي زيرا است صفر درجة نيز

است .* متفاوت هم با درخت و گراف در درجه تعريف A

B E C D F K L G H I J

P O N M

Q

38

Page 39: Data Structure in C

: نمايشدرخت هاي ليست ديگري و ها آرايه يكي دارد وجود ها درخت نمايش براي اساسي ابزار دو

از استفاده براي ، شود نمي استفاده آرايه از درخت نمايش براي C معموًال ، پيونديقسمت يك كه كنيم تعريف هايي گره بايد پيوندي پيوند Dataليست قسمت چند Linkو

تعداد ، باشد است .Linkداشته درخت رئوس درجة بيشترين با برابر واقع در هارا فرزندان بيشترين قبل مثال كه Aدر هايي 4دارد گره بايد پس است 5فرزند

قسمت يك كه كنيم تعريف و Dataقسمتي نامهاي 4دارد به گر به ch1 , ch4اشاره كه . كنيم مي اشاره گره فرزندان

Child nChild 1dataگرها اشاره

Ch 4Ch 3Ch 2Ch 1data

داد : نشان زير شكل به توان مي را قبل مثال درخت حساب اين با

A

^^E^^^D^C^^^B

^^^^L^^^^K^^J^^^^I^^^^H^^G^^^^F

^^^^M^^^^N^^^O^^^^P

^^^^Q17×4 = 6868-16=52 NULL گرها اشاره تعداد

شده: 16 استفاده گرهاي اشاره تعداد) يالها) تعداد

:تمرينبرابر گراف درجه و dاگر گرهاي nباشد اشاره تعداد آنگاه ، باشيم داشته Nullراس

با : است برابرnd – )n – 1( = )d – 1(n + 1

گرهاي اشاره تعداد و شود مي مشاهده كه بسيار NULLهمانطور قبل روش دراشاره تعداد آن در كه كنيم مي استفاده ديگري روش از خاطر همين به است زياد

ناميده NULLگرهاي راست نياي هم l چپ فرزند روش جديد روش اين يابد، كاهش . گره اين كه است مجاور بعد سطح در گره دو با حداكثر گره هر روش اين در شود مي

است . گره راست نياي هم ديگري و است گره چپ فرزند يكي ها

39

Page 40: Data Structure in C

هم‌نياي‌راست

فرزندچپ

گره

برابر و يافته افزايش درخت گرهاي 7عمق اشاره تعداد و يافته .NULLاست كاهش

1 A 2 B

3 F C4 G D5 P H J E

6 O I N K7 Q M L

گرهاي NULL –16=18 2 × 17اشارهn Cاگر كًال راست نياي هم l چپ فرزند روش در باشيم داشته گر n+1رأس اشاره

داشت خواهيم پوچ

نمايش : تمرين راست نياي هم l چپ فرزند صورت به كه گرافي از توان مي چگونه؟ رسيد اصلي گراف به است شده داده

( دودويي هاي (Binary Treeدرختحداكثر گره هر آن در كه رسيديم درختي به راست نياي هم l چپ فرزند روش 2در

علوم در ها درخت اين ، دارند نام دويي دو درخت هايي درخت چنين ، دارد فرزندتوان مي كنيم استفاده ارزشي و منطق از جا هر واقع در بودند پركار بسيار مختلف

مبناي . محاسبات مبناي كه چون نيز كامپيوتر در برد كار به را دويي دو است 2درختدارند . كاربرد ها درخت اين

دودويي هاي نمايشدرختمي ، هستند تر منظم عادي هاي درخت به نسبت دويي دو هاي درخت كه آنجايي ازخانه چند به دودويي درخت هر بدانيم بايد ابتدا دهيم، نمايش نيز آرايه در را ها آن توانيم

دارد . نياز آرايه) برگها ) جز به اي گره هر آن در كه را دويي دو درخت كامل يا پر دودويي درخت تعريف

. ناميم مي پر دويي دو درخت باشد داشته فرزند دو

40

Page 41: Data Structure in C

عمق به پر دودويي درخت يك زير درخت C است .4مثًال

1 2 3 4

پر يا كامل

هستند : زير خواص داراي پر هاي درختسطح : در ها گره تعداد اول برابر Kخاصيت است . 2K-1ام

درخت. 2 عمق پر dاگر دودويي درخت هاي گره كل تعداد .است 2d -1باشد

عمق به دودويي درخت يك نمايش براي خواص اين از استفاده طول dبا به اي آرايه از2d -1 ، كنيم مي صورت ريشه استفاده به و دهيم مي قرار آرايه اول خانه در را

خانه چپ فرزند خانه i بازگشتي در را خانه (2i)ام راست فرزند و دهيم مي را iقرار امخانه دهيم .2i+1در مي قرار

دهيم . مي نمايش آرايه يك در را زير دودويي درخت

. است طول 31 نياز به اي آرايه d = 5 2 -1=31 A

B C D F E G I J H

خانه گره پدر خانه iنكته در است .[]ام

9`8`7`6`5`4`3`2`1`10987654321HGFEDCBA

1```30``9``8``7``6``5``4``3``2``1``20`JI

دودويي هاي پيمايشدرختبه را دودويي سطحي 2درخت‌هاي پيمايش يكي كرد پيمايش توان مي عمده صورت

، گيريم مي نظر در را عمقي هاي پيمايش قسمت اين در ، عمقي پيمايش ديگري وباشد . مي زير صورت به دودويي درخت هر كلي شكل

41

N

L R

Page 42: Data Structure in C

به را گره سه ( !3اين ( ) مي ) قرارداد اما ، كرد بازيابي پيمايش حالت فاكتوريل سهصورت دراين ، باشد راست فرزند بر مقدم صورت اين در چپ فرزند كه حالت 3كنيم

و : چپ فرزندان سپس شود مي بازيابي گره ابتدا اول حالت در داشت خواهيم پيمايشترتيبي( )NLR راست) پيش حالت را پيمايش حالت ناميم . Preorder) اين مي

گره ) nاگر شود پيمايش راست و چپ فرزندان ميان ميان( LNR در پيمايش گاه آنگره( In orderترتيبي) كه صورتي در و داشت بازيابي nخواهيم فرزندانش از پس

ترتيبي( )LRN شود) پس هيچ( order Postپيمايش حالت اين در ، داشت خواهيمجهت همين به باشند شده بازيابي فرزندانش تمام آنكه مگر شود نمي بازيابي اي گره

شود . مي بازيابي كه است اي گره آخرين ريشهجاي) به كتابها بعضي ، Nدر D) باشد مي

بنويسيد : .مثال را زير درخت پيمايش A

B C D F E G I J H

راست . فرزندان بعد و شوند مي بازيابي چپ ابتدافرزندان

عمقي هاي پيمايشNLR: A,B,D,F,I,G,J,C,E,H

LNR: B,I,F,D,G,J,A,E,H,C

LRN: I,F,J,G,D,B,H,E,C,Aدودويي هاي درخت كاربرد

در آنها كاربردهاي از يكي ، پركاربردند بسيار دودويي هاي درخت شد گفته كه همانطوريك يعني هستند دوتايي اعمال ، رياضي اعمال اغلب ، است رياضي عبارات تبديل

بنابراين . راست عملوند ديگري و چپ عملوند يكي ، كند مي اثر عملوند دو روي عملگر . درخت C مثًال باشيم داشته دودويي درخت يك توانيم مي رياضي عبارت هر متناظر

عبارت با شود :A+Bمتناظر مي داده نمايش زير صورت به

A B

)))) كشيم مي خط دورعملگرقرار فرزندان جاي را راست و چپ عملوندهاي و دهيم مي قرار ريشه در را عملگر

به ، گرفت دودويي درخت يك با متناظر توان مي نيز را تر پيچيده عبارات ، دهيم ميباًالتري سطح باشد داشته باًالتري اولويت كه عملي هر كه داريم توجه اساسي نكته اين

گيرد . مي قرار ريشه در اولويت كمترين با عملگر و است دورتر ريشه از يعني ، دارد. مثال كنيد: رسم را زير عبارت با متناظر درخت

T2

42

+

Page 43: Data Structure in C

A+B*)C+D/E(/F T3 T1 T4 T5

دودوئي Inorderپيمايش درخت يکvoid inorder )tree_pointer ptr(/* inorder tree traversal */{ if )ptr( { inorder )ptr -> left _child( ; printf )"%d" ,ptr -> data( ; inorder )ptr -> right_child( ; }}

دودوئي preorderپيمايش درخت يکvoid preorder )tree_pointer ptr(/* preorder tree traversal */{ if )ptr( { printf )"%d" , ptr -> data( ; preorder )ptr -> left_child( ; preorder )ptr -> right_child( ; }}

بازگشتي inorderپيمايش غيرvoid iter_inorder )tree_pointer node({ int top = -1 ; /* initialize stack */ tree_pointer stack [MAX_STACK_SIZE] ; for ) ; ; ( { for ) ; node ; node = node -> left_child( add )&top , node( ; /* add to stack /* node = delete )&top( ; /* delete from stack */ if )!node( breake ; /* empty stack */ printf )"%d" ,node -> data( ; node = node -> right_child ; }}

دودوئي postorderپيمايش درخت يکvoid postorder )tree_pointer ptr(/* postorder tree traversal */

43

Page 44: Data Structure in C

{ if )ptr( { postorder )ptr -> left_child( ; postorder )ptr -> right_child( ; printf )"%d" , ptr -> ->data( ; }}

يكتايي ) (A)-اعمال است( .Not Aو راست فرزند ، فرزندش يكتايي اعمال در و است-A A- , not A

A

44

not

Page 45: Data Structure in C

سازي : مرتب روشهاي

سازي مرتب در دودويي هاي درخت كاربردسازي مرتب روش سازي مرتب هاي روش از دودويي يكي جستجوي (BST)درخت

( پويا روشهاي جزو روش اين باشد داده( Dynamic مي تعداد اگر حتي يعني استروش اين از توانيم مي هم باز نباشد مشخص ابتدا از كنيم مرتب خواهيم مي كه هايي

صورت به سپس دهيم مي قرار ريشه در را داده اولين روش اين در ، كنيم استفادهچپ سمت به بودند كوچكتر جاري گره مقدار از اگر ديگر هاي داده مورد در بازگشتيمي آن راست سمت به بود جاري گره از بزرگتر جديد داده مقدار اگر و رويم مي گره

پيمايش با كه شود مي ايجاد دودويي درخت يك نهايت در ، به Inorderرويم ها داده آنشوند . مي مرتب صعودي صورت

سازي : مثال مرتب روش به را زير هاي كنيد .BSTداده مرتب37,24,62,18,25,16,58,39,25

Inorder [ LNR] : 16 , 18 , 24 , 25 , 25 , 37 , 39 , 58 , 62

دودوئي درخت داخل به عنصري درجvoid insert_node )tree_pointer *node ,int num(/* if num is in the tree pointed at by node do nothing ; otherwise add a new node with data = num */{ tree_pointer ptr ,temp = modified_search )*node , num( ; if )temp | | ! )*node(( { /* num is not in the tree */ ptr = )tree_pointer( malloc )sizeof )node(( ; if )IS_FULL)ptr(( { fprintf )stderr ,"the memory is full \n"( ; exit )l( ; } ptr -> data = num ; ptr -> left_child = ptr -> right_child = NULL ; if )*node( /* insert as child of temp */ if )num < temp -> data( temp -> left_child = ptr ; else temp -> right_child = ptr ; else *node = ptr ; }}

سازي مرتب اجراي ( BSTزمان ( O. باشد مي

45

37

6224

18

25

16

25

58

39

Page 46: Data Structure in C

جبابي : نكته سازي مرتب اجراي زمان

اجرا = 500×9 10 حبابي: اگر n = 2 20زمان سازي مرتب20) × O)220 = اجرا اي: اگر n = 2 20زمان كومه سازي مرتب

را جديد گره جاي توانيم مي راحتي به دودويي جستجوي درخت يک در عنصر درج برايمقداري . داراي جديد گره اگر و کنيم مي شروع ريشه از منظور اين براي کنيم تعيين

اين . رويم مي راست سمت به صورت اين غير در و چپ سمت در ، بود کمتر ريشه ازشود . مشخص جديد گره محل تا کنيم مي تکرار بازگشتي شکل به را کار

درخت از گره يک حذف باشد ) (BSTبراي نداشته فرزند باشد برگ گره آن اگر ، برابر را آن والد گر اشاره خواهيم . Nullکافيست مي که اي گره اگر اما دهيم قرار

خواهيم . مي که اي گره اگر داريم رو پيش حالت دو باشد فرزند داراي ، شود حذفاگر اما ، نشانيم مي والد جاي به را فرزند C عمًال باشد داشته فرزند يک فقط کنيم حذف

عنصر بزرگترين توانيم مي باشد داشته فرزند دو ، شود حذف خواهد مي که اي گرهکنيم . جايگزين را آن راست زيردرخت عنصر کوچکترين يا آن چپ زيردرخت

راست) – ( سمت در کوچکترين چپ سمت در بزرگتريندرخت : مثال بخواهيم BSTدر اگر C مثًال توانيم 72زير مي کنيم حذف بزرگترين )44را

يا ( چپ سمت درخت زير جاي ) ( 80در به را راست سمت زيردرخت در کوچکتريندهيم . 72 قرار

32

72 25

80 39 29 13

44 37 31 26

مهم از : تذکر گره حذف شده BSTهنگام حذف گره جايگزين گره اگر که داريم توجهمرتبط جايگزين گره قبلي والد به را جايگزين گره فرزندان بايد باشد داشته فرزند

کنيم .

بخواهيم : مثال اگر زير درخت ، 72در کنيم حذف و 44را شود مي آن 41جايگزينشد . خواهد وي راست فرزند

32

72 25

80 39 29 13

44 37 31 26

41فرماييد : مشاهده توانيد مي زير شکل در را حاصل درخت

32

44 25

80 39 29 13

46

Page 47: Data Structure in C

41 37 31 26

ادغامي سازي (Merge Sort)مرتبدر كه صورت بدين است يكديگر در مرتب هاي آرايه ادغام روش اين كار اساس

هاي آرايه واقع در تا كنيم مي مرتب صعودي ترتيب به را هم كنار عدد دو هر اول تكرارطول به طول 2مرتب به مرتب هاي آرايه تكراردوم در آيد هم 2بدست كنار كه را

طول به مرتب هاي آرايه تا كنيم مي ادغام هم در تكرارسوم 4هستند در آيد، بدستمرتب تا كنيم مي ادغام را چهارتايي هاي مي 8آرايه ادامه را كار اين آيد بدست تايي

شود . مرتب آرايه كل تا دهيم

:مثال

41 , 29 , 53 , 16 , 19 , 32 , 17 , 43 , 65 , 14 , 18 , 32 , 19

29 , 41 , 16 , 53 , 19 , 32 , 17 , 43 , 14 , 65 , 18 , 32 , 19

16 , 29 , 41 , 53 , 17 , 19 , 32 , 43 , 14 , 18, 32 , 65 , 19

16 , 17 , 19 , 29 , 32 , 41 , 43 , 53, 14 , 18 , 19 , 32 , 65

14 , 16 , 17 , 18 , 19 , 19 , 29 , 32 , 32 , 41 , 43 , 53 , 65

كنيد ثابت تمرين عنوان بهادغامي ) سازي مرتب اجراي .O( زمان است

روش اين مزيتنيست ًالزم كه است اين سازي مرتب هاي روش ساير به نسبت روش اين مزيت

از استفاده با توان مي يعني باشند موجود اصلي حافظه در ها داده تمام همزمان ( سخت ديسك مثًال كمكي هم( hard diskحافظه در خواهيم مي كه را هايي قسمت

. كنيم ادغام اصلي حافظه در حتي يا همانجا شود ادغامانتخابي ) سازي ( :Selection Sort مرتب

حبابي سازي مرتب روش از ( (Bubbleدر زيادي تعداد ، تکرار هر در است ممکنانتخابي . سازي مرتب از توانيم مي مشکل اين رفع براي شوند جابجا هم با عناصر

با . سپس ، شود مي مشخص عنصر بزرگترين انديس مرحله هر در کنيم استفادهمرتب خواهيم مي که اي آرايه زير عنصر آخرين

شود . مي جابجا شودFor ) i = n -1 ; i >0 ; i--( { Max = a [ 0 ] ; For ) j = 1 ; j <= i ; j++( {

if ) a [ j] > max( {

Max = a [ j]Maxindex = j ;

} }

Temp = a [ i] ; a [ i] = a [ maxindex] ; a [ maxindex] = temp ; }

47

Page 48: Data Structure in C

درجي ) سازي :( Insertion Sort روشمرتبتکرار در روش اين شود .iدر مي درج عنصري ، مرتب آرايه يک در جديد عنصر يک ام

از پسn-1 آرايه است .n مرحله شده مرتب عنصري

: اگر دو dataنکته از درجي سازي مرتب ، باشند شده ذخيره شده مرتب شکل بهاست .Bubbleو Selectionروش بهتر

6050403020

4 + 3 + 2 + 1 = 10 Bubble4 + 3 + 2 + 1 = 10 Selection1 + 1 + 1 + 1 = 4 Insertion

اي ) کومه سازي ( : Heap Sort روشمرتبدر و باشد کامل درخت پاياني سطح از قبل تا دودوديي کامل درخت يک در هرگاه

شبه درخت يک ،آنگاه باشند شده گرفته نظر در راست به چپ از برگها پاياني سطحداشت . خواهيم کومه يا کامل

است کومه

نيست کومهمفهوم دو اينجا اشاره Min Heapو Max Heapدر آنها به پايين در که باشند مي مطرح

. است شدهMin Heap : اي گره هيچ آن در که را اي را کومه نباشد بزرگتر فرزندانش Min Heapازناميم . ميMax Heap : فرزندانش از اي گره هيچ آن در که است کامل شبه دودويي درخت يک

نباشد . کوچکتر

در عنصر يک : Max Heapدرج به را جديد عنصر يک بخواهيم اضافه Max Heapاگرنرود . دست از بودن کومه تا کنيم مي اضافه مجاز موقعيت به آنرا C اوًال ، کنيم

48

30

25

14

23

19

Page 49: Data Structure in C

عدد بخواهيم اگر C به 22مثًال کنيم Max Heapرا مي عمل زير صورت به کنيم اضافه باًال :

يعني 22ابتدا خود ريشه با سپس و شده اضافه سطح ترين پايين به ، چپ سمت 14ازشود . مي جابجا

عدد : تذکر خواستيم مي اگر قبل مثال والد 32در مقادير با C متواليا ، کنيم اضافه راگرفت . مي قرار ريشه در نهايت در و شد مي تعويض

از عنصر آنکه . :Max Heapحذف از پس شود مي انجام ريشه از حذف عمل هموارهگره آخرين ، برداشتيم را ريشه ) Max Heapعنصر سطح گره ترين راست سمت

از ( . که فرزندان از کدام هر بازگشتي صورت به سپس شود مي ريشه جايگزين آخرشرط . تا يابد مي ادامه آنقدر عمل اين شوند مي والد جايگزين بودند بزرگتر Maxوالد

Heap . بايستي ريشه از عدد هميشه که است ضروري نکته اين به توجه شود برقرارباشد . نمي مجاز ريشه از غير به حذف و کنيم حذف

نماييد .Max Heapدر: مثال حذف را عنصر يک باًالفرماييد : مشاهده پايين در توانيد مي را خذف مراحل

در که آنجا عناصر Max Heapاز تمام اگر ، دارد قرار ريشه در عنصر بزرگترين هموارهMax Heap باقي شده مرتب صورت به اعداد نهايت در ، کنيم خارج ريشه از C متواليا رامانند . مي

اي : مثال کومه صورت به سپس دهيد تشکيل را زير اعداد کنيد .Sortکومه79 - 84 - 25 - 15 – 32 – 45

49

30

25

14

23

19

22

30

25

22

23

19

14

14

25

22

23

19

25

14

22

23

19 2

5

23

22

14

19

79

84

84

79

25

79

84

84

79

25

79

25

15

32

84

Page 50: Data Structure in C

79حذف 84حذف

45حذف 32حذف

ح

25ذف

84 – 79 – 45 - 32 – 25 - 15 : جواب

سريع سازي (Quick Sort)روشمرتبگردي ) پاشنه يا لوًال عنصر عنوان به را آرايه از عنصر يك روش اين در( Pivotدر

با كه صورت بدين كنيم مي مشخص آرايه در را آن واقعي مكان و گيريم مي نظراسم به از i متغيري بزرگتر عنصر تا رويم مي پيش و كنيم مي شروع آرايه ابتداي از

pivot نام به متغير يك با آرايه انتهاي از ترتيب همين به كنيم برمي jپيدا عقب خانه خانهاز كوچكتر عنصر تا اگر . pivotگرديم كنيم هاي jاز iپيدا خانه جاي باشد و iكوچكتر jام

( كنيم مي عوض را تا ( i < jام دهيم مي ادامه را كار شود jاز iاين در ( . (i > jبزرگترصورت و jاز i اين شده جاي رد C حتما خانه Pivot بايستي با كنيم . j را مي عوض ام

واقعي مكان آنكه از زير pivotپس سراغ به ابتدا بازگشتي صورت به شد مشخصچپ سمت راست pivotآرايه سمت آرايه زير سپس و رويم . pivotمي را عمليات

اينجا . در شود مرتب آرايه كل تا دهيم مي ادامه كه pivotآنقدر اي آرايه خانه اولين راگيريم . مي نظر در شود مرتب خواهيم مي

50

15

45

32

15

25

79

84

79

45

15

32

25

84

843

215

45

79

25

32

45

15

25

84

79

84

79

15

45

32

25

84

791

5

25

32

45

32

254

579

84

15

84

79

45

25

15

32

84

794

5

32

15

25

25

32

45

79

84

15

Page 51: Data Structure in C

(i ازj با (pivotگذشته شود مي جا جابه i j i j

225

62

39581637

25186225

243716

j I623958372518252416

16 i j i j

62395837251825

251824

2418

16

j j i i 623958372525

25241816

j I6239

585839

372525241816

: مثال25 , 16 , 19 , 32 , 14 , 27 , 15

پروژه

: پروژه هدفعبارت يک که بنويسيد اي عملوندي infixبرنامه هر آن در که زير عملگرهاي شامل

تا حداکثر و باشد مي انگليسي حروف از کاراکتر يک از 3فقط تو در تو پرانتز سطحبه را آن و بگيرد کند . Prefixورودي تبديل

جمع **توان براي+

براي ) بسته پرانتزتفريق -

براي ( باز پرانتز*ضرب

(shift + 1)~ = يكتايي براي ~منفيتقسيم /

51

Page 52: Data Structure in C

52