پشته www.snrazavi.ir ۱۳۹۵ سید ناصر رضوی
پشته و صف 2 پایه ای. داده ای انواع محتویات: اشیا از مجموعه ای عملیات: درج حذف پیمایش آزمایش خالی بودن است. واضح درج از منظور عنصر کدام باید حذف شود stack push queue pop enqueue dequeue
کد کاربر پیاده سازی واسط 3... جداسازی پیادهسازی از واسط. مثال: پشته صف کیسه صف اولویت جدول و نماد مزایا. کد کاربر از جزییات پیادهسازی خبر ندارد در نتیجه میتواند از بین پیادهسازیهای مختلف یکی را انتخاب کند. پیادهسازی از استفاده کنند نیازهای کد کاربر خبر ندارد در نتیجه کدهای کاربر زیادی میتوانند از یک پیادهسازی یکسان. کد کاربر: پیادهسازی: واسط: برنامهای که از عملیات تعریف شده در واسط استفاده میکند. کد واقعی که عملیات تعریف شده در واسط را پیادهسازی میکند. توصیفی از انواع دادهای به همراه عملیات اصلی قابل انجام بر روی آنها.
پشته 4 می شود. انجام پشته باالی نام به طرف یک از و حذف درج عمل آن در که لیستی پشته.»آخرین اصل مبنای بر و حذف درج ورودی اولین خروجی«
واسط پشته 5 رشته ها. از پشته یک دست گرمی. public class StackOfStrings push pop StackOfStrings() ایجاد یک پشته خالی void String boolean push(string s) pop() isempty() درج یک عنصر در باالی پشته حذف عنصر باالی پشته و برگرداندن آن بررسی خالی بودن پشته int size() برگرداندن تعداد عناصر موجود در پشته دنباله ی کردن معکوس مثالی. کاربر کد رشته های خوانده شده ورودی. از
آزمایش درستی عملکرد پشته 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 be.txt be or not be - - that - - - % java StackOfStrings < be.txt be not that or be
پشته: پیاده سازی با لیست پیوندی 7 بده. انجام لیست ابتدای از را و حذف درج کن نگهداری عنصر اولین به ارجاع یک StdIn StdOut first be be or or be not not or be not or be - not or be
حذف از پشته 8 ذخیرهی عنصری باید که برگردانده شود String item = first.item; first = first.next; first or be first or be اولین گره حذف کالس درونی private class Node { private String item; private Node next; شده ذخیره عنصر برگرداندن return item;
درج در پشته 9 Node oldfirst = first; oldfirst کن ذخیره لیست عنصر اولین به ارجاع یک first or be oldfirst کن ایجاد جدید عنصر ذخیره ی برای جدید گره یک first = new node(); first or be کن مقداردهی را جدید گره متغیرهای first.item = not ; first.next = oldfirst; first not or be
پشته: پیاده سازی در جاوا 10 public class LinkedStackOfStrings { private Node first = ; private class Node { private String item; private Node next; کالس درونی public boolean isempty() { return first == ; 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; ادعا. تمام عملیات پشته در زمان ثابت انجام میشوند.
پشته: پیاده سازی به وسیله ی آرایه 11 پیادهسازی پشته به وسیلهی آرایه. از آرایهی []s برای ذخیرهی N عنصر پشته استفاده کن. درج: عنصر جدید را در حذف: عنصر واقع در مکان s[n] مکان 1] s[n ذخیره کن. را حذف کن. s[] be or not be 0 1 2 3 4 5 6 7 8 9 N capacity = 10 پشته از ظرفیت بیشتر عناصر تعداد اگر اشکال. می دهد. رخ باشد سرریز ]در ادامه[
پشته: پیاده سازی در جاوا 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];
مالحظات پشته 13 پاریز. و سرریز در پاریز: پشته ی خالی از هنگام حذف دهید. بروز استثنا یک ادامه[ ]در کنید. بزرگ تر را آرایه اندازه ی سرریز: اتالف حافظه. نیست. نیاز مورد دیگر که به شی ای ارجاع یک نگهداشتن public String pop() { if (isempty()) throw new RuntimeException( Empty stack ); String item = s[--n]; s[n] = ; return item; است. مجاز پوچ یک شیء درج فعلی پیاده سازی در پوچ. اشیای
س س پشته: تغییر اندازه ی آرایه 14 کاربر. کد وسیله ی به پشته اندازه ی تنظیم مشکل. اندازه ی پشته ی جدید چقدر باشد. استراتژی خسیس. یابد: افزایش ثابت مقدار یک اندازه ی به آرایه اندازه ی f(n) = N + c برابر شود: دو آرایه اندازه ی رشد. استراتژی f(n) = N * 2 است بهتر استراتژی کدام.
مقایسه استراتژی های خسیس و رشد 15 استفاده زیر هزینه ی مدل از استراتژی دو این مقایسه ی منظور به می کنیم: است. واحد یک اندازه ی به هزینه ای دارای و می کند اضافه پشته باالی به عنصر جدید یک معمولی: درج عمل f(n) عمل درج ویژه: میکند و سپس یک آرایهی جدید با اندازهی عنصر جدید را در باالی پشته درج ایجاد میکند. میکند هزینهی N عنصر موجود را در این عملیات برابر است آرایهی با: کپی جدید f(n) + N + 1 هزینه ی درج عنصر جدید جدید آرایه ی ایجاد هزینه ی هزینه ی کپی کردن عناصر موجود در آرایه ی جدید
استراتژی خسیس 4) = (c 16 4 + 1 با آرایه یک با اندازه ی صفر شروع می کنیم. 1 1 فاز ۱ 1 8 + 4 + 1 1 1 1 فاز 2 12 + 8 + 1 1 1 1 فاز ۳ 16 + 12 + 1 1 1 1 فاز 4
کارایی استراتژی خسیس 17.c i با است برابر آرایه اندازه ی فاز i در هزینهی کل فاز i برابر است با: c i هزینهی ایجاد آرایه جدید: 1 i c هزینهی کپی کردن عناصر: c هزینهی درج عناصر جدید:.2ci i با است برابر فاز کل هزینه ی نتیجه در برای فازها کل تعداد که آنجا از است برابر عنصر با: است برابر فازها کل هزینه ی نتیجه در با N/c درج N 2c 1 + 2 + + Τ N c O Τ N 2 c
استراتژی رشد 18 فاز 1 0 4 فاز ۱ اندازه ی با آرایه یک با یک شروع می کنیم. 7 1 فاز 2 13 1 1 1 فاز ۳ 25 1 1 1 1 1 1 1 فاز 4
کارایی استراتژی رشد 19. 2 i با است برابر آرایه اندازه ی فاز در i هزینهی کل فاز i برابر است با: 2 i 2 i 1 2 i 1 هزینهی ایجاد آرایه جدید: هزینهی کپی کردن عناصر: هزینهی درج عناصر جدید:.2 i+1 i با است برابر فاز کل هزینه ی نتیجه در برای فازها کل تعداد که آنجا از است برابر عنصر با: است برابر فازها کل هزینه ی نتیجه در با + 1 N lg درج N 2 1 + 2 2 + 2 3 + + 2 lg N+1 = 2 lg N+2 2 = 4N 2 O N
تحلیل سرشکن شده 20 از N تحلیل سرشکن شده. محاسبه ی دنباله ای هزینه عمل. هدف. نشان نسبتا باالیی دادن این که هستند اما در اگرچه کل هر در دنباله عملیات انجام شده برخی از عملها دارای عمل به طور سرشکن شده هزینهی پایینی دارد. هزینه ی روشهای تحلیل سرشکن شده. روش جمع زنی روش حسابداری روش پتانسیل
تحلیل سرشکن شده: مثال 21 محاسبه ی هزینه ی سرشکن شده ی رشد: قابل پشته های در درج عمل هر. زنی. روش جمع مجموع هزینهی N عمل درج همان گونه که دیدید برابر است با - 2 4N نتیجه در هزینه ی سرشکن شده ی است برابر درج عمل هر با O(1). روش حسابداری. در این روش برای انجام پرداخت شده در حساب حساب خود بپردازیم. هب] برخی از عملیات در دنباله هزینهی بیشتری از آنچه که واقعا نیاز است میپردازیم. هزینههای اضافی ما ذخیره میشوند. سپس در هنگام انجام یک عمل پر هزینه میتوانیم مقداری از هزینه را از موجودی شرطی که موجودی مثبت باشد[
تحلیل سرشکن شده به روش حسابداری: مثال 22 می پردازیم. دالر درج عمل هر برای آرایه[ ایجاد هزینه ی گرفتن نظر در ]بدون ۳ 1$ a موجودی 2$ 3$ 2$ a b 3$ 3$ 3$ a b c 3$ 3$ 1$ a b c d 3$ 5$ 5$ a b c d e 3$ 3$ 1$ a b c d e f 3$ 5$ 1$ a b c d e f g 3$ 7$ 1$ a b c d e f g h 3$ 9$ 9$ a b c d e f g h i 3$ 3$
پشته ی قابل رشد: پیاده سازی 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;...
پشته: هزینه سرشکن شده درج 24 هزینه ی درج N ایجاد هزینه ی گرفتن نظر در ]بدون اول. عنصر آرایه جدید[ N + (1 + 2 + 4 + + N) ~ 3N هزینهی کپیها هزینه ی درجها
س پشته ی قابل رشد: کوچک کردن آرایه 25 کنیم کوچک را آرایه اندازه ی. چگونه راهحل اول. درج: وقتی آرایه پر است اندازهی آن را دو برابر میکنیم. حذف: وقتی آرایه نیمه پر است اندازهی آن را نصف میکنیم. در روش این بدترین حالت است! هزینه پر بسیار عملیات از دنباله ای درج حذف درج حذف بگیرید نظر در است پر آرایه که وقتی را و درج حذف... هزینه ای دارای عمل هر این حالت در متناسب با N است!
س پشته ی قابل رشد: کوچک کردن آرایه 26 کنیم کوچک را آرایه اندازه ی. چگونه راهحل کارا. درج: وقتی آرایه پر است اندازهی آن را دو برابر میکنیم. حذف: وقتی یک چهارم آرایه پر است اندازهی آن را نصف می کنیم. public String pop() { String item = s[--n]; s[n] = ; if (N > 0 && s.length = 4 * N) resize( s.length / 2 ); return item;
27 اه هداد نامتخاس - یوضر رصان دیس ۱۳۹۵ - s[] s.length N pop() push() 7 6 5 4 3 2 1 0 1 0 1 1 be 2 2 be or be 4 3 or not or be 4 4 not not or be 8 5 not or be 8 4 - be not or be 8 5 be not or be 8 4 be - or be 8 3 not - that or be 8 4 that or be 8 3 that - be 4 2 or - 2 1 be - is 2 2 is لاثم :هزادنا رییغت تیلباق اب هتشپ
س پیاده سازی پشته: لیست پیوندی یا آرایه 28 است بهتر پیاده سازی کدام. پیادهسازی با لیست پیوندی. هزینهی هر عمل در بدترین حالت ثابت دارای سربار زمانی و حافظه به دلیل وجود پیوندها پیادهسازی با آرایه با قابلیت تغییر اندازه. هزینهی سرشکن شدهی هر عمل ثابت اتالف حافظهی کمتر
صف
صف 30 تفاوت صف با پشته در این خروجی«پیروی میکند. اولین ورودی»اولین اصل از صف در عناصر حذف و درج که است به عبارت دیگر هر زمان که بخواهیم میتوانیم یک عنصر به انتهای صف اضافه کنیم اما در هنگام حذف تنها اجازه داریم اولین عنصر )عنصری که بیشتر از بقیهی عناصر در صف بوده است( را از صف حذف کنیم. عملیات اصلی صف. درج یک عنصر در انتهای صف حذف یک عنصر از ابتدای صف
واسط صف 31 enqueue public class QueueOfStrings QueueOfStrings() ایجاد یک صف خالی void درج یک عنصر در انتهای صف (s enqueue(string String dequeue() حذف یک عنصر از ابتدا و برگرداندن آن boolean isempty() بررسی خالی بودن صف int size() برگرداندن تعداد عناصر موجود در صف dequeue
صف: پیاده سازی با لیست پیوندی 32 پیوندی لیست در عنصر آخرین و عنصر اولین به ارجاع یک کن. نگهداری StdIn StdOut be be or be or not be or not be or not - be or not
حذف از صف 33 ذخیره ی عنصری باید که برگردانده شود String item = first.item; گره اولین حذف first = first.next; کالس درونی first first be or be or private class Node { private String item; private Node next; شده ذخیره عنصر برگرداندن return item;
درج در صف 34 Node oldlast = last; oldlast last کن ذخیره لیست عنصر آخرین به ارجاع یک first be or برای جدید گره یک کن ایجاد انتهای صف last = new node(); last.item = not ; oldlast last first be or not را جدید گره به انتهای صف وصل کن oldlast.next = last; first be or not
صف: پیاده سازی در جاوا 35 public class LinkedQueueOfStrings { private Node first, last; private class Node { /* same as before */ کالس درونی public boolean isempty() { return first == ; 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 = ; return item; ادعا. تمام عملیات صف در زمان ثابت انجام میشوند.
صف: پیاده سازی با آرایه 36 پیاده سازی صف آرایه. وسیله ی به از آرایهی []q برای ذخیره ی عناصر صف کن. استفاده front = (front + 1) % capacity درج: عنصر جدید را در مکان q[rear] حذف: عنصر واقع ذخیره کن. در مکان q[front] را حذف کن. اندیسهای front و rear را به پیمانه ی ظرفیت بده. افزایش کن. اضافه را اندازه تغییر قابلیت آرایه به q[] the best of time 0 1 2 3 4 5 6 7 8 9 front rear capacity = 10
صف: مثال 37 rear front StdIn StdOut front rear be front be rear or front be or rear not front be or not rear front be or not rear - front be or not rear
صف: مثال 38 front rear StdIn StdOut be or not be rear front be or not be - be rear front or not be - or rear front not be that that rear front not be - not that rear front be - that rear front be
تمرین: پیاده سازی صف با آرایه 39 پیاده سازی صف آرایه با بزرگ شدن و کوچک قابلیت با آرایه
تمرین: پیاده سازی صف با آرایه 40 public class ResizingArrayQueueOfStrings { private String[] q; private int front; private int rear; public ResizingArrayQueueOfStrings() {... public int size() {... public boolean isempty() {... public void enqueue(string item) {... public String dequeue() {... public void resize(int capacity) {... private int next(int index) { return (index + 1) % q.length;
انواع عمومی (generics)
پشته پارامتری 42 س ذخیره ی منظور به پشته یک اینجا تا رشته ها پیاده سازی کردیم. URL ها از پشته ای یا اعداد صحیح از پشته ای اگر اما بخواهیم چه می شود. تالش اول. برای هر نوع دادهای یک پشتهی مجزا تعریف کن بازنویسی کد خسته کننده است و میتواند منجر به بروز خطا گردد. کپی کردن کد نیز خسته کننده است و میتواند منجر به بروز خطا گردد. از قبل تا روش این java 1.5 معقول ترین بود! روش
پشته پارامتری 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(); خطای زمان اجرا
پشته پارامتری 44 س ذخیره ی منظور به پشته یک اینجا تا رشته ها پیاده سازی کردیم. از URL پشته ای یا اعداد صحیح از پشته ای اگر اما بخواهیم چه ها می شود. تالش سوم. انواع از استفاده عمومی جاوا. اجتناب از تبدیل نوع در کد کاربر. تشخیص خطاهای مربوط به عدم همخوانی کامپایل. زمان در انواع پارامتر نوع Stack<Apple> s = new Stack<Apple>(); Apple a = new Apple(); Orange b = new Orange(); s.push(a); s.push(b); a = s.pop(); خطای زمان کامپایل عدم نیاز به تبدیل نوع
پشته ی پارامتری: پیاده سازی با لیست پیوندی 45 public class LinkedStackOfStrings { private Node first = ; private class Node { private String item; private Node next; public boolean isempty() { return first = ; public void push(string item) { Node oldfirst = first; first = new Node(); first.item = item; first.next = oldfirst; public class Stack<Item> { private Node first = ; private class Node { private Item item; private Node next; public boolean isempty() { return first = ; public void push(item 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 Item pop() { Item item = first.item; first = first.next; return item;
پشته ی پارامتری: پیاده سازی با آرایه 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 class FixedCapacityStack<Item> { private Item[] s; private int N = 0; public FixedCapacityStack(int capacity) { s = new new Item[capacity]; Item[capacity]; public int size() { return N; public boolean isempty() { return N == 0; public void push(item item) { s[n++] = item; public String pop() { return s[--n]; public Item pop() { return s[--n]; شکل نادرست در جاوا ایجاد یک آرایه از انواع عمومی مجاز نیست!!!
پشته ی پارامتری: پیاده سازی با آرایه 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 class FixedCapacityStack<Item> { private Item[] s; private int N = 0; public FixedCapacityStack(int capacity) { s = (Item[]) new Item[capacity]; new Object[capacity]; public int size() { return N; public boolean isempty() { return N == 0; public void push(item item) { s[n++] = item; public String pop() { return s[--n]; public Item pop() { return s[--n]; شکل درست تبدیل یک آرایه از Object ها به یک آرایه از Item ها
س انواع داده ای عمومی: تبدیل خودکار به شی 48 پشته ی در می توان آیا نمود ذخیره را اولیه داده ای انواع پارامتری. انواع بسته بندی کننده (Wrapper) هر نوع دادهای اولیه دارای یک بسته بندی کننده از نوع شی است. مثال: شی Integer بسته بندی کننده نوع دادهای اولیهی int است. بسته بندی خودکار. تبدیل خودکار کننده. بندی بسته نوع به اولیه داده ای نوع یک Stack<Integer> s = new Stack<Integer>(); s.push(17); int a = s.pop(); // s.push(new Integer(17)); // int a = s.pop().intvalue();
تکرارگرها (iterars)
تکراگرها 50 چالش طراحی. بازنمایی داخلی اجازه پشته دادن به کد کاربر برای حلقه و جزییات پیادهسازی آن. کردن آشکار بدون پشته عناصر روی بر زدن i N s[] be or not be 0 1 2 3 4 5 6 7 8 9 first current be not or be Iterable راه حل جاوا. پیاده سازی واسط
تکرارگرها 51 public Interface Iterable<Item> { Iterar<Item> iterar(); س. یک شیء Iterable چیست ج. هر شی با یک متد که یک Iterar برگرداند. public Interface Iterar<Item> { boolean hasnext(); boolean next(); void remove(); Iterar<String> it = stack.iterar(); while (it.hasnext()) { String s = it.next(); StdOut.println(s); س. Iterar چیست دارای ج. متدهای hasnext() و next() س. چرا یک ساختمان باید داده است. Iterable باشد ج. نوشتن حلقه های ساده زیبا و for (String s : stack) StdOut.println(s);
تکرارگر پشته: پیاده سازی لیست پیوندی 52 import java.util.iterar; public class Stack<Item> implements Iterable<Item> {... public Iterar<Item> iterar() { return new ListIterar(); private class ListIterar implements Iterar<Item> { private Node current = first; public boolean hasnext() { return current!= ; public void remove() { /* not supported */ public Item next() { Item item = current.item; current = current.next; return item;
تکرارگر پشته: پیاده سازی آرایه 53 import java.util.iterar; public class Stack<Item> implements Iterable<Item> {... public Iterar<Item> iterar() { return new ReverseArrayIterar(); private class ReverseArrayIterar implements Iterar<Item> { private int i = N; public boolean hasnext() { return i > 0; public void remove() { /* not supported */ public Item next() { return s[--i];
واسط کیسه 54 نباشد[ مهم ترتیب که ]زمانی عناصر. روی تکرار و کلکسیون یک به عناصر افزودن اصلی. کاربرد public class Bag<Item> implements Iterable<Item> void Bag() add(item x) ایجاد یک کیسه خالی درج یک عنصر کیسه int size() برگرداندن تعداد عناصر موجود در کیسه Iterable<Item> تکراگر بر روی تمام عناصر موجود iterar() )dequeue پیاده سازی. )بدون )pop پشته )بدون یا صف
کاربردها کاربردهای پشته کاربردهای صف
کاربردهای پشته 56 تجزیه در کامپایلر ماشین مجازی جاوا undo در عملگر یک واژهپرداز دکمهی برگشت در یک مرورگر وب پیادهسازی فراخوانی توابع در یک کامپایلر...
فراخوانی توابع 57 چگونه کامپایلر اجرای توابع را ممکن میسازد فراخوانی تابع: ذخیره مقادیر متغیرهای محلی و آدرس بازگشت در پشته برگشت: برداشتن آدرس بازگشت و مقادیر متغیرهای محلی از پشته public static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, gcd(192, p % q); 24) gcd(216, 192) public static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, gcd(24, p % q); 0) تابع بازگشتی. تابعی که خودش را فراخوانی میکند. همواره میتوان از پشته برای حذف فراخوانیهای بازگشتی نمود. استفاده public static int gcd(int p, int q) { if (q == 0) return p; else return gcd(q, p % q);
ارزیابی عبارت های ریاضی 58 ارزیابی هدف. عبارت های میانوندی. ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) ) الگوریتم دو پشتهای. ]دیکسترا[ عملوند: درج در پشتهی مقدار عملگر: درج در پشتهی عملگر پرانتز باز: نادیده بگیر پرانتز بسته: یک عملگر و دو عملوند را دوباره در پشتهی مقدار درج کن. حاصل و کن اعمال عملوندها روی بر را عملگر کن. حذف پشته ها روی از
ارزیابی عبارت های میانوندی 59 الگوریتم دو پشتهای. ]دیکسترا[ عملوند: درج در پشتهی مقدار عملگر: درج در پشتهی عملگر پرانتز باز: نادیده بگیر پرانتز بسته: یک عملگر و دو عملوند را دوباره در پشتهی مقدار درج کن. حاصل و کن اعمال عملوندها روی بر را عملگر کن. حذف پشته ها روی از ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) ) عملگر عملوند
ارزیابی عبارت های میانوندی 60 پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 61 پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 62 1 پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 63 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 64 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 65 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 66 2 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 67 2 + 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 68 3 2 + 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 69 3 2 + 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 70 2 + 3 = 5 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 71 5 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 72 5 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 73 5 * 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 74 5 * 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 75 4 5 * 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 76 4 * 5 * 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 77 5 4 * 5 * 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 78 5 * 1 + 4 * 5 = 20 پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 79 5 * 1 + 20 پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 80 20 5 * 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 81 5 * 20 = 100 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 82 100 1 + پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 83 100 1 + 1 + 100 = 101 پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 84 1 + 100 = 101 پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 85 101 پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 86 101 نتیجه پشته عملگر پشته مقدار ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
ارزیابی عبارت های میانوندی 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());
ارزیابی عبارت های ریاضی 88 مشاهده ی ۱. عبارت های برای پشته ای دو الگوریتم می کند. عمل درست نیز پسوندی ( 1 ( ( 2 3 + ) ( 4 5 * ) * ) + ) مشاهده ی 2. در شکل پسوندی )لهستانی نیست. پرانتزها وجود به نیازی معکوس( 1 2 3 + 4 5 * * +
کاربردهای صف 89 کاربردهای آشنا. لیست پخش در itunes بافرهای دادهای انتقال دادهی غیرهمگام )ورودی خروجی فایل سوکتها( پردازش درخواستها در یک منبع اشتراکی )چاپگر پردازنده( شبیه سازی واقعی. دنیای ترافیک تحلیل و تجزیه بانک در مشتری ها انتظار زمان تعیین تعداد صندوق دارهای الزم در یک ابرفروشگاه