فغ ٍ ِتطپ :مَس لػفresearch.iaun.ac.ir/pd/ajoudanianold/pdfs/HomeWork_1490.pdfpostfix...
Transcript of فغ ٍ ِتطپ :مَس لػفresearch.iaun.ac.ir/pd/ajoudanianold/pdfs/HomeWork_1490.pdfpostfix...
Stacks and Queues
غف پطت :سم فػل آجزایبى ضط :هسضس
فطز عطفبی علی :هسضس زستیبض
By: Shohreh Ajoudanian, Ph.D. Candidate
Teacher assistant: Ali Erfani Fard
زاطگب آظاز اسالهی احس جف آثبز
92ظهستبى
پطت يک اظ حصف جبيگصاضي ک ثبضس هی ضس هطتت بي لیست اظ ذبغی حبلت ب پطت•
.گیطز هی غضت ، ضز هی بهیس (ثبال) top ک آى سوت
.ضز هی بهیس یع LIFO (Last-In , First-Out) لیست يک پطت•
A
B
C Top
Top
Top
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 2
پطت
bottom
top
C
A
B
D
E
F
ي پاييىی عىصز ، ماوىد ای پشت در .باشد می بااليی عىصز
10,..., naaS0a1na
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 3
(ADT)ع زاز ي اتعاعی هسلسبظي : هثبلADT اظ يک سیستن ذطيس
: فطش سبز فطش ستس /زاز بي شذیط ضس، سفبضضبت ذطيس
عولیبت بي هجز عجبضتس اظ:
• order buy(stock, shares, price)
• order sell(stock, shares, price)
• void cancel(order)
ضعیت بي ذغب فطش يک کبالي بهجز/ذطيس• کسل کطزى يک سفبضش بهجز•
abstract data type (ADT) يک هفم اتعاعی اظ
.سبذتوبى زاز است
ADT هاضز ظيط ضا هطرع هی کس: زاز بي شذیط ضس
عولیبت ثط ضي زاز ب
ضعیت ذغببي هطثط ث عولیبت ب
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 4
Stack ADT
•Stack ADT عاصش تا ع دلخای سا رخیش هی کذ
عولیات دسج حزف دس آى، اص قاى •
last-in first-out پیشی هی کذ.
هاذ استا ای اص تطقاب ای سی ن چیذ • .ضذ است
:تاتع اصلی پطت •– push(object)
یک عصش جذیذ دسج هی کذ – object pop()
آخشیي عصش سا حزف ، هقذاس آى سا تشهی گشداذ
:تاتع کوکی پطت •– object top():
عصش تاالی پطت سا تذى حزف کشدى، تشهی گشداذ
– integer size():
تعذاد عاصش رخیش ضذ سا تشهی گشداذ
– boolean isEmpty():
طاى هیذذ ک آیا پطت خالی است یا
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 5
Stack Interface in Java •Stack Interface جبا ، هطبث زض
Stack ADT است.
ثبيس کالس •EmptyStackException زض آى
. تعطيف ضز
هجز زض کتبثرب بي Stackثب کالس • . هتفبت است( java.util.Stack)جبا
public interface Stack {
public int size();
public boolean isEmpty();
public Object top() throws EmptyStackException;
public void push(Object o);
public Object pop() throws EmptyStackException;
}
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 6
Exceptions استثبب
زض Stack ADT عولیبت بي pop top ثزى ذبلی غضت زض
.ضس اجطا وی تاس پطت،
عولیبت اجطاي ثبضس، ذبلی پطت اگط pop top استثبء فطاذای ثبعث
EmptyStackException .هی ضز
بي عولیبت اجطاي زض ADT ک زس ضخ ذغب است هوکي گبی
. هی گيس استثبء ب آى ث
ک بيی عولیبت تسظ استثبب تلیس ضس، اجطا وی تاس
.ضس هی
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 7
ثطبه بيی ک اظ پطت استفبز هی کس
هستقین بي ثطبه ي ة هطضگطبي زض ضس زيس غفحبت تبضيرچ
قسوت Undo هتي يطايطگط بي ثطبه زض
جبا هجبظي هبضیي زض ضس فطاذای هتسبي سلسل
هستقین غیط بي ثطبه ب الگضيتن زض کوکی زاز سبذتوبى
ب زاز سبذتوبى زض زيگط بي هؤلف
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 8
ي هتس زض JVMپطت ث ضا فعبل هتسبي سلسل (JVM) جبا هجبظي هبضیي•
ي .هی کس کتطل پطت سیل
ضبهل قبثی JVM هی ضز، فطاذای هتس يک ک گبهی• :هی کس push پطت زض ضا ظيط هاضز
ثبظگطتی هقبزيط هحلی هتغیطبي–
.هی کس پیگیطي ضا ضس اجطا زستضات ک ثطبه، ضوبضس ي–
pop پطت اظ چبضچة ايي يبثس، هی ذبتو هتس ک ظهبی• است، پطت top زض ک هتسي ث ثطبه کتطل هی ضز
.هی گطزز ثبظ
فطان ضا ثبظگطتی هتسبي اظ استفبز اهکبى وچیي• .هی کس
main( ) { int i = 5;
foo(i);
}
foo(int j) {
int k;
k = j+1;
bar(k);
}
bar(int m) {
…
}
bar PC = 1
m = 6
foo PC = 3
j = 5
k = 6
main PC = 2 i = 5
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 9
پطت بي آضاي اي
يک ضا سبز ثطاي پیبز سبظي •Stack ADT استفبز اظ آضاي است.
.عبغط اظ چپ ث ضاست اضبف هی ضس•
پطت، topاسيس عػط هجز زض • .تسظ يک هتغیط گ زاضي هی ضز
S 0 1 2 t
…
Algorithm size( ) return t + 1
Algorithm pop( ) if isEmpty( ) then
throw EmptyStackException
else
t t 1
return S[t + 1]
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 10
(ازاه)پطت بي آضاي اي کس، هی شذیط ضا پطت عبغط ک اي آضاي•
.ضز پط است هوکي
استثبءpush عولیبت غضت، ايي زض•FullStackException کس هی تلیس ضا.
هحسزيت زاضاي آضاي تسظ پطت سبظي پیبز– .است
سبظي پیبز ع ايي زض فقظ هحسزيت، ايي– Stack ADT ذز ث هطثط زاضز جز .یست
S 0 1 2 t
…
Algorithm push(o)
if t = S.length 1 then
throw FullStackException
else
t t + 1
S[t] o
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 11
کبضايی هحسزيت ب
کبضايی: تعساز n است سبظي شذیط قبثل پطت زض عػط.
ثب است ثطاثط ضس اضغبل فضبي O(n)
ظهبى هست زض عولیبت ط O(1) هی ضز اجبم.
ب هحسزيت: یست تغییط قبثل ضز تعییي قجل اظ ثبيس پطت سبيع حساکثط.
استثبء يک تلیس ثبعث است، ضس پط ک اي پطت ث جسيس عػط کطزى اضبف (Exception) زض ذبظ .هی ضز سبظي پیبز
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 12
Array-based Stack in Java
public class ArrayStack implements Stack {
// holds the stack elements
private Object S[ ];
// index to top element
private int top = -1;
// constructor
public ArrayStack(int capacity) {
S = new Object [capacity] ; }
public Object pop()
throws EmptyStackException {
if isEmpty()
throw new EmptyStackException
(“Empty stack: cannot pop”);
Object temp = S[top];
// facilitates garbage collection
S[top] = null;
top = top – 1;
return temp;
}
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 13
Array-based Stack in Java public void push ( Object Obj )
throws FullStackExeption {
if ( size() == capacity )
throw new FullStackExeption
(“Stack is full.”) ;
S[++top] = Obj ;
}
public Object top () {
return S [top] ;
}
public int size () {
return ( top + 1 ) ;
}
public boolean isEmpty () {
return ( top > 0 ) ;
}
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 14
کبضثطزبي پطت
ثبظگطتی بي ثطبه•
پطاتعب تغجیق•
هحبسجبتی عجبضات هحبسج•
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 15
ثطبه بي ثبظگطتی
زض آى اظ استفبز پطت، کبضثطزبي اظ يکی Trace است ثبظگطتی بي ثطبه کطزى.
ي يک .هی ضز حل کچکتط هسبئل ث ضسى ضکست ثب ثبظگطتی، هسئل
زاضس اغلی يژگی ز ثبظگطتی، تاثع :
کچکتط آضگهبى ثب الجت هی ظس، غسا ضا ذزش تبثع
زاضز جز ب فطاذای اتوبم جت ضطط يک
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 16
ثطبه بي ثبظگطتی
ي سبظي، هطتت بي الگضيتن اظ بيی و ... بي ثطج فیجبچی، سطي م،.م.ة هحبسج
.ستس ثبظگطتی بي ثطبه
ي .است ثبظگطتی بي ثطبه ثطاي هثبل تطيي هتسال فبکتضيل، هحبسج
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 17
int fact (int n) {
if (n == 0 )
return 1;
return ( n * fact( n-1) ) ;
}
ثطبه بي ثبظگطتی
. کیس هحبسج ضا F(3,6) ذطجی ظيط، تبثع زض : هثبل
: حل
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 18
Public Static int F ( int m , int n ) {
if ( m == 1 || n == 0 || m == n )
return 1;
else
return F ( m-1 , n ) + F ( m-1 , n-1 ) ;
}
F(3,6)
F(2,6) + F(2,5)
F(1,6) + F(1,5) F(1,5) + F(1,4)
F(2,6) = F(1,6) + F (1,5)
F(1,6) = 1
F(3,6) = F(2,6) + F(2,5)
F(1,5) = 1
F(2,5) = F(1,5) + F (1,4)
F(1,4) = 1
F(3,6) = 4
1 1
2 2 4: پبسد
F(1,5) = 1
تغجیق پطاتعب
ثبضس زاضت هغبثقت ” [ ” يب ” } ” ، ” ) ” ثب ثبيس ] “ ” يب “ { ” ، “ ( ” ط. زضست : ( )(( )){([( )])}
زضست : ((( )(( )){([( )])}
غلظ : )(( )){([( )])}
غلظ : ({[ ])}
غلظ : (
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 19
Parentheses Matching Algorithm Algorithm ParenMatch(X,n):
ي : inputعسز يب هحبسجبتی عولگط هتغیط، ، ثسي گط بي وبز ضبهل ، X تبيی n آضاي ي . هی گطزاس ثط true ثبضس زاضت تغبثق ن ثب ثسي گط وبزبي توبم اگط تب اگط Output : . ثبضس ذبلی هی تاس Sآضاي
for i=0 to n-1 do
if X[i] is an opening grouping symbol then
S.push(X[i])
else if X[i] is a closing grouping symbol then
if S.isEmpty() then
return false {nothing to match with}
if S.pop() does not match the type of X[i] then
return false {wrong type}
if S.isEmpty() then
return true {every symbol matched}
else
return false {some symbols were never matched}
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 20
عجبضات هحبسجبتیاضظيبثی جبي ث وی کس استفبز هیبسي ثبظوبيی اظ عجبضات اضظيبثی ثطاي کبهپبيلطب•
ثطس هی کبض ث ضا پسسي ثبظوبيی آى
Postfix:
no parentheses,
no precedence
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 21
postfixث infixتجسيل زستی عجبضت .کین هی پشاتضگزاسی کاهل طس ت عولگشا الیت ت تج تا سا عثاست اتتذا1.
.ساصین هی هتقل خدش پشاتض ساست سوت ت سا عولگش ش2.
.کین هی حزف سا پشاتضا توام3.
.ضد هی ظاش اش هشتط عولذای اص قثل عولگش ش prefix سش دس تشتیة ویي ت•
.داسین عولگش حتوا چپ سوت دس prefix دس عولگش حتوا ساست سوت دس postfix دس :کت•
(هثال
Infix: a+b*c^d
Postfix: abcd ^*+
Prefix: +a*b^cd
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 22
هثبل
• Infix: (a+b) *(a-b)+x
• Postfix: ab+ab-*x+
• Prefix: +*+ab-abx
• Infix: (a+b*c) / (d*e-f)
• Postfix: abc*+de*f-/
• Prefix: /+a*bc-*def
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 23
تکلیف
• Infix: ((((a/b)-c)+(d*e)) – (a*e))
• Postfix: ?
• Prefix: ?
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 24
پاسخ عبارت است اس
postfixعجبضات اضظيبثی
string: 6 2/3-4 2*+
STACK
0
1
2
می شدرشت اوجام ريی فقط يک پيمايش اس چپ ب راست اس
top
6 2 / 3 - 4 2 * +
عملگز ويست آن را ب پشت اضاف کىيد
6
شودtop+1اکنون بايد
عملگز ويست آن را ب پشت 2 اضاف کىيد
عملگز است دي عملود اس پشت حذف کىيد
شودtop-2اکنون بايد
حاصل عبارت را با عملگز مزبط ب دست آيرد ي در پشت قزار ديد
6/2
عملگز ويست آن را ب پشت 3 اضاف کىيد
عملگز است دي عملود اس پشت حذف کىيد
6/2-3
عملگز ويست آن را ب پشت 4 اضاف کىيد
عملگز ويست آن را ب پشت اضاف کىيد
2 عملگز است دي عملود اس
2*4 پشت حذف کىيدعملگز است دي عملود اس
پشت حذف کىيد
6/2-3+4*2
پشت را خالی . پايان رشت .کزد ي پاسخ را ارائ ديد
شودtop-1اکنون بايد
6 / 2 - 3 + 4 * 2
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 25
prefixاضظيبثی عجبضات .ضد هی پیص چپ ت ساست اص عثاست prefix عثاسات دس•
هعشفی لکاسیچ ام ت لستای داى سیاضی سا پیطذی وایص ک آجایی اص• ت تشتیة ویي ت .گیذ هی یض polish سش prefix سش ت است کشد
postfix هعکس لستای سش (Reverse Polish Notation – RPN) یض .ضد هی گفت
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 26
تبديل کنيدپسوندی رشته زير را به فرم
a / b - c + d * e - a * c
کىيدپزاوتشگذاری عبارت را ب صرت کامل ( 1
a / b - c + d * e - a * c
((((a / b) - c) + (d * e)) - (a * c))
ی ( 2 .شود میعملگزا جايگشيه پزاوتش راست متىاظز خد م ((((a / b) - c) + (d * e)) - (a * c))
.پزاوتشا را حذف کىيدی م( 3
a b / c - d e * + a c * - يکسان استپسوندی و ميانوندی ترتيب عملوندها در فرم
/ - *
+ * -
پسسيث عجبضتبي هیبسي تجسيل
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 27
تجسيل عجبضتبي هیبسي ث پسسي پسسي ث هیبسي ضضت تجسيل الگضيتن•
فطضیبت–
– operators: (, ), +, -, *, /, %
– operands: single digit integer or variable of one character
کیس پیوبيص ضاست ث چپ اظ ضا ضضت.
ضس هی ضت ذطجی زض هستقیوب عولسب.
آب پطت زاذل اليت ک هبزاهی پطت زاذل عولگطبي in-stack precedence (isp) اظ است incoming precedence (icp) جسيس عولگط ضزي اليت هسبي يب ثعضگتط .ضس هی ذبضج پطت
‘(‘ زاضاي isp پبيیي icp است ثبال.
ث تجسيل زض prefix ثبضس ن ضي پطت زض ک ساضز اضکبلی هسبي تقسم هضز زض. By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 28
a+*c
abc*+
a*(b+c)*d abc+*d*
مثال
پسسيث عجبضتبي هیبسي تجسيل
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 29
هثبل1. a+ b*(c/(d+e))*f
2. a+b/c^d-e*k
.کیس هحبسج ضا پطت عل حساکثط3.
(x*(a+b*c)-d)
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 30
تکلیف صست ت سا اعذاد اص لیستی پطت د کوک ت ک تیسیذ Java صتاى ت ای تشاه•
.(عصش 20 حذاکثش) کذ هشتة صعدی
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 31
By: Shohreh Ajoudanian Email: [email protected] TA: Ali Erfanifard
Data Structures
By: Shohreh Ajoudanian, Ph.D. Candidate, Ali Erfanifard 32