فاﺪﻫا - shahed.ac.ir€¦ · (prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... postfix ﻪﺑ infix...

49
ﻮم ﻓﺼ: ﺸﺘﻪ وﭘ ﺻﻒ اﻫﺪاف ﭘﺸﺘﻪ ﺑﺎﺷﻨﺎﻳﻲ آ اﻫﺪاف ﺻﻒ ﺑﺎﺷﻨﺎﻳﻲ آ ارزﺷﻴﺎﺑﻲ ﻋﺒﺎرات ﻋﺒﺎرات ارزﺷﻴﺎﺑﻲ ﺻﻔﺤﻪ1

Upload: others

Post on 01-May-2020

21 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

صف وپشته:فصل سوم وم وپلاهداف

آشنايي با پشتهاهداف

آشنايي با صفعبارات ارزشيابي عباراتارزشيابي

1صفحه

Page 2: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

سوم صف:فصل و پشته پشته و صف:فصل سوم

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

پشته يك ليست مرتب شده اي است كه جايگذاري و حذف از يكپشتهپشته

.ناميده مي شود ، صورت مي گيرد)باال(topسمت آن كه

عنصر پاييني و ، در پشته اي مانندميباشد بااليي .عنصر10 ,..., −= naaS0a1−na. عنصر بااليي مي باشد

2صفحه

Page 3: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

پشتهپشته

محدوديت كار با پشته ما را ملزم مي كند كه اگر عناصر A،B،C،D،E، كنيم اضافه پشته به ترتيب به خواهدEرا عنصري اولين A،B،C،D،E، را به ترتيب به پشته اضافه كنيمE اولين عنصري خواهد

.بود كه كه از پشته حذف مي گردد

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

.مي شناسيم)خروجي يم)روجي ي

3صفحه

Page 4: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

پشتهپشته

← top

D

E

D D← top ←top

BC

← top ← top D

C

D

C

D

C

A

B

AB

A

← top B

A

B

A

B

AA A A A

حذف و جايگذاري عناصر در يك پشته

4صفحه

Page 5: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

پشته سازي پياده سازي پشتهپياده، استفاده از يك آرايه يك بعدي به نام ADTراحت ترين روش پياده سازي اين

items[MAX STACK SIZE]كه ت MAX]ا STACK SIZE]داد ت حداكث items[MAX_STACK_SIZE]است كه[MAX_STACK_SIZE] حداكثر تعداد. عناصر آرايه مي باشد

امين عنصر در iو items[1]ذخيره، دومي درitems[0]اولين يا پايين ترين عنصر پشته در items[i-1]ذخيره مي گردد.

.وجود دارد كه به عنصر بااليي پشته اشاره مي كند topهمراه با آرايه ، يك متغير به نام ا ااtا ال ك ا ك ا . داده مي شود كه نشان دهنده يك پشته خالي است-1مقدارtopدر ابتدا به

5صفحه

Page 6: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

#define MAX_STACK_SIZE 100

template<class Type>پياده سازي پشتهپياده سازي پشته

template class Type

class stack

{{

public:

stack();stack();

void push(const Type&);

Type* pop(Type&);Type pop(Type&);

int IsEmpty();

int IsFull();int IsFull();

private:

int m Top;int m_Top;

Type items[MAX_STACK_SIZE];

};

6صفحه

};

Page 7: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

template<class Type>

stack<Type>::stack()پياده سازي پشتهپياده سازي پشته

stack Type ::stack()

{ m_Top = -1; }

void stack<Type>::push(const Type& x)

{ items[ ++m_Top ] = x; }

Type* stack<Type>::pop(Type& x)

{

if(IsEmpty()) return NULL;

x = items[ m_Top-- ];

return &x;

}}

int stack<Type>::IsEmpty()

{ return (m Top == -1); }{ return (m_Top 1); }

int stack<Type>::IsFull()

{ return (m_Top == MAX_STACK_SIZE -1) ; }

7صفحه

Page 8: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

(Queue)صف (Queue)صف

صفصفصف يك ليست است كه تمامي جايگذاري آن از يك سمت و تمام

.حذف هاي ان از سمت ديگر انجام مي شود و ي م ج ر ي ز ن ي

Qa و (front)، عنصر ابتدا درصفانتها و(rear)عنصر باشد كنارم دارددر قرار110 ,...,, −= naaaQ0a1−na

1+iaia قرار دارد در كنار مي باشد و(rear)عنصر انتها(0≤ i < n-1)

1+iia

8صفحه

Page 9: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

صفصف

را به ترتيب اضافه مي كنيم در A،B،C،D محدوديت صف اين است كه ما ين ي رو يم ي يب ر ب ر.اولين عنصري است كه حذف مي شود Aحالي كه

Drear

← rear

C

B

C

B

D

C← rear

← rear ← rear

A

B

A

B

A← rearB

A

C

B

← rear

f t front f t front← front ← front ← front ← front ← front

درج و حذف عناصر از يك صف9صفحه

Page 10: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

صفصف

كه است عنصري اولين ، صف يك به شده وارد اولين كه آنجا از آنجا كه اولين وارد شده به يك صف ، اولين عنصري است كهازاولين ( FIFOFIFOليست هاي ليست هاي خارج مي شود ، صف را به عنوان

خ ن ل ا ند)د گ نظ د .در نظر مي گيرند) ورودي، اولين خروجي

10صفحه

Page 11: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

#define MAX_Queue_SIZE 100

template<class Type>پياده سازي سادهپياده سازي ساده

template class Type

class SimpleQueue

{{

public:

SimpleQueue ();SimpleQueue ();

void Add(const Type&);

Type* Delete(Type&);Type Delete(Type&);

int IsEmpty();

int IsFull();int IsFull();

private:

int m Rear;int m_Rear;

Type items[MAX_Queue_SIZE];

};

11صفحه

};

Page 12: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

SimpleQueue <Type>:: SimpleQueue ()

{ m_Rear = ٠ ; } پياده سازي صف سادهپياده سازي صف سادهvoid SimpleQueue <Type >::Add(const Type& x)

{

if( IsFull() ) return;if( IsFull() ) return;

items[m_Rear++] = x;

}

T * Si l Q T D l t (T & )Type* SimpleQueue <Type >::Delete(Type& x)

{

if(IsEmpty()) return NULL;

x = items[0];

for(int i =1 ; i<m_Rear;i++)

items[i-1]=items[i];[ ] [ ];

m_Rear--;

return &x;

}}

int SimpleQueue <Type >::IsEmpty()

{ return (m_Rear==0 ); }

12صفحه

int SimpleQueue <Type >::IsFull()

{ return ((m_Rear + 1) == MAX_QUEUE _SIZE ) ; }

Page 13: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

#define MAX_Queue_SIZE 100

template<class Type>پياده سازي صف چرخشيپياده سازي صف چرخشي

template class Type

class RecQueue

{{

public:

RecQueue();RecQueue();

void Add(const Type&);

Type* Delete(Type&);Type Delete(Type&);

int IsEmpty();

int IsFull();int IsFull();

private:

int m Front m Rear;int m_Front,m_Rear;

Type items[MAX_Queue_SIZE];

};

13صفحه

};

Page 14: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

RecQueue<Type>::RecQueue ()

{ m_Rear = ٠ ; m_Front = 0; } پياده سازي صف چرخشي پياده سازي صف چرخشي void RecQueue<Type>::Add(const Type& x)

{

if( IsFull() ) return;if( IsFull() ) return;

items[m_Rear++] = x;

m_Rear %= MAX_QUEUE _SIZE ;

}}

Type* RecQueue<Type>::Delete(Type& x)

{

if(IsEmpty()) return NULL;

x = items[m_Front++];

m Front %= MAX QUEUE SIZE ;_ _Q _ ;

return &x;

}

i t R Q <T > I E t ()int RecQueue<Type>::IsEmpty()

{ return (m_Front == m_Rear ); }

int RecQueue<Type>::IsFull()

14صفحه

{ return ((m_Rear + 1) % MAX_QUEUE _SIZE == m_Front) ; }

Page 15: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

اصطالحات و صف مختلف انواع مختلف صف و اصطالحاتانواعArray-Based Queue

“Normal” configuration

“Wrap Around” configurationp g

15صفحه

Page 16: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

اصطالحات و صف مختلف )ادامه(انواع ...)ادامه(انواع مختلف صف و اصطالحات Singly Linked List Queue

Dequeue (Deleting Object from Front of Queue)

16صفحه

Page 17: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

اصطالحات و صف مختلف )ادامه(انواع ...)ادامه(انواع مختلف صف و اصطالحات Enqueue(Inserting Object at Rear of Queue)

17صفحه

Page 18: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

اصطالحات و صف مختلف )ادامه(انواع ...)ادامه(انواع مختلف صف و اصطالحات Double-Ended Queues (deque)

18صفحه

Page 19: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

insertFirst Insert an Object at the front of the deque.

Input: Object Return: nonep j

insertLast Insert an Object at the rear of the deque.

Input: Object Return: none

removeFirst Remove and return the Object from the front of deque

Input: none Return: Object

removeLast Remove and return the Object from the rear of deque

Input: none Return: Object

first Return the first Object in the deque without removing the Object.

Input: none Return: Object

last Return the last Object in the deque without removing the Object.

Input: none Return: Object

isEmpty Return a boolean indicating if the deque is empty

Input: none Return: boolean

19صفحه

size Return the number of Objects in the deque.

Input: none Return: int

Page 20: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

كاربرد دو Stackبررس Stackبررسي دو كاربرد

خم-1مساله و پيچ پر مسير مسير پر پيچ و خم1مسالهتحليل عبارت رياضي - 2مساله

20صفحه

Page 21: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

خم و پيچ پر مسير (MAZING)مساله (MAZING)مساله مسير پر پيچ و خم

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

21صفحه

Page 22: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

S

G

22صفحه

Page 23: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

23صفحه

Page 24: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

يرتحليل مسير يل

. زمان اجراي مسير را تعيين مي كند (maze)اندازه مسير پرپيچ و خم ، شود نمي مشاهده بار يك از بيش مسير درون موقعيت هر كه آنجا از آنجا كه هر موقعيت درون مسير بيش از يك بار مشاهده نمي شود ،از

مي باشد به نحوي O(mp)بدترين حالت پيچيدگي الگوريتم به صورت استpوmكه مسير هاي ستون و سطرها .تعداد .تعداد سطرها و ستون هاي مسير استpوmكه

24صفحه

Page 25: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

باشيم(i,j)مسيرهاي ممكن براي انتخاب بعدي وقتي در موقعيت

25صفحه

Page 26: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

داراي ها خانه همه كه باشيم داشته نيستند8توجه مجاور خانه .خانه مجاور نيستند8توجه داشته باشيم كه همه خانه ها دارايبراي عدم بروز اشكال و عدم بررس شرايط مرزي فرض ميكنيم

ا ا ظ1قا ا آ ا است بدين ترتيب آرايه موردنظر بصورت1مقادير مرزها برابرmaze[m+2][p+2] اعالن ميگردد .به يك آرايه m×pبا ابعاد (maze)يك مسير پر پيچ و خم

(m+2)×(p+2)و خروجي [1][1]ورودي در موقعيت.نياز دارد ( ) (p ر( ز يي و ر ي ]ورو ][ روجي[ و.مي باشد [p][m]در موقعيت

26صفحه

Page 27: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

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

struct offset

{

int a , b;int a , b;

};

Enum directions {N, NE, SE, S, SW, W, NW};

ff [8]offset move[8];

27صفحه

Page 28: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

00

1177

2266

3355

28صفحه

44

Page 29: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

29صفحه

Page 30: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

30صفحه

Page 31: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

عبارات ارزشيابي عباراتارزشيابي

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

. داراي اولويت باالتر هستند ، ارزشيابي مي شوند و ي بي ي رز ر ب وي و ي ر

31صفحه

Page 32: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

Tokenاولويت عملگرها() [] -> . ر وي و-- ++-- ++!~- +& * ا لگ ل ا ا ل قا * &شكلSizeof

(type)* / %

شكل مقابل نشان دهنده اولويت عملگرها.مي باشد cدر زبان

* / %+ -<< >>>>=>>=<<=

= = !=&^l&&ll?:= += -= *= %=<<= >>= &= ^= l=

32صفحه

<< >> & l

،

Page 33: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

رياض عبارت يك نمايش 5*3+2روشهاي 2روشهاي نمايش يك عبارت رياضي 3 5

تيب ت ميان (Infix)وش (Infix)روش ميان ترتيب2,+,3,*,5

(Prefix)روش پيش ترتيب+,2,*,3,5, , ,3,5

(Postfix)روش پس ترتيب 2,3,5,*,+

33صفحه

Page 34: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

infixروش روش

معرفي وinfixروش استاندارد نوشتن عبارات به عنوانشناخته مي شود چرا كه در اين روش عملگرهاي دودويي

.را در بين دو عملوند قرار مي دهيم

34صفحه

Page 35: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

postfixنشانه گذاري

دراين روش هر عملگر بعد از عملوند هاي مربوطه ظاهر مي شودمثال

PostfixInfix

مثال

2 3 4*+ab*5+1 2+7*

2+3*4a*b+5

(1+2)*7 1 2+7ab*c/

abc-d+/ea-*c*ab/c de*+ac*

(1+2) 7a*b/c

((a/(b-c+d))*(e-a)*c)a/b c+d*e a*c ab/c-de*+ac*-a/b-c+d*e-a*c

Page 36: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

عبارت يك محاسبه Postfixنحوه Postfixنحوه محاسبه يك عبارت

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

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

.تا به انتهاي عبارت برسيم

36صفحه

Page 37: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

تبديل اول postfixبه infixالگوريتم postfixبه infixالگوريتم اول تبديل

ت ا ع ك ل د ت اي ت الگ ان تpostfixهinfixت ه به صورت postfixبهinfixمي توان الگوريتمي براي تبديل يك عبارت:زير بيان نمود

پرانتزگذاري كامل عبارات -1

انتقال همه عملگرهاي دودويي به نحوي كه با پرانتز بسته مربوطه -2ند ش يض تع آن است ت سمت راست آن تعويض شوندس

انتزها3 پ ام ت حذف حذف تمام پرانتزها-3

37صفحه

Page 38: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

تبديل دوم postfixبه infixالگوريتم postfixبه infixالگوريتم دوم تبديل

از استفاده تStackبا عبا بهinfixميتوان تبديلpostfixا تبديل postfixرا بهinfixميتوان عبارتStackبا استفاده از.نمود

38صفحه

Page 39: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

مثال

عبارت گذاريa+b*cتبديل نشانه postfixبه aتبديل عبارت b cبه نشانه گذاريpostfix

OutputTopStackToken

[0] [1] [2]

a-1a

a

ab

0

0

+

+

+

b

ab

abc

1

1

+ *

+ *

*

c

abc*+-1eos

Page 40: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

مثالpostfixبه نشانه گذاري a*(b+c)*dتبديل

OutputTopStack

[0] [1] [2]

Token

a

a

-1

0*

a

*

a

ab

ab

1

1

2

* (

* (

* ( +

(

b

+

abc

abc+

abc+*

2

0

0

* ( +

*

*

c

)

* abc+

abc+*d

abc+*d*

0

0

0

*

*

d

eos

Page 41: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

عبارت تبديل مراحل تبديل عبارتمراحل

.براي محاسبه عبارت تعريف كرده ايمExpressionفرض كنيم يك كالس س ي يم يمpرض ر ري ر ب ب ي برورودي اين كالس يك رشته ميباشد كه عبارت رياضي است

.براي ارزيابي عبارت بايد قدمهاي زير طي شود(Tokenize)تكه تكه كردن رشته ورودي - قدم اولPostfixبه Infixتبديل از -قدم دوم

P tfi Postfixتحليل عبارت-قدم سوم

41صفحه

Page 42: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

اول ورودي-قدم رشته كردن تكه تكه تكه تكه كردن رشته وروديقدم اولاين بخش يك عمليات پردازش رشته است

روي رشته ورودي حركت ميكنيم تا به يك جدا كننده برسيم كه جدا كننده ها عبارتند از-،+،/،*فاصله، :

وقتي يك بخش جدا شد درصورتي كه عدد باشد بايد معادل عددي آن و در غير اينصورت .معادل عملگر آن نگهداري شود

l T kclass Token

{

unionunion

{

double num;

char op;

};

BOOL I O t

42صفحه

BOOL IsOperator;

};

Page 43: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

دوم عبارت-قدم PostfixبهInfixتبديل Postfixبه Infixتبديل عبارتقدم دومدر اين مرحله . ها ميباشد Tokenخروجي قدم اول آرايه اي از

T kI fiP tfi Tokenهاي مرتب شده بصورتInfix را بصورتPostfixتبديل ميكنيم.استفاده ميشود Stackبراي تبديل از

43صفحه

Page 44: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

void Expression::ToPostfix()

{

Stack<Token> st;

Token x,y;

st.Add(Token(‘#’,true)); //براي خالي نبودن پشته

PostfixTokens = 0;

Tگ kfor(int i=0 ; i<InfixTokens ; i++)

{

x = infix[i];

Tokenاين عملگرها بايد در كالستعريف شوند

if(x.IsOPerator== false)

postfix[PostfixTokens++] = x;

else if( x==‘)’ )

f ( t P ( ) ! ‘(‘ t P ( ))for( st.Pop(y) ; y != ‘(‘ ; st.Pop(y))

postfix[PostfixTokens++] = y;

else

{ //x is an operator{ //x is an operator

for(st.Pop(y) ; isp(y)<=icp(x) ; st.Pop(y))

postfix[PostfixTokens++] = y;

st.Push(y);st.Push(y);

st.Push(x);

}

}

44صفحه

}

while(!st.IsEmpty())

postfix[PostfixTokens++] = *st.Pop(y) ;

}

Page 45: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

ميباشدICPوISPجدول زير شكل به به شكل زير ميباشدICPوISPجدول

ICP (In Comming Periority)ISP (In Stack Periority)Operator ( g y)( y)p

11Unary minus (-)

22* / %

33+ -

04(

40) 40)

45صفحه

Page 46: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

سوم عبارت-قدم Postfixارزياب Postfixارزيابي عبارتقدم سوم

.مرتب شده است Postfixها ميباشد كه بصورت Tokenخروجي قدم دوم آرايه اي از .استفاده ميشود Stackبراي ارزيابي نيز از

روي كه ترتيب ميشودTokenبدين انجام پيمايش ها ها پيمايش انجام ميشودTokenبدين ترتيب كه رويقرا ميدهيم Stackبا مشاهده اپرند آنرا درون

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

.باقي ميماند حاصل عبارت است Stackپس از اتمام ورودي ها آنچه در

46صفحه

Page 47: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

void Expression::Evaluate()

{

Stack<Token> st;

Token x,op1,op2;

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

{

x =postfix[i];

if(x.IsOPerator== false)

st.Push( x );

lelse

{ //x is an operator

st.Pop(op2) ;st.Pop(op2) ;

st.Pop(op1) ; //if operator needs two operand.

st.Push(Calculate(x,op1,op2));

}

}

t P (E ti V l )

47صفحه

st.Pop(ExperationValue);

}

Page 48: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

كالس Expressionاعضايclass Expression

{ :Expressionprivateاعضاي كالس

Token postfix[MaxTokens];

Token infix[MaxTokens];Token infix[MaxTokens];

int PostfixTokens;

int InfixTokens;

Token ExperationValue;

public:

id S I ( i i )void SetInput(string instr);

int isp(Token);

int icp(Token);int icp(Token);

void Tokenize();

void ToPostfix();

void Evaluate();

Token Calculate(Token operator, Token operand1 , Token operand2);

}

48صفحه

};

Page 49: فاﺪﻫا - shahed.ac.ir€¦ · (Prefix) ﺐﻴﺗﺮﺗ ﺶﻴﭘ ... Postfix ﻪﺑ Infix زا ﻞﻳﺪﺒﺗ -مود مﺪﻗ P tfiPostfix ترﺎﺒﻋ ﻞﻴﻠﺤﺗ-مﻮﺳ

postfixتحليل postfixتحليل

تعداد نشانه ها در عبارت باشد ، براي خارج ساختن نشانه nفرض كنيد ي نرض رج ي بر ب ر ب ربنابراين پيچيدگي تابع . مي باشد Θ(n)ها و انتقال آنها به خروجي نياز به

postfixبه صورتΘ(n) خواهد بود. pور )ب بو( و

49صفحه