24
هان داده ساختماfaradars.org/fvds9402 مدرس: فرشید شیرافکن دانشجوی دکتری تهران نشگاه دا( سی ارشد کارشنا کارشناسی و: م افزار کامپیوتر نر( ) دکتری: نفورماتیک بیو ا) فصل چهارم: صف و پشته1 ﻓﺮادرسFaraDars.org

آموزش ساختمان داده ها - بخش چهارم

Embed Size (px)

Citation preview

Page 1: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

:مدرسفرشید شیرافکن

دانشگاه تهران دانشجوی دکتری (بیو انفورماتیک: دکتری( )کامپیوتر نرم افزار: کارشناسی و کارشناسی ارشد )

:فصل چهارم

صف و پشته

1

فرادرس

FaraDars.org

Page 2: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

(queue)صف

2

.مي‌شودانجامآنانتهايبهدرجوآنابتدايازحذفعملكهاستايدادهساختمانصف،

First)ليستراصف In First Out) FIFOخارجكهاستعنصرياولينصف،بهشدهواردعنصراولينزيرانامند،مي.مي‌شود.مي‌شوداستفادهrearوfrontمتغيردووqueue[0..n-1]بعدييکآرايهازصف،نمايشبرايصفاولعنصرمحلمقدارازكمتريکي:frontمتغيرصفعنصرآخرينمحل:rearمتغير

فرادرس

FaraDars.org

Page 3: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

مثال

3

(q[0..3]).مي‌باشدمفروضاستخاليابتدادركهخانه4باصفيک

0 1 2 3

front = -1 , rear = -1

A front = -1 , rear = 0 Aدرج

A B front = -1 , rear = 1 Bدرج

A B C front = -1 , rear = 2 Cدرج

B C front = 0 , rear = 2 Aحذف

C front = 1 , rear = 2 Bحذف

فرادرس

FaraDars.org

Page 4: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

درج در صف

addq (rear , item)

{

if (rear == n-1)

{

queue-full( );

return;

}

rear= rear+1;

queue[rear] = item;

}

.مي‌باشد n-1برابرrearصف‌پر‌مقدار‌در‌:‌تذكر.‌‌برابر‌استrearبا‌frontدر‌صف‌خالي‌مقدار‌:‌تذكر

4

0 1 2 3

A B C rear=2

0 1 2 3

A B C D rear=3

فرادرس

FaraDars.org

Page 5: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

حذف عنصر از صف

delq (front , rear)

{

if (front == rear)

return queue-empty( );

return q[++front] ;

}

5

0 1 2 3

B C front=0

0 1 2 3

C front=1

فرادرس

FaraDars.org

Page 6: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

مشکل نمایش ترتیبی صف

غييرتراستبطرفبتدريجصف،هادادهخروجوورودبا.استابهامينقاطدارايصف،ترتيبينمايش.استپرصفكهرسدمينظربهوشودميn-1برابرrearكهنحويبه.دهدميمکانتموقعيدردوبارهعنصراولينودهدشيفتچپسمتبهراصفتمامبايدqueue-full،حالتايندر

queue[0]وگرفتهقرارfrontشود1-برابر.rearزمانبرعمليشيفتولي.شودتنظيمبايدنيز.است

6

فرادرس

FaraDars.org

Page 7: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

صف حلقوی

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

.دهيمتشخيصهمازراخاليوپرصفيکتوانيمنميوشودميfront=rearشود،استفادهنيزخانهيکآنازاگر

7

فرادرس

FaraDars.org

Page 8: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

مثال

8

فرادرس

FaraDars.org

Page 9: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

صف حلقویدر درج

addq (front , rear , item)

{

rear = (rear+1) % n;

if ( rear == front )

{

queue-full(rear);

return;

}

queue[rear] = item ;

}

9

فرادرس

FaraDars.org

Page 10: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

حلقویحذف از صف

deleteq (front , rear)

{

if (front == rear)

return queue-empty( );

front = (front+1) % n ;

return queue[front] ;

}

.بودخواهدخاليصفباشد،front=rearاگر

.داردخاصكاربردهايبهبستهqueue-emptyوqueue-fullتوابعسازيپياده

10

فرادرس

FaraDars.org

Page 11: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

(stack)پشته

.مي‌شودانجامآنبااليازاضافهوحذفكهاستايدادهساختمان،پشته

.مي‌شودبرداشتهآنازكهاستعنصرياولينآن،درشدهواردعنصرآخرينچون،مي‌نامندLIFOراپشته

top:پشتهباالييعنصركنندهمشخص

11

فرادرس

FaraDars.org

Page 12: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

درج در پشته

push (top , item)

{

if ( top >= max-1 )

{

stack-full( );

return;

}

top=top+1;

stack[top] = item;

}

12

فرادرس

FaraDars.org

Page 13: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

حذف از پشته

pop ( top )

{

if ( top == -1 )

return stack-empty( );

return

stack[top--];

}

13

فرادرس

FaraDars.org

Page 14: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

جابه جایی قطارها

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

>هایشمارهباقطارهاازدنباله ای 1 , 2 , 3 زیرمراحلاگر.(استردیفابتدایدر1).دارندقرارهمسرپشت<بود؟خواهدچهخروجیشود،انجام

.شوديمsوارد1قطار-1.شودميsوارد2قطار-2.شودميخروجيريلواردوشدهخارجsاز2قطار-3.شودميsوارد3قطار-4.رودميخروجيريلبهوشدهخارجsاز3قطار-5.رودميخروجيريلبهوشدهخارجsاز1قطار-6

:حل>:قطارهاخروجترتيب 2 , 3 , 1 >

14

فرادرس

FaraDars.org

Page 15: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

مثال

3>خروجیترتیبآیا،قطارهامسئلهدر , 1 , است؟ممکن<2:حلخارجرا2بايدآنازقبلچونكرد،خارجرا1تواننميآنازبعدولي.كنيمميخارجرا3سپسوشدهsوارد3و2و1ابتدا.كرد

:تذكر.نيستممکنخروجيدر<3,1,2>جايگشتوليهستند،جايگشت6داراي<1,2,3>اعداد

< 1 , 2 , 3 >

< 1 , 3 , 2 >

< 2 , 1 , 3 >

< 2 ,3 , 1 >

< 3 , 2 , 1 >

15

فرادرس

FaraDars.org

Page 16: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

مثال

.اندشدهتعريفزيرصورتبهpushوpopعمل.(پشتهبااليدر8)دارندقرارپشتهدرترتيببه8تا1اعدادPush:دهدميقرارپشتهبااليدروبرداشتهراوروديعدداولين.Pop:نويسدميخروجيدنبالهانتهايدروبرداشتهراپشتهبااليعدد.

جايگشتآنبهكهكردتوليدخروجيدررا8تا1اعدادازجايگشتيتوانميpopعدد8وpushعدد8ازمناسبيتركيببااست؟قبولقابلزيرجايگشتآيا.گوييمميقبولقابل:حل

push(1) , push(2) , push(3) , push(4) , pop(4) , pop(3) , push(5) , push(6) , push(7), pop(7) , push(8) , pop(8) , pop(6) , ???

.استمانده5زيرچون،كردخارجرا2تواننمي،6آوردنبيرونازبعدxازكوچکتراعداد،xعددهربرايوكردهحركتابتداسمتبهانتها،‌ازباشدقبولقابلخروجيدنبالهيکآنکهبراي:سريعراه.باشندنمينزوليدنبالهيک،<2,5,1>يعني6ازبعداعداد،دنبالهايندر.باشندنزوليدنبالهيکبايددارند،قرارآنازبعدكه

16

1,5,2,6,8,7,3,4 فرادرس

FaraDars.org

Page 17: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

نگارش های مختلف عبارت ریاضی

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

1-prefix(پيشوندي)* A B

2-infix(ميانوندي)A * B

3-postfix(پسوندي)A B *

:دودوييعملگرهاييبيناولويت

توان-1

تقسيموضرب-2

تفريقوجمع-3

17

فرادرس

FaraDars.org

Page 18: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

postfixبه infixتبدیل

:مثال

( ( A + B ) * D ) ^ ( E – F )

( AB+ *D ) ^ ( E – F )

AB+D* ^ ( E – F )

AB+D* ^ EF-

AB+D*EF-^

‌مشخص‌مي‌شpostfixو‌prefixدر‌نگارش‌:‌تذكر ‌از‌جايگاه‌آن‌ها .‌وديک‌عبارت،‌‌نيازي‌به‌پرانتز‌گذاري‌نيست‌و‌ترتيب‌عملگرها

18

فرادرس

FaraDars.org

Page 19: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

prefixبه infixتبدیل

: مثال

( ( A + B ) * D ) ^ ( E – F )

( +AB * D ) ^ ( E – F )

*+ABD ^ ( E – F )

*+ABD ^ -EF

^*+ABD-EF

19

فرادرس

FaraDars.org

Page 20: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

با استفاده از پشتهinfixبه prefixتبدیل

:مثال

20

/+ a * b c d

b*c*

daa

a + b*c++

(a + b * c) / d ///

فرادرس

FaraDars.org

Page 21: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

با استفاده از پشتهinfixبه postfixتبدیل

:مثال

A B C – D * +

.

21

DC

(B-C)*DB-CB-CB

A+(B-C)*DAAAA

فرادرس

FaraDars.org

Page 22: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

مثال

.حاصل عبارت زیر را مشخص کنید

5 , 2 , * , 3 , - , 4 , 1 , + , *

.

22

1

5432

3577105

فرادرس

FaraDars.org

Page 23: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

تمرین

.را مشخص کنیدpostfixفرم

.

23

فرادرس

FaraDars.org

Page 24: آموزش ساختمان داده ها - بخش چهارم

ساختمان داده ها

faradars.org/fvds9402

24

این اسالید ها بر مبنای نکات مطرح شده در فرادرس« مجموعه فرادرس های ساختمان داده ها»

.تهیه شده است

.نماییدلینک زیر مراجعه برای کسب اطالعات بیشتر در مورد این آموزش به

faradars.org/fvds9402

فرادرس

FaraDars.org