queues and stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس-...

89
پشته رضوی سید ناصرwww.snrazavi.ir ۱۳۹۵

Upload: others

Post on 26-Aug-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

پشتهwww.snrazavi.irسید ناصر رضوی

۱۳۹۵

Page 2: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

2

پشته و صف

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

پایه ایداده ایانواع.اشیاازمجموعه ای:محتویاتبودنخالیآزمایش،پیمایش،حذف،درج:عملیاتاستواضحدرجازمنظور.شود؟حذفبایدعنصرکدام

stack

queue

push

pop

enqueue dequeue

Page 3: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

3

کد کاربر، پیاده سازی، واسط

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

واسطازپیاده سازیجداسازی.ونمادجدولاولویت،صفکیسه،صف،پشته،:مثال...

مزایا.کندنتخابارایکیمختلفپیاده سازی هایبینازمی تواندنتیجهدرندارد،خبرپیاده سازیجزییاتازکاربرکد.کسانیپیاده سازییکازمی توانندزیادیکاربرکدهاینتیجهدرندارد،خبرکاربرکدنیازهایازپیاده سازی

.کننداستفاده

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

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

Page 4: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

4

پشته

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

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

Page 5: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

5

واسط پشته

رشته هاازپشتهیک.دست گرمی.

StackOfStringspublic class

()StackOfStringsپشته خالیایجاد یک

push(String s)voidدرج یک عنصر در باالی پشته

pop()Stringحذف عنصر باالی پشته و برگرداندن آن

isEmpty()booleanبررسی خالی بودن پشته

size()intعناصر موجود در پشتهبرگرداندن تعداد

push pop

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

ورودیازشدهخواندهرشته هایدنباله یکردنمعکوس.مثالیکاربرکد.

Page 6: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

6

آزمایش درستی عملکرد پشته

بخواناستانداردورودیازرارشتهتعدادی.کنچاپراآنوحذفپشتهباالیازرشتهیکاست،“-”بابرابرورودیرشته یاگر.کندرجپشتهباالیدرراشدهخواندهرشته یصورت،اینغیردر.

public static void main(String[] args)

{

StackOfStrings stack = new StackOfStrings();

while (!StdIn.isEmpty())

{

String item = StdIn.readString();

if (item.equals(“-”)) StdOut.print(stack.pop() + “ “);

else stack.push(item);

}

}

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

% more tobe.txt

to be or not to – be - - that - - -

% java StackOfStrings < tobe.txt

to be not that or be

Page 7: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

7

پیاده سازی با لیست پیوندی: پشته

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

to

be

or

not

to

- to

StdIn StdOut

to not or be to

null

to

null

be to

null

or be to

null

not or be to

null

not or be to

null

first

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 8: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

8

شودبرگرداندهبایدکهعنصریذخیره ی

String item = first.item;

گرهاولینحذف

first = first.next;

شدهذخیرهعنصربرگرداندن

return item;

حذف از پشته

or be to

null

first

or be to

null

first

private class Node

{

private String item;

private Node next;

}

کالس درونی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 9: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

9

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

درج در پشته

کنذخیرهلیستعنصراولینبهارجاعیکNode oldFirst = first;

کنایجادجدیدعنصرذخیره یبرایجدیدگرهیکfirst = new node();

کنمقداردهیراجدیدگرهمتغیرهایfirst.item = “not”;

first.next = oldFirst;

or be to

null

first

oldFirst

or be to

null

oldFirst

first

or be to

null

notfirst

Page 10: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

10

پیاده سازی در جاوا: پشته

public class LinkedStackOfStrings

{

private Node first = null;

public boolean isEmpty()

{ return first == null; }

public void push(String item) {

Node oldFirst = first;

first = new Node();

first.item = item;

first.next = oldFirst;

}

public String pop() {

String item = first.item;

first = first.next;

return item;

}

}

private class Node {

private String item;

private Node next;

}

کالس درونی

تمام عملیات پشته در . ادعا.می شوندانجام ثابتزمان

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 11: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

11

پیاده سازی به وسیله ی آرایه: پشته

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

آرایهوسیله یبهپشتهپیاده سازی.آرایه یازs[]ذخیره یبرایNکناستفادهپشتهعنصر.مکاندرراجدیدعنصر:درجs[N]کنذخیره.مکاندرواقععنصر:حذفs[N – .کنحذفرا[1

nullnullnullnullbetonotorbetos[]

9876543210

N

capacity = 10

[ادامهدر].می دهدرخسرریزباشد،پشتهظرفیتازبیشترعناصرتعداداگر.اشکال

Page 12: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

12

پیاده سازی در جاوا: پشته

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

public class FixedCapacityStackOfStrings

{

private String[] s;

private int N = 0;

public FixedCapacityStackOfStrings(int capacity)

{ s = new String[capacity]; }

public int size()

{ return N; }

public boolean isEmpty()

{ return N == 0; }

public void push(String item)

{ s[N++] = item; }

public String pop()

{ return s[--N]; }

}

تقلب

Page 13: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

13

مالحظات پشته

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

پاریزوسرریز.دهیدبروزاستثنایکخالی،پشته یازحذفهنگامدر:پاریز.[ادامهدر].کنیدبزرگ ترراآرایهاندازه ی:سرریز

نیستنیازمورددیگرکهشی ایبهارجاعیکنگهداشتن.حافظهاتالف.public String pop() {

if (isEmpty())

throw new RuntimeException(“Empty stack”);

String item = s[--N];

s[N] = null;

return item;

}

استمجازپوچشیءیکدرجفعلیپیاده سازیدر.پوچاشیای.

Page 14: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

14

تغییر اندازه ی آرایه: پشته

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

کاربرکدوسیله یبهپشتهاندازه یتنظیم.مشکل.

باشد؟چقدرجدیدپشته یاندازه ی.س

یابدافزایشثابتمقداریکاندازه یبهآرایهاندازه ی.خسیساستراتژی:

شودبرابردوآرایهاندازه ی.رشداستراتژی:

است؟بهتراستراتژیکدام.س

f(N) = N + c

f(N) = N * 2

Page 15: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

15

مقایسه استراتژی های خسیس و رشد

می کنیماستفادهزیرهزینه یمدلازاستراتژی،دواینمقایسه یمنظوربه:

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

اندازه یباجدیدآرایه ییک:ویژهدرجعملf(N)می کندایجاد،Nکپیجدیدآرایه یدرراموجودعنصر:بااستبرابرعملیاتاینهزینه ی.می کنددرجپشتهباالیدرراجدیدعنصرسپسومی کند

دجدیآرایه ی ایجاد هزینه ی

وجودهزینه ی کپی کردن عناصر مدر آرایه ی جدید

یدهزینه ی درج عنصر جد

f(N) + N + 1

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 16: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

16

(c = 4)استراتژی خسیس

می کنیمشروعصفراندازه یباآرایهیکبا.

۱فاز

4 + 1

1

1

1

8 + 4 + 1

1

1

1

12 + 8 + 1

1

1

1

16 + 12 + 1

1

1

1

2فاز

۳فاز

4فاز

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 17: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

17

کارایی استراتژی خسیس

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

فازدر𝑖بااستبرابرآرایه اندازه یc × 𝑖.

فازکلهزینه ی𝑖بااستبرابر:جدیدآرایهایجادهزینه ی:𝑐 × 𝑖

عناصرکردنکپیهزینه ی:𝑐 × 𝑖 − 1

جدیدعناصردرجهزینه ی:𝑐

فازکلهزینه ینتیجه،در𝑖2بااستبرابر𝑐𝑖.

درجبرایفازهاکلتعدادکهآنجااز𝑁بااستبرابرعنصر𝑁/𝑐،بااستبرابرفازهاکلهزینه ینتیجهدر:

2𝑐 1 + 2 +⋯+ Τ𝑁 𝑐 ∈ O Τ𝑁2 𝑐

Page 18: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

18

استراتژی رشد

می کنیمشروعیکاندازه یباآرایهیکبا.

2فاز

4

7

1

13

1

1

1

25

1

1

1

1

1

1

1

۳فاز

4فاز

1 0فاز ۱فاز

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 19: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

19

کارایی استراتژی رشد

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

فازدر𝑖2بااستبرابرآرایهاندازه ی𝑖.

فازکلهزینه ی𝑖بااستبرابر:2:جدیدآرایهایجادهزینه ی𝑖

2:عناصرکردنکپیهزینه ی𝑖−1

2:جدیدعناصردرجهزینه ی𝑖−1

فازکلهزینه ینتیجهدر𝑖2بااستبرابر𝑖+1.

درجبرایفازهاکلتعدادکهآنجااز𝑁بااستبرابرعنصرlg𝑁 + :بااستبرابرفازهاکلهزینه ینتیجهدر،1

21 + 22 + 23 +⋯+ 2lg 𝑁+1 = 2lg 𝑁+2 − 2 = 4𝑁 − 2 ∈ O 𝑁

Page 20: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

20

تحلیل سرشکن شده

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

ازدنباله ایهزینهمحاسبه ی.شدهسرشکنتحلیل𝑁عمل.

هزینه یدارایعمل هاازبرخیشدهانجامعملیاتدنبالهدراگرچهکهایندادننشان.هدف.داردپایینیهزینه یشدهسرشکنطوربهعملهرکلدراماهستند،باالیینسبتاً

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

Page 21: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

21

مثال: تحلیل سرشکن شده

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

رشدقابلپشته هایدردرجعملهرشده یسرشکنهزینه یمحاسبه ی:

زنیجمعروش.هزینه یمجموعN4بااستبرابردیدیدکهگونههماندرجعملN - 2.

بااستبرابردرجعملهرشده یسرشکنهزینه ینتیجه،درO(1).

حسابداریروش.افیاضهزینه های.می پردازیماستنیازواقعاًکهآنچهازبیشتریهزینه یدنباله،درعملیاتازبرخیانجامبرایروشایندر

موجودیازراهزینهازمقداریمی توانیمهزینهپرعملیکانجامهنگامدرسپس.می شوندذخیرهماحسابدرشدهپرداخت[باشدمثبتموجودیکهشرطیبه].بپردازیمخودحساب

Page 22: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

22

مثال: تحلیل سرشکن شده به روش حسابداری

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

[آرایهایجادهزینه یگرفتننظردربدون].می پردازیمدالر۳درجعملهربرای

a

ba

cba

dcba

edcba

fedcba

gfedcba

hgfedcba

ihgfedcba

3$ 2$

3$ 3$

3$ 3$

3$ 5$

3$ 3$

3$ 5$

3$ 7$

3$ 9$

3$ 3$

1$

2$

3$

1$

5$

1$

1$

1$

9$

موجودی

Page 23: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

23

پیاده سازی: پشته ی قابل رشد

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

public class ResizingArrayStackOfStrings

{

private String[] s;

private int N = 0;

...

}

public ResizingArrayStackOfStrings()

{ s = new String[1]; }

public void push(String item)

{

if (N == s.length) resize(2 * s.length);

s[N++] = item;

}

public void resize(int capacity)

{

String[] copy = new String[capacity];

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

copy[i] = s[i];

s = copy;

}

Page 24: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

24

هزینه سرشکن شده درج: پشته

درجهزینه یN[جدیدآرایهایجادهزینه یگرفتننظردربدون].اولعنصر

N + (1 + 2 + 4 + ∙∙∙ + N) ~ 3N

هزینه ی درجها اهزینه ی کپی ه

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 25: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

25

کوچک کردن آرایه: پشته ی قابل رشد

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

کنیم؟کوچکراآرایهاندازه یچگونه.س

اولراه حل.می کنیمبرابردوراآناندازه یاست،پرآرایهوقتی:درج.می کنیمنصفراآناندازه یاست،پرنیمهآرایهوقتی:حذف.

استهزینهپربسیارحالتبدتریندرروشاین!بگیرید؛نظردراستپرآرایهکهوقتیرا...وحذفدرج،حذف،درج،حذف،درج،عملیاتازدنباله ایبامتناسبهزینه ایدارایعملهرحالتایندرNاست!

Page 26: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

26

کوچک کردن آرایه: پشته ی قابل رشد

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

کنیم؟کوچکراآرایهاندازه یچگونه.س

کاراراه حل.می کنیمبرابردوراآناندازه یاست،پرآرایهوقتی:درج.می کنیمنصفراآناندازه یاست،پرآرایهچهارمیکوقتی:حذف.

public String pop()

{

String item = s[--N];

s[N] = null;

return item;

}

if (N > 0 && s.length = 4 * N) resize( s.length / 2 );

Page 27: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

27

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

s[]s.lengthNpop()push()

76543210

null10

to11to

beto22be

nullorbeto43or

notorbeto44not

nullnullnulltonotorbeto85to

nullnullnullnullnotorbeto84to-

nullnullnullbenotorbeto85be

nullnullnullnullnotorbeto84be-

nullnullnullnullnullorbeto83not-

nullnullnullnullthatorbeto84that

nullnullnullnullnullorbeto83that-

nullnullbeto42or-

nullto21be-

isto22is

مثال: پشته با قابلیت تغییر اندازه

Page 28: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

28

لیست پیوندی یا آرایه؟: پیاده سازی پشته

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

است؟بهترپیاده سازیکدام.س

پیوندیلیستباپیاده سازی.ثابتحالتبدتریندرعملهرهزینه یپیوندهاوجوددلیلبهحافظهوزمانیسرباردارای

اندازهتغییرقابلیتباآرایهباپیاده سازی.ثابتعملهرشده یسرشکنهزینه یکمترحافظه یاتالف

Page 29: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

صف

Page 30: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

30

صف

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

ناولیورودی،اولین»اصلازصفدرعناصرحذفودرجکهاستایندرپشتهباصفتفاوت.می کندپیروی«خروجی

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

صفاصلیعملیات.صفانتهایدرعنصریکدرجصفابتدایازعنصریکحذف

Page 31: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

31

واسط صف

QueueOfStringspublic class

()QueueOfStringsصف خالیایجاد یک

enqueue(String s)voidدرج یک عنصر در انتهای صف

dequeue()Stringآنحذف یک عنصر از ابتدا و برگرداندن

isEmpty()booleanبررسی خالی بودن صف

size()intعناصر موجود در صفبرگرداندن تعداد

enqueue

dequeue

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 32: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

32

پیاده سازی با لیست پیوندی: صف

کننگهداریپیوندیلیستدرعنصرآخرینوعنصراولینبهارجاعیک.

to be or not to

null

to

null

to be

null

to be or

null

to be or not

null

be or not to

null

to

be

or

not

to

- to

StdIn StdOut

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 33: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

33

شودبرگرداندهبایدکهعنصریذخیره ی

String item = first.item;

گرهاولینحذف

first = first.next;

شدهذخیرهعنصربرگرداندن

return item;

حذف از صف

to be or

null

first

to be or

null

first

private class Node

{

private String item;

private Node next;

}

کالس درونی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 34: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

34

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

درج در صف

کنذخیرهلیستعنصرآخرینبهارجاعیک

Node oldLast = last;

کنایجادصفانتهایبرایجدیدگرهیک

last = new node();

last.item = “not”;

کنوصلصفانتهایبهراجدیدگره

oldLast.next = last;

oldLast

be or not

null

tofirst

last

to be or

null

first

not

null

last

to be or

null

first

oldLast

Page 35: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

35

پیاده سازی در جاوا: صف

public class LinkedQueueOfStrings {

private Node first, last;

public boolean isEmpty()

{ return first == null; }

public void enqueue(String item) {

Node oldLast = last;

last = new Node();

last.item = item;

if (isEmpty()) first = last;

else oldLast.next = last;

}

public String dequeue() {

String item = first.item;

first = first.next;

if (isEmpty()) last = null;

return item;

}

}

private class Node

{ /* same as before */ }کالس درونی

تمام عملیات صف در . ادعا.می شوندزمان ثابت انجام

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 36: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

36

آرایهوسیله یبهصفپیاده سازی.آرایه یازq[]کناستفادهصفعناصرذخیره یبرای.مکاندرراجدیدعنصر:درجq[rear]کنذخیره.مکاندرواقععنصر:حذفq[front]کنحذفرا.اندیس هایfrontوrearبدهافزایشظرفیتپیمانه یبهرا.کناضافهرااندازهتغییرقابلیتآرایهبه.

پیاده سازی با آرایه: صف

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

nullnullnullnulltimeofbestthenullnullq[]

9876543210

rear

capacity = 10

front

front = (front + 1) % capacity

Page 37: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

37

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

مثال: صف

to

be

or

not

to

- to

StdIn StdOutnullnullnullnullnullnull

rear

front

nullnullnullnullnullto

rearfront

nullnullnullnullbeto

rearfront

nullnullnullorbeto

rearfront

nullnullnotorbeto

rearfront

nulltonotorbeto

rearfront

nulltonotorbenull

rearfront

Page 38: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

38

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

مثال: صف

be

-

-

that

-

- to

StdIn StdOutnulltonotorbenull

rearfront

betonotorbenull

rear front

betonotornullnull

rear front

betonotnullnullnull

rear front

betonotnullnullthat

rear front

betonullnullnullthat

rear front

benullnullnullnullthat

rear front

be

or

not

Page 39: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

39

پیاده سازی صف با آرایه: تمرین

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

آرایهباصفپیاده سازیآرایهشدنبزرگوکوچکقابلیتبا

Page 40: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

40

پیاده سازی صف با آرایه: تمرین

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

public class ResizingArrayQueueOfStrings

{

private String[] q;

private int front;

private int rear;

}

public ResizingArrayQueueOfStrings() { ... }

public void enqueue(String item) { ... }

public void resize(int capacity) { ... }

public String dequeue() { ... }

public int size() { ... }

public boolean isEmpty() { ... }

private int next(int index)

{

return (index + 1) % q.length;

}

Page 41: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

(generics)انواع عمومی

Page 42: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

42

پشته پارامتری

کردیمپیاده سازیرشته هاذخیره یمنظوربهپشتهیکاینجاتا.ازپشته اییاصحیحاعدادازپشته ایاگراما.سURLمی شود؟چهبخواهیم،ها

کن؛تعریفمجزاپشته ییک،داده اینوعهربرای.اولتالشگرددخطابروزبهمنجرمی تواندواستکنندهخستهکدبازنویسی.گرددخطابروزبهمنجرمی تواندواستکنندهخستهنیزکدکردنکپی.

ازقبلتاروشاینjava !بودروشمعقول ترین1.5

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 43: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

43

پشته پارامتری

کردیمپیاده سازیرشته هاذخیره یمنظوربهپشتهیکاینجاتا.ازپشته اییاصحیحاعدادازپشته ایاگراما.سURLمی شود؟چهبخواهیم،ها

نوعازراپشتهعناصر.دومتالشObjectکنتعریف.داریمنوعتبدیلبهنیازکاربرکددر.[نوعهمخوانیعدم].گردداجرازماندرخطابروزباعثمی تواندنوعتبدیل

StackOfObjects s = new

StackOfObjects();

Apple a = new Apple();

Orange b = new Orange();

s.push(a);

s.push(b);

a = (Apple) s.pop(); خطای زمان اجرا

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 44: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

44

پشته پارامتری

کردیمپیاده سازیرشته هاذخیره یمنظوربهپشتهیکاینجاتا.ازپشته اییاصحیحاعدادازپشته ایاگراما.سURL؟می شودچهبخواهیم،ها

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

Stack<Apple> s = new Stack<Apple>();

Apple a = new Apple();

Orange b = new Orange();

s.push(a);

a = s.pop();

s.push(b); خطای زمان کامپایل

عدم نیاز به تبدیل نوع

پارامتر نوع

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 45: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

45

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

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

public class LinkedStackOfStrings {

private Node first = null;

private class Node {

private String item;

private Node next;

}

public boolean isEmpty()

{ return first = null; }

public void push(String item) {

Node oldFirst = first;

first = new Node();

first.item = item;

first.next = oldFirst;

}

public String pop() {

String item = first.item;

first = first.next;

return item;

}

}

public class Stack<Item> {

private Node first = null;

private class Node {

private Item item;

private Node next;

}

public boolean isEmpty()

{ return first = null; }

public void push(Item item) {

Node oldFirst = first;

first = new Node();

first.item = item;

first.next = oldFirst;

}

public Item pop() {

Item item = first.item;

first = first.next;

return item;

}

}

Page 46: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

46

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

public class FixedCapacityStackOfStrings

{

private String[] s;

private int N = 0;

public ..StackOfStrings(int capacity)

{ s = new String[capacity]; }

public int size()

{ return N; }

public boolean isEmpty()

{ return N == 0; }

public void push(String item)

{ s[N++] = item; }

public String pop()

{ return s[--N]; }

}

public class FixedCapacityStack<Item>

{

private Item[] s;

private int N = 0;

public FixedCapacityStack(int capacity)

{ s = new Item[capacity]; }

public int size()

{ return N; }

public boolean isEmpty()

{ return N == 0; }

public void push(Item item)

{ s[N++] = item; }

public Item pop()

{ return s[--N]; }

}

{ s = new Item[capacity]; }

!!!در جاوا ایجاد یک آرایه از انواع عمومی مجاز نیست

شکل نادرست

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 47: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

47

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

public class FixedCapacityStackOfStrings

{

private String[] s;

private int N = 0;

public ..StackOfStrings(int capacity)

{ s = new String[capacity]; }

public int size()

{ return N; }

public boolean isEmpty()

{ return N == 0; }

public void push(String item)

{ s[N++] = item; }

public String pop()

{ return s[--N]; }

}

public class FixedCapacityStack<Item>

{

private Item[] s;

private int N = 0;

public FixedCapacityStack(int capacity)

{ s = new Item[capacity]; }

public int size()

{ return N; }

public boolean isEmpty()

{ return N == 0; }

public void push(Item item)

{ s[N++] = item; }

public Item pop()

{ return s[--N]; }

}

{ s = (Item[]) new Object[capacity]; }

هاItemیک آرایه از ها به Objectتبدیل یک آرایه از

شکل درست

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 48: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

48

تبدیل خودکار به شی: انواع داده ای عمومی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

نمود؟ذخیرهرااولیهداده ایانواعپارامتریپشته یدرمی توانآیا.س

کنندهبندیبستهانواع(Wrapper)

استشینوعازکنندهبندیبستهیکدارایاولیهداده اینوعهر.شی:مثالIntegerاولیه یداده اینوعکنندهبندیبستهintاست.

کنندهبندیبستهنوعبهاولیهداده اینوعیکخودکارتبدیل.خودکاربندیبسته.

Stack<Integer> s = new Stack<Integer>();

s.push(17); // s.push(new Integer(17));

int a = s.pop(); // int a = s.pop().intValue();

Page 49: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

(iterators)تکرارگرها

Page 50: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

50

تکراگرها

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

nullnullnullnullbetonotorbetos[]

9876543210

Ni

be to not or be to

first current

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

واسطپیاده سازی.جاواراه حلIterable

Page 51: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

51

تکرارگرها

شیءیک.سIterableچیست؟

یککهمتدیکباشیهر.جIteratorبرگرداند.

س.Iteratorچیست؟

متدهایدارای.جhasNext()وnext()است.

بایددادهساختمانیکچرا.سIterableباشد؟

زیباوسادهحلقه هاینوشتن.ج

public Interface Iterable<Item>

{

Iterator<Item> iterator();

}

public Interface Iterator<Item>

{

boolean hasNext();

boolean next();

void remove();

}

Iterator<String> it = stack.iterator();

while (it.hasNext())

{

String s = it.next();

StdOut.println(s);

}

for (String s : stack)

StdOut.println(s);

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 52: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

52

پیاده سازی لیست پیوندی: تکرارگر پشته

import java.util.Iterator;

public class Stack<Item> implements Iterable<Item>

{

...

}

public Iterator<Item> iterator()

{ return new ListIterator(); }

private class ListIterator implements Iterator<Item>

{

private Node current = first;

public boolean hasNext() { return current != null; }

public void remove() { /* not supported */ }

public Item next()

{

Item item = current.item;

current = current.next;

return item;

}

}

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 53: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

53

پیاده سازی آرایه: تکرارگر پشته

import java.util.Iterator;

public class Stack<Item> implements Iterable<Item>

{

...

}

public Iterator<Item> iterator()

{ return new ReverseArrayIterator(); }

private class ReverseArrayIterator implements Iterator<Item>

{

private int i = N;

public boolean hasNext() { return i > 0; }

public void remove() { /* not supported */ }

public Item next() { return s[--i]; }

}

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 54: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

54

واسط کیسه

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

[نباشدمهمترتیبکهزمانی].عناصررویتکراروکلکسیونیکبهعناصرافزودن.اصلیکاربرد

Bag<Item> implements Iterable<Item>public class

()Bagایجاد یک کیسه خالی

add(Item x)voidدرج یک عنصر کیسه

size()intهعناصر موجود در کیسبرگرداندن تعداد

<iterator()Iterable<Itemتکراگر بر روی تمام عناصر موجود

( dequeueبدون )یا صف ( popبدون )پشته . پیاده سازی

Page 55: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

کاربردهای پشتهکاربردهای صف

کاربردها

Page 56: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

56

کاربردهای پشته

کامپایلردرتجزیهجاوامجازیماشینعملگرundoواژه پردازیکدروبمرورگریکدربرگشتدکمه یکامپایلریکدرتوابعفراخوانیپیاده سازی...

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 57: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

57

فراخوانی توابع

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

پشتهازمحلیمتغیرهایمقادیروبازگشتآدرسبرداشتن:برگشت

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

public static int gcd(int p, int q) {

if (q == 0) return p;

else return gcd(q, p % q);

}

gcd(216, 192)

public static int gcd(int p, int q) {

if (q == 0) return p;

else return gcd(q, p % q);

}

gcd(192, 24)

public static int gcd(int p, int q) {

if (q == 0) return p;

else return gcd(q, p % q);

}

gcd(24, 0)

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

Page 58: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

58

ارزیابی عبارت های ریاضی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

میانوندیعبارت هایارزیابی.هدف.

[دیکسترا].پشته ایدوالگوریتم

مقدار؛پشته یدردرج:عملوندعملگر؛پشته یدردرج:عملگربگیر؛نادیده:بازپرانتزاصلحوکناعمالعملوندهارویبرراعملگر.کنحذفپشته هارویازعملونددووعملگریک:بستهپرانتز

.کندرجمقدارپشته یدردوبارهرا

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

Page 59: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

59

[دیکسترا].پشته ایدوالگوریتم

مقدار؛پشته یدردرج:عملوندعملگر؛پشته یدردرج:عملگربگیر؛نادیده:بازپرانتزاصلحوکناعمالعملوندهارویبرراعملگر.کنحذفپشته هارویازعملونددووعملگریک:بستهپرانتز

.کندرجمقدارپشته یدردوبارهرا

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

عملوند عملگر

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

Page 60: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

60

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

Page 61: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

61

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1

Page 62: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

62

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

+

1

Page 63: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

63

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

Page 64: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

64

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

Page 65: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

65

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

2

Page 66: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

66

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

+

2

Page 67: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

67

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

3

2 +

Page 68: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

68

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

)

2 +

3

Page 69: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

69

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

2 +

3

Page 70: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

70

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

3+2 = 5

Page 71: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

71

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

5

Page 72: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

72

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

*

5

Page 73: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

73

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

(

5 *

Page 74: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

74

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

4

5 *

Page 75: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

75

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

*

5 *

4

Page 76: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

76

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

5

*

4 *

5

Page 77: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

77

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

4

*

5

*

5

Page 78: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

78

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

*

5*4 = 20

5

Page 79: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

79

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

*

20

5

Page 80: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

80

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

*

20

5

Page 81: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

81

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

20*5 = 100

Page 82: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

82

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

100

Page 83: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

83

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

1 +

100

100+1 = 101

Page 84: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

84

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

100+1 = 101

Page 85: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

85

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

101

Page 86: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

86

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

دارپشته مق لگرپشته عم

نتیجه101

Page 87: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

87

ارزیابی عبارت های میانوندی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

public class Evaluate {

public static void main(String[] args) {

Stack<String> ops = new Stack<String>();

Stack<Double> vals = new Stack<Double>();

while (!StdIn.isEmpty()) {

String s = StdIn.readString();

if (s.equals("(")) ;

else if (s.equals("+")) ops.push(s);

else if (s.equals("*")) ops.push(s);

else if (s.equals(")")) {

String op = ops.pop();

if (op.equals("+")) vals.push(vals.pop() + vals.pop());

else if (op.equals("*")) vals.push(vals.pop() * vals.pop());

}

else vals.push(Double.parseDouble(s));

}

StdOut.println(vals.pop());

}

}

Page 88: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

88

ارزیابی عبارت های ریاضی

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

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

نیستپرانتزهاوجودبهنیازی(معکوسلهستانی)پسوندیشکلدر.2مشاهده ی.

( 1 ( ( 2 3 + ) ( 4 5 * ) * ) + )

1 2 3 + 4 5 * * +

Page 89: Queues And Stacks · 2017. 11. 27. · 2 فص و هتشپ ۱۳۹۵- اههداد نامتخاس- یوض صان دیس.یاهیاپیاهدادعاونا ایشازایا هعومجم:تایوتحم

89

کاربردهای صف

۱۳۹۵-ساختمان داده ها -سید ناصر رضوی

آشناکاربردهای.درپخشلیستiTunes

داده ایبافرهای(سوکت هافایل،خروجیورودی)غیرهمگامداده یانتقال(پردازندهچاپگر،)اشتراکیمنبعیکدردرخواست هاپردازش

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