บทที่ 5 สแต๊ก ( stacks ) (ส่วนที่ 2)

56
บบบบบ บบบบบ 5 5 บบบบบ บบบบบ ( ( Stacks Stacks ) ) ( ( บบบบบบบ บบบบบบบ 2) 2) By Juthawut By Juthawut Chantharamalee Chantharamalee 1 ววววววววววววววววววว ววววววววววววววววววว ( ( Data Data Structure) Structure) วววว วววว 4122202 4122202

Upload: christmas

Post on 26-Jan-2016

76 views

Category:

Documents


4 download

DESCRIPTION

บทที่ 5 สแต๊ก ( Stacks ) (ส่วนที่ 2). By Juthawut Chantharamalee. Abstract Data Type ของสแต็ก ( Stack ADT ). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

บทท�� บทท�� 5 5 สแต๊ก สแต๊ก ((StacksStacks))

((ส�วนท�� ส�วนท�� 2)2)

By Juthawut By Juthawut ChantharamaleeChantharamalee 11วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

Page 2: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

Abstract Data Type Abstract Data Type ข้องข้องสแต็�ก สแต็�ก ((Stack ADTStack ADT))ก�อนจะเข้าถึ�งเน��อหัาข้องเน� องสแต็�ก ก�อนจะเข้าถึ�งเน��อหัาข้องเน� องสแต็�ก ADT ADT จะข้อจะข้อ

ทบทวินเพื่� อสร$ปโครงสรางข้อมู�ลแบบสแต็�กน��นจะเป&นล�ทบทวินเพื่� อสร$ปโครงสรางข้อมู�ลแบบสแต็�กน��นจะเป&นล�สต็'ท( มู(ข้อจ)าก�ดหัลายประการด�งเง� อนไข้ต็�อไปน(�สต็'ท( มู(ข้อจ)าก�ดหัลายประการด�งเง� อนไข้ต็�อไปน(�

1. 1. การเพื่� มูสมูาช�กหัร�อการเพื่� มูสมูาช�กหัร�อข้อมู�ลจะสามูารถึจ�ดเก�บเร(ยงต็ามูล)าด�บจากปลายดานข้อมู�ลจะสามูารถึจ�ดเก�บเร(ยงต็ามูล)าด�บจากปลายดานใดดานหัน� งเท�าน��น เช�น จากส�วินบนส$ด หัร�อจากส�วินใดดานหัน� งเท�าน��น เช�น จากส�วินบนส$ด หัร�อจากส�วินล�าส$ดล�าส$ด 2. 2. รายการเพื่� มูข้อมู�ลเข้าไปจะอย��บนส$ดรายการเพื่� มูข้อมู�ลเข้าไปจะอย��บนส$ด

3. 3. เราสามูารถึเข้าถึ�งรายการข้อมู�ลในเราสามูารถึเข้าถึ�งรายการข้อมู�ลในสแต็�กได ณ ส�วินบนส$ดเท�าน��น ไมู�วิ�าจะเป&นการอ�านสแต็�กได ณ ส�วินบนส$ดเท�าน��น ไมู�วิ�าจะเป&นการอ�านข้อมู�ลดวิย ข้อมู�ลดวิย Stack Top Stack Top หัร�อน)าข้อมู�ลออกดวิย หัร�อน)าข้อมู�ลออกดวิย PopPop

22วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส

41222024122202

Page 3: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

4. 4. การด)าเน�นงานใดๆ บนสแต็�กจะเป&นไปต็ามูการด)าเน�นงานใดๆ บนสแต็�กจะเป&นไปต็ามูประส�ทธิ�ภาพื่ข้องฟั3งก'ช�นประส�ทธิ�ภาพื่ข้องฟั3งก'ช�นOO 1( ) 1( )

อ�ลกอร�ท�มูแต็�ละชน�ดจากเน��อหัาข้างต็นท( ผ่�านอ�ลกอร�ท�มูแต็�ละชน�ดจากเน��อหัาข้างต็นท( ผ่�านมูา สามูารถึน)ามูาใชเข้(ยนโปรแกรมูเพื่� อด)าเน�นงามูา สามูารถึน)ามูาใชเข้(ยนโปรแกรมูเพื่� อด)าเน�นงานก�บสแต็�กไดอย�างหัลากหัลาย แต็�ส)าหัร�บ เน��อหัาต็�อนก�บสแต็�กไดอย�างหัลากหัลาย แต็�ส)าหัร�บ เน��อหัาต็�อไปน(� ต็องการน)าเสนอสแต็�กในร�ปแบบข้อง ไปน(� ต็องการน)าเสนอสแต็�กในร�ปแบบข้อง ADT ADT เป&นส)าค�ญ เพื่� อสามูารถึน)าไปเก�บไวิในไลบราร(เพื่� อเป&นส)าค�ญ เพื่� อสามูารถึน)าไปเก�บไวิในไลบราร(เพื่� อเร(ยกใชงานไดต็องการ โดยในท( จะพื่�ฒนาสแต็�ก เร(ยกใชงานไดต็องการ โดยในท( จะพื่�ฒนาสแต็�ก ADT ADT ดวิยการใชโครงสรางข้อมู�ลแบบล�งก'ล�สต็'ดวิยการใชโครงสรางข้อมู�ลแบบล�งก'ล�สต็'

33วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส

41222024122202

Page 4: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

44วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ร�ปท( 513. แนวิค�กโครงสรางข้องสแต็�ก ADT (Stack ADT Structural Concepts)

datadataPtrPtr

linlinkk

dadatata

..

datadataPtrPtr

linlinkk

dadatata

..

datadataPtrPtr

linlinkk

dadatata

Ncocountunt

totopp

Dynamic Dynamic memorymemory

ststacackk

mmaiainn

Page 5: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

ท��งโหันดส�วินหั�วิและโหันดข้อมู�ลจะถึ�กเก�บซ่�อนรายท��งโหันดส�วินหั�วิและโหันดข้อมู�ลจะถึ�กเก�บซ่�อนรายละเอ(ยดไวิใน ละเอ(ยดไวิใน ADT ADT การเร(ยกใชฟั3งก'ช�นข้องสแต็�ก ก�ค�อพื่อการเร(ยกใชฟั3งก'ช�นข้องสแต็�ก ก�ค�อพื่อยน'เต็อร'ท( ช(�ไปย�งโครงสรางสแต็�กใน ยน'เต็อร'ท( ช(�ไปย�งโครงสรางสแต็�กใน ADT ADT น��นเอง ส�วินกาน��นเอง ส�วินการสรางสแต็�ก โปรแกรมูเมูอร'จะน�ยามูพื่อยน'เต็อร'เพื่� อช(�ไปรสรางสแต็�ก โปรแกรมูเมูอร'จะน�ยามูพื่อยน'เต็อร'เพื่� อช(�ไปย�งสแต็�ก ซ่� งแสดงไดจากต็�วิอย�างช$ดค)าส� งดานล�างต็�อไปย�งสแต็�ก ซ่� งแสดงไดจากต็�วิอย�างช$ดค)าส� งดานล�างต็�อไปน(� โดยโครงสรางสแต็�ก น(� โดยโครงสรางสแต็�ก ADT ADT ท( แสดงด�งร�ปท( ท( แสดงด�งร�ปท( 513. 513.จะท)าใหัเหั�นภาพื่แนวิค�ดด�งกล�าวิไดช�ดเจนย� งข้��นจะท)าใหัเหั�นภาพื่แนวิค�ดด�งกล�าวิไดช�ดเจนย� งข้��น

55วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

STACK* stackSTACK* stack .... ....Stack = createStack ();Stack = createStack ();

Page 6: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

อย�างไรก�ต็ามู ย�งมู(ส� งท( ต็องค)าน�งนอกเหัน�อจากอย�างไรก�ต็ามู ย�งมู(ส� งท( ต็องค)าน�งนอกเหัน�อจากโครงสรางข้อมู�ลท( น)ามูาสราง โครงสรางข้อมู�ลท( น)ามูาสราง ADT ADT จะต็องมู(ต็�วิจะต็องมู(ต็�วิด)าเน�นงานท( ใชสน�บสน$นการท)างานในแต็�ละฟั3งก'ช�นด)าเน�นงานท( ใชสน�บสน$นการท)างานในแต็�ละฟั3งก'ช�นข้องสแต็�กอย�างเพื่(ยงพื่อ เช�น การพื่�ฒนาฟั3งก'ช�นข้องสแต็�กอย�างเพื่(ยงพื่อ เช�น การพื่�ฒนาฟั3งก'ช�นดวิยภาษา ดวิยภาษา C C ซ่� งประกอบดวิย ซ่� งประกอบดวิย Stack Stack Definitions, Create Stack, Push Stack, Definitions, Create Stack, Push Stack, Pop Stack, Stack Top, Empty Stack, Pop Stack, Stack Top, Empty Stack, Stack Count Stack Count และ และ Destroy Stack Destroy Stack ซ่� งแสดงซ่� งแสดงไดด�งต็�วิอย�างต็�อไปน(�ไดด�งต็�วิอย�างต็�อไปน(�

66วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�สรหั�ส

41222024122202

Page 7: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

77วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�สรหั�ส 41222024122202

โปรแกรมูท( 51. Stack ADT Definitions

// Stack ADT Type Definitions typedef struct node { void* dataPtr; struct node* link; } STACK_NODE;

typedef struc { int count ; STACK_NODE* top; } STACK;

1 2 3456789101112

Page 8: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

88วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

โปรแกรมูท( 52 Create Stack

Page 9: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

99วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

โปรแกรมูท( 53. Push Stack

Page 10: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

1010วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

โปรแกรมูท( 54 Pop Stack

Page 11: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

1111วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

โปรแกรมูท( 55. Retrieve Stack Top

/*=================== stackTop =============== Retrieves data from the top of stack without changing the stack. Pre stack is a pointer to the stack Post Returns data pointer if successful null pointer if stack empty*/void* stackTop (STACK* stack){// Statements if (stack->count == 0) return NULL; else return stack->top->dataPtr;} //stackTop

1 2 34567891011121314

Page 12: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

1212วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

โปรแกรมูท( 56 Empty Stack

/*================= emptyStack ================== This function determines if a stack is empty. Pre stack is pointer to a stack Post Returns 1 if empty; 0 if data in stack*/bool emptyStack (STACK* stack) {// Statements return (stack->count == 0);} //emptyStack

1 2 345678910

Page 13: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

1313วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

โปรแกรมูท( 57 Full Stack

Page 14: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

1414วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

โปรแกรมูท( 58 Stack Count

/*============= stackCount ============ Returns number of elements in stack. Pre stack is a pointer to the stack Post count returned*/int stackCount (STACK* stack){// Statements return stack->count;} //stackCount

1 2 345678910

Page 15: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

1515วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

โปรแกรมูท( 59 Destroy Stack

Page 16: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

การน)าสแต็�กไปการน)าสแต็�กไปประย$กต็'ใชก�บประย$กต็'ใชก�บโปรแกรมูโปรแกรมูโดยปกต็�การเข้(ยนโปรแกรมูมู�กเข้(ยนในโดยปกต็�การเข้(ยนโปรแกรมูมู�กเข้(ยนใน

ล�กษณะโมูด�ลหัร�อโปรแกรมูย�อย โดยโปรแกรมูล�กษณะโมูด�ลหัร�อโปรแกรมูย�อย โดยโปรแกรมูหัล�กจะท)าการเร(ยกใชโปรแกรมูย�อยต็�างๆ เพื่� อใชหัล�กจะท)าการเร(ยกใชโปรแกรมูย�อยต็�างๆ เพื่� อใชงาน ด�งน��นโครงสรางข้อมู�ลแบบสแต็�กจะสามูารถึงาน ด�งน��นโครงสรางข้อมู�ลแบบสแต็�กจะสามูารถึน)ามูาประย$กต็'ใชเพื่� อท)างานก�บกรณ(ด�งกล�าวิไดน)ามูาประย$กต็'ใชเพื่� อท)างานก�บกรณ(ด�งกล�าวิไดเป&นอย�างด( โดยส�วินโปรแกรมูท( มู(การเร(ยกใชงานเป&นอย�างด( โดยส�วินโปรแกรมูท( มู(การเร(ยกใชงานโปรแกรมูย�อย จะมู(การ โปรแกรมูย�อย จะมู(การ Push Push ล)าด�บค)าส� งท( ล)าด�บค)าส� งท( ต็องการประมูวิลผ่ลในล)าด�บถึ�ดไวิในสแต็�กต็องการประมูวิลผ่ลในล)าด�บถึ�ดไวิในสแต็�ก

1616วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส

41222024122202

Page 17: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

เพื่� อจะไดสามูารถึร(เท�ร'นกล�บมูาท)าเพื่� อจะไดสามูารถึร(เท�ร'นกล�บมูาท)ากล�บมูาท)างานต็�อจากต็�วิท( เร(ยกได และกล�บมูาท)างานต็�อจากต็�วิท( เร(ยกได และเมู� อมู(การประมูวิลผ่ลช$ดค)าส� งในโปรแกรมูเมู� อมู(การประมูวิลผ่ลช$ดค)าส� งในโปรแกรมูย�อยท( เร(ยกใชงานจนเสร�จ ก�จะท)าการ ย�อยท( เร(ยกใชงานจนเสร�จ ก�จะท)าการ Pop Pop ล)าด�บค)าส� งออกจากสแต็�ก เพื่� อจะไดล)าด�บค)าส� งออกจากสแต็�ก เพื่� อจะไดกล�บไปท)างานย�งล)าด�บค)าส� งท( เร(ยกใชกล�บไปท)างานย�งล)าด�บค)าส� งท( เร(ยกใชโปรแกรมูย�อยน��นไดต็�อไปโปรแกรมูย�อยน��นไดต็�อไป

1717วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส

41222024122202

Page 18: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

1818วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ร�ปท( 514. ต็�วิอย�างโปรแกรมูแสดงล)าด�บการเร(ยกโปรแกรมูย�อยเพื่� อใชงาน

RetuReturnrn

CaCallll

Task A

……..…….. Retu

Returnrn

CaCallll

Task B

……..…….. Retu

Returnrn

CaCallll

Task C

……..……..

Task D

……..……..

Page 19: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

จากร�ปท( จากร�ปท( 514. 514. เป&นต็�วิอย�างเป&นต็�วิอย�างโปรแกรมูแสดงล)าด�บการเร(ยกโปรแกรมูย�อยโปรแกรมูแสดงล)าด�บการเร(ยกโปรแกรมูย�อยเพื่� อใชงาน โดยท( เพื่� อใชงาน โดยท( Task A Task A ไดเร(ยกใชงาน ไดเร(ยกใชงาน Task B Task B และ และ Task B Task B ไดมู(การเร(ยกใชงาน ไดมู(การเร(ยกใชงาน Task C Task C ในข้ณะท( ในข้ณะท( Task C Task C ก�ไดเร(ยกใชงาน ก�ไดเร(ยกใชงาน Task D Task D จนกระท��งจบท( จนกระท��งจบท( Task D Task D ก�มู(การร(ก�มู(การร(เท�ร'นกล�บไปย�ง เท�ร'นกล�บไปย�ง Task Task ก�อนหันาท( เร(ยกใชงาน ก�อนหันาท( เร(ยกใชงาน จนกระท��งจบโปรแกรมูจนกระท��งจบโปรแกรมู

1919วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส

41222024122202

Page 20: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

2020วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ร�ปท( 515. แสดงถึ�งโปรแกรมูย�อยต็�าง ท( Push ลงในสแต็�กและ Pop ออกจากสแต็�กในแต็�ละสถึานการณ'

(e(e))

AB

(a(a))

(b(b))

A

(c)(c)

AB

(d(d))

ABC

(f)(f)

A(g(g))

Page 21: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

การประย$กต็'ใชงานสแต็�ก การประย$กต็'ใชงานสแต็�ก ((Stack ApplicationsStack Applications))

ค�อการจ�ดเร(ยงล)าด�บข้อมู�ลใหัมู� ต็�วิอย�างเช�น ข้อมู�ลในสแต็�กท( มู(ค�อการจ�ดเร(ยงล)าด�บข้อมู�ลใหัมู� ต็�วิอย�างเช�น ข้อมู�ลในสแต็�กท( มู(ข้อมู�ลต็�วิเลข้ล)าด�บจาก ข้อมู�ลต็�วิเลข้ล)าด�บจาก Top Top ลงไปค�อ ลงไปค�อ {4 3 2 1} {4 3 2 1} เมู� อมู(การเมู� อมู(การจ�ดเร(ยงใหัมู�ลงในสแต็�กหัน� งก�จะล)าด�บใหัมู�มูาเป&น จ�ดเร(ยงใหัมู�ลงในสแต็�กหัน� งก�จะล)าด�บใหัมู�มูาเป&น {{ 123 123

44 } } เป&นต็นเป&นต็น

2121วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�สรหั�ส 41222024122202

การเร(ยงล)าด�บข้อมู�ลแบบยอนกล�บ การเร(ยงล)าด�บข้อมู�ลแบบยอนกล�บ ((Reversing DataReversing Data))

Page 22: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

2222วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ร�ปท( 516. การเร(ยงล)าด�บข้อมู�ลยอนกล�บดวิยสแต็�ก

Stack Stack 11

Stack Stack 22

4321

1

2

3

4PopPop

Page 23: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

เป&นการแต็กข้อมู�ลออกเป&นส�วินๆ ใหัเป&นอ�สระเป&นการแต็กข้อมู�ลออกเป&นส�วินๆ ใหัเป&นอ�สระต็�อก�น เพื่� อส�งไปประมูวิลผ่ล ต็�วิอย�างเช�น การแปลต็�อก�น เพื่� อส�งไปประมูวิลผ่ล ต็�วิอย�างเช�น การแปลซ่อร'สโคดใหัเป&นภาษาเคร� อง ซ่� งคอมูไพื่เลอร'จะด)าเน�นซ่อร'สโคดใหัเป&นภาษาเคร� อง ซ่� งคอมูไพื่เลอร'จะด)าเน�นการแต็กโปรแกรมูออกเป&นส�วินๆ ใหัเป&นอ�สระก�น เช�น การแต็กโปรแกรมูออกเป&นส�วินๆ ใหัเป&นอ�สระก�น เช�น ค)าสงวิน ต็�วิแปร และโทเคน ค)าสงวิน ต็�วิแปร และโทเคน ((TokensTokens ) ) เป&นต็น เป&นต็น นอกจากน(�แลวิ การแต็กข้อมู�ลออกเป&นส�วินย�งนอกจากน(�แลวิ การแต็กข้อมู�ลออกเป&นส�วินย�งสามูารถึน)าไปใชก�บการต็รวิจสอบการจ�บข้อมู�ลข้องสามูารถึน)าไปใชก�บการต็รวิจสอบการจ�บข้อมู�ลข้องเคร� องหัมูายวิงเล�บในน�พื่จน'คณ�ต็ศาสต็ร'ไดอ(กดวิย เคร� องหัมูายวิงเล�บในน�พื่จน'คณ�ต็ศาสต็ร'ไดอ(กดวิย

2323วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

การแต็กข้อมู�ลออกเป&นการแต็กข้อมู�ลออกเป&นส�วินๆ ส�วินๆ ((ParsingParsing))

Page 24: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

2424วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ร�ปท( 517 การแต็กข้อมู�ลออกเป&นส�วินๆ เพื่� อต็รวิจสอบการจ�บข้อมู�ลข้องเคร� องหัมูายวิงเล�บ

(a) Opening (a) Opening parenthesis not parenthesis not

matchedmatched

( ( A + B ) / C( ( A + B ) / C

(b) Closing parenthesis (b) Closing parenthesis not matchednot matched

( A + B ) / C )( A + B ) / C )

?

?

Page 25: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

เป&นการหัน�วิงเวิลาข้องข้อมู�ลไวิช� วิข้ณะหัน� ง เพื่� อรอการเป&นการหัน�วิงเวิลาข้องข้อมู�ลไวิช� วิข้ณะหัน� ง เพื่� อรอการประมูวิลผ่ลในช�วิงจ�งหัวิะเวิลาท( เหัมูาะสมู ซ่� งกรณ(ด�งกล�าวิ จะน)าประมูวิลผ่ลในช�วิงจ�งหัวิะเวิลาท( เหัมูาะสมู ซ่� งกรณ(ด�งกล�าวิ จะน)าไปใชก�บการแปลงน�พื่จน' ไปใชก�บการแปลงน�พื่จน' Infix Infix มูาเป&นน�พื่จน' มูาเป&นน�พื่จน' PostfixPostfix

2525วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

การหัน�วิงเวิลา การหัน�วิงเวิลา ((PostponementPostponement))

การยอนรอย การยอนรอย ((Backtracking Backtracking StepsSteps))เป&นการยอนรอยเพื่� อไปย�งสถึานะเป&นการยอนรอยเพื่� อไปย�งสถึานะ

ก�อนหันา รวิมูถึ�งการคนหัาเสนทางการก�อนหันา รวิมูถึ�งการคนหัาเสนทางการเด�นทางเพื่� อไปย�งเป:าหัมูายปลายทาง เด�นทางเพื่� อไปย�งเป:าหัมูายปลายทาง ((Goal SeekingGoal Seeking))

Page 26: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

2626วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ร�ปท( 518 การคนหัาเสนทางการเด�นทางเพื่� อไปย�งเป:าหัมูาย

Star node

The goal1 2 3

45

67

8

9 10

11

12

13 1

415

161

718

Page 27: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

1. 1. น�พื่จน' น�พื่จน' Infix Infix ค�อ น�พื่จน'โดยท� วิไปท( มู�กจะใชค�อ น�พื่จน'โดยท� วิไปท( มู�กจะใชก�บการค)านวิณส�ต็รต็�วิเลข้ต็�างๆ โดยโอเปอเรก�บการค)านวิณส�ต็รต็�วิเลข้ต็�างๆ โดยโอเปอเรเต็อร'จะอย��ระหัวิ�างโอเปอแรนด' เต็อร'จะอย��ระหัวิ�างโอเปอแรนด'

2. 2. น�พื่จน' น�พื่จน' Postfix Postfix ค�อ น�พื่จน'ในร�ปแบบโอเปอเรค�อ น�พื่จน'ในร�ปแบบโอเปอเรเต็อร'จะอย��ข้างหัล�งต็�วิ โอเปอแรนด' เต็อร'จะอย��ข้างหัล�งต็�วิ โอเปอแรนด'

3. 3. น�พื่จน' น�พื่จน' Prefix Prefix ค�อ น�พื่จน'ในร�ปแบบโอเปอเรค�อ น�พื่จน'ในร�ปแบบโอเปอเรเต็อร'จะอย��ข้างหันาต็�วิ โอเปอแรนด' เต็อร'จะอย��ข้างหันาต็�วิ โอเปอแรนด'

2727วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

น�พื่จน'ทางน�พื่จน'ทางคณ�ต็ศาสต็ร' คณ�ต็ศาสต็ร'

Page 28: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

2828วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ร�ปท( 519 น�พื่จน'คณ�ต็ศาสต็ร'ประกอบไปดวิยโอเปอเรเต็อร'และโอเปอแรนด'

OperatorOperator

A + X1 * 2A + X1 * 2

OperandOperand

Prefix : +ABInfix: A+BPostfix : AB+

Page 29: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

คอมูไฟัเลอร'หัร�อต็�วิแปลภาษาย$คใหัมู�ในป3จจ$บ�น จะไมู�คอมูไฟัเลอร'หัร�อต็�วิแปลภาษาย$คใหัมู�ในป3จจ$บ�น จะไมู�สามูารถึแปลน�พื่จน' สามูารถึแปลน�พื่จน' Infix Infix เป&นภาษาเคร� องไดโดยต็รง อ�นเป&นภาษาเคร� องไดโดยต็รง อ�นเน� องมูาจากการจ�ดล)าด�บควิามูส)าค�ญข้องโอเปอเรเต็อร'ท( เน� องมูาจากการจ�ดล)าด�บควิามูส)าค�ญข้องโอเปอเรเต็อร'ท( แต็กต็�างก�นในน�พื่จน' แต็กต็�างก�นในน�พื่จน' Infix Infix จ�งท)าใหัการค)านวิณแต็�ละจ�งท)าใหัการค)านวิณแต็�ละเทอมูในน�พื่จน'มูาเป&นไปต็ามูล)าด�บ และย� งส�ต็รการค)านวิณเทอมูในน�พื่จน'มูาเป&นไปต็ามูล)าด�บ และย� งส�ต็รการค)านวิณท( ซ่�บซ่อน ก�ย� งทวิ(ควิามูย$�งยากใหัก�บคอมูไพื่เลอร'ในการท( ซ่�บซ่อน ก�ย� งทวิ(ควิามูย$�งยากใหัก�บคอมูไพื่เลอร'ในการค)านวิณหัาผ่ลล�พื่ธิ'มูากเท�าน��น แต็�อย�างไรก�ต็ามูคอมูไพื่เลอค)านวิณหัาผ่ลล�พื่ธิ'มูากเท�าน��น แต็�อย�างไรก�ต็ามูคอมูไพื่เลอร'สามูารถึแกป3ญหัาโยการแปลงน�พื่จน' ร'สามูารถึแกป3ญหัาโยการแปลงน�พื่จน' Infix Infix ใหัมูาเป&นใหัมูาเป&นน�พื่จน'แบบ น�พื่จน'แบบ Postfix Postfix หัร�อ หัร�อ Prefix Prefix เส(ยก�อนเส(ยก�อน

2929วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

การแปลงน�พื่จน' การแปลงน�พื่จน' Infix Infix มูาเป&น มูาเป&น Postfix Postfix ดวิยมู�อดวิยมู�อ

Page 30: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

1. 1. ใหัท)าการใส�เคร� องหัมูายวิงเล�บใหัก�บท$กๆ น�พื่จน'ใหัท)าการใส�เคร� องหัมูายวิงเล�บใหัก�บท$กๆ น�พื่จน'ดวิยการค)าน�งถึ�งล)าด�บการค)านวิณ เช�น เคร� องหัมูายดวิยการค)าน�งถึ�งล)าด�บการค)านวิณ เช�น เคร� องหัมูายค�ณและหัารต็องมูาก�อนเคร� องหัมูายบวิกและลบ ค�ณและหัารต็องมูาก�อนเคร� องหัมูายบวิกและลบ เป&นต็นเป&นต็น

2. 2. ท)าการเปล( ยนส�ญล�กษณ' ท)าการเปล( ยนส�ญล�กษณ' Infix Infix ในแต็�ละวิงเล�บใหัมูาในแต็�ละวิงเล�บใหัมูาเป&นส�ญล�กษณ'แบบ เป&นส�ญล�กษณ'แบบ Postfix Postfix โดยใหัเร� มูต็นจากน�พื่จน'โดยใหัเร� มูต็นจากน�พื่จน'ท( อย��วิงเล�บในส$ดก�อน จากน��นก�ด)าเน�นการแปลงเป&นท( อย��วิงเล�บในส$ดก�อน จากน��นก�ด)าเน�นการแปลงเป&นน�พื่จน' น�พื่จน' Postfix Postfix ดวิยการยายโอเปอเรเต็อร'ต็รงดวิยการยายโอเปอเรเต็อร'ต็รงต็)าแหัน�งวิงเล�บน��นไปย�งต็)าแหัน�งวิงเล�บป;ดข้องค��น� �นๆต็)าแหัน�งวิงเล�บน��นไปย�งต็)าแหัน�งวิงเล�บป;ดข้องค��น� �นๆ

3. 3. ถึอดเคร� องหัมูายวิงเล�บออกท��งใหัหัมูดถึอดเคร� องหัมูายวิงเล�บออกท��งใหัหัมูด3030วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส

41222024122202

กฎเกณฑ์'ส)าหัร�บการแปลงน�พื่จน' กฎเกณฑ์'ส)าหัร�บการแปลงน�พื่จน' Infix Infix มูาเป&น มูาเป&น Postfix Postfix ดวิยมู�อดวิยมู�อ

Page 31: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

3131วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ต็�วิอย�างท( ต็�วิอย�างท( 51. 51. จงแปลงน�พื่จน' จงแปลงน�พื่จน' A + B A + B * C * C มูาเป&น มูาเป&น Postfix Postfix ดวิยมู�อดวิยมู�อน�พื่จน' Infix ท( ใหัมูา A + B * Cข้��นต็อนท( 1 ใส�วิงเล�บใหัท� �งหัมูดต็ามูล)าด�บควิามูส)าค�ญ (A + (B * C ))ข้��นต็อนท( 2 พื่�จารณาน�พื่จน'ท( อย��ในวิงเล�บในส$ด โดยยายเคร� องหัมูาย * ไปข้างหัล�ง C

(A + (BC*)) จากน��นใหัยายโอเปอเรเต็อร' + ซ่� งอย��ท( ต็)าแหัน�งวิงเล�บเป;ดภายนอกข้องค��ต็�วิเอง

(A (BC*) + )ข้��นต็อนท( 2 ถึอดเคร� องหัมูายวิงเล�บท��งออกใหัหัมูด ABC*+

Page 32: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

3232วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ต็�วิอย�างท( ต็�วิอย�างท( 52 52 จงแปลงน�พื่จน' จงแปลงน�พื่จน' 5 + 6 - 5 + 6 - 10 10 มูาเป&น มูาเป&น Postfix Postfix ดวิยมู�อดวิยมู�อ

-5*6 10 = ((5 * 6)-10) = ((56*)- 10)

= ((56*)10-) = 56*10-

และจากน�พื่จน' และจากน�พื่จน' Postfix Postfix ท( ไดจากต็�วิอย�างท( ไดจากต็�วิอย�างท( ท( 52. 52. น��น ค�อผ่ลล�พื่ธิ'จากการเร(ยงน��น ค�อผ่ลล�พื่ธิ'จากการเร(ยงล)าด�บต็ามูกฎเกณฑ์'ข้อง ล)าด�บต็ามูกฎเกณฑ์'ข้อง postfix postfix ด�งน��นด�งน��นคอมูไพื่เลอร'ก�สามูารถึท)าการค)านวิณหัาคอมูไพื่เลอร'ก�สามูารถึท)าการค)านวิณหัาผ่ลล�พื่ธิ'ไดอย�างง�ายดายผ่ลล�พื่ธิ'ไดอย�างง�ายดาย

Page 33: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

3333วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ร�ปท( 520 แสดงการค)านวิณหัาผ่ลล�พื่ธิ'น�พื่จน' Postfix ในสแต็�ก

ExpressionExpression ActionAction StackStack

5 6 * 10 - Push 5 5

5 6 * 10 - Push 665

5 6 * 10 -

Pop 6 and 5Evaluate 5 Evaluate 5 * 6* 6Push 30Push 30

30

5 6 * 10 - Push 101030

5 6 * 10 -

Pop 10 and 30Evaluate Evaluate 30 - 1030 - 10Push 20Push 20

20

5 6 * 10 -

Pop 20Stack is Stack is EmptyEmptyResult is Result is 2020

Page 34: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

อ�ลกอร�ท�มูการแปลงน�พื่จน' อ�ลกอร�ท�มูการแปลงน�พื่จน' Infix Infix มูาเป&น มูาเป&น Postfix Postfix มู(ข้��นต็อนมู(ข้��นต็อนด�งน(� ด�งน(� 1. 1. ถึาข้อมู�ลเข้ามูาเป&นโอเปอแรนด' ใหัเอาต็'พื่$ต็ไป ถึาข้อมู�ลเข้ามูาเป&นโอเปอแรนด' ใหัเอาต็'พื่$ต็ไป PostfixPostfix 2. 2. ถึาข้อมู�ลเข้าเป&นโอเปอเรเต็อร'ถึาข้อมู�ลเข้าเป&นโอเปอเรเต็อร' - - ถึาสแต็�กวิ�างใหั ถึาสแต็�กวิ�างใหั Push Push ลงในสแต็�กลงในสแต็�ก - - ถึาภายถึาภายในสแต็�กมู(ข้อมู�ลอย�� ใหัท)าการเปร(ยบเท(ยบ ด�งน(�ในสแต็�กมู(ข้อมู�ลอย�� ใหัท)าการเปร(ยบเท(ยบ ด�งน(� --ถึาโอถึาโอเปอเรเต็อร'ท( อ�นพื่$ต็เข้ามูามู(ล)าด�บควิามูส)าค�ญนอยกวิ�า หัร�อเปอเรเต็อร'ท( อ�นพื่$ต็เข้ามูามู(ล)าด�บควิามูส)าค�ญนอยกวิ�า หัร�อ เท�าเท�าก�บโอเปอเรเต็อร'ท( อย��ส�วินบนข้องสแต็�ก ใหัด)าเน�นการ ก�บโอเปอเรเต็อร'ท( อย��ส�วินบนข้องสแต็�ก ใหัด)าเน�นการ PopPop

3434วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูส)าหัร�บการแปลงน�พื่จน' อ�ลกอร�ท�มูส)าหัร�บการแปลงน�พื่จน' Infix Infix มูาเป&น น�พื่จน' มูาเป&น น�พื่จน' Postfix Postfix ((Algorithmic Transformation)Algorithmic Transformation)

Page 35: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

- - สแต็�กออกไปท( สแต็�กออกไปท( Postfix Postfix โดยท)าการเปร(ยบเท(ยบก�บโอเปอเรโดยท)าการเปร(ยบเท(ยบก�บโอเปอเรเต็อร' ท( มู(อย��ในสแต็�กไปเร� อยๆ จนกระท��งโอเปอเรเต็อร'ท( อ�นพื่$ต็เต็อร' ท( มู(อย��ในสแต็�กไปเร� อยๆ จนกระท��งโอเปอเรเต็อร'ท( อ�นพื่$ต็เข้ามูามู(ล)าด�บควิามูส)าค�ญมูากกวิ�าโอเปอเรเต็อร'ในสแต็�ก จากน��นเข้ามูามู(ล)าด�บควิามูส)าค�ญมูากกวิ�าโอเปอเรเต็อร'ในสแต็�ก จากน��นด)าเน�นการ ด)าเน�นการ Push Push โอเปอเรเต็อร'ท( อ�นพื่$ต็เข้ามูาลงในสแต็�ก โอเปอเรเต็อร'ท( อ�นพื่$ต็เข้ามูาลงในสแต็�ก 3. 3. ถึาข้อมู�ลเข้าเป&นเคร� องหัมูายวิงเล�บเป;ด ถึาข้อมู�ลเข้าเป&นเคร� องหัมูายวิงเล�บเป;ด ใหัด)าเน�นการ ใหัด)าเน�นการ Push Push ลงในสแต็�กลงในสแต็�ก 4. 4. ถึาข้อมู�ลเข้าเป&นเคร� องหัมูายถึาข้อมู�ลเข้าเป&นเคร� องหัมูายวิงเล�บป;ด ใหัด)าเน�นการ วิงเล�บป;ด ใหัด)าเน�นการ Pop Pop สแต็�กไปย�ง สแต็�กไปย�ง Postfix Postfix จนกระท��งพื่บจนกระท��งพื่บเคร� องหัมูายป;ด จากน��นใหัน)าเคร� องหัมูายวิงเล�บท��งสองลบท��งไปเคร� องหัมูายป;ด จากน��นใหัน)าเคร� องหัมูายวิงเล�บท��งสองลบท��งไป

5. 5. หัากด)าเน�นการข้นเสร�จส��นแลวิย�งมู(ข้อมู�ลอย��ในสแต็�ก หัากด)าเน�นการข้นเสร�จส��นแลวิย�งมู(ข้อมู�ลอย��ในสแต็�ก ใหัด)าเน�นการ ใหัด)าเน�นการ Pop Pop ท( เหัล�ออย��ท� �งหัมูดไปย�ง ท( เหัล�ออย��ท� �งหัมูดไปย�ง PostfixPostfix

3535วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

Page 36: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

3636วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ร�ปท( 521. การแปลงน�พื่จน' Infix มูาเป&นน�พื่จน' Postfix

AInfixInfix StaSta

ckckPostfiPostfi

xxA(a)(a)

+ + A(b)(b)B + A B(c)(c)* A B (d)(d) **++* A B C(e)(e) **++- A B C * +(f)(f) --D A B C * + D(g)(g) --/ A B C * + D(h)(h) //--E A B C * + D E(i)(i) //--

A B C * + D E / -(j)(j)

Page 37: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

3737วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูท( 59. การแปลงน�พื่จน' Infix มูาเป&น Postfix (Convert Infix to Postfix)

Page 38: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

3838วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ต็�วิอย�างท( 53 จงแปลง A * B – (C + D) ใหัเป&น Postfix

A A

** * AB * A B-

A B * (A B * CCA B * C +A B * C DDA B * C D + )

-

Input (Infix)Operator Stack

Output String (Postfix)

-(- ( +

-++

E

- (

- ( +

+A B * C D + - A B * C D + - E A B * C D + - E +

A B *

Page 39: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

หัล�กการหัาผ่ลล�พื่ธิ'จากน�พื่จน' หัล�กการหัาผ่ลล�พื่ธิ'จากน�พื่จน' Postfix Postfix ก�ค�อ จะท)าการสแกนก�ค�อ จะท)าการสแกนน�พื่จน' น�พื่จน' Postfix Postfix จากซ่ายไปข้วิา โดยโอเปอแรนด'ท( พื่บจะถึ�กใส�ไวิในจากซ่ายไปข้วิา โดยโอเปอแรนด'ท( พื่บจะถึ�กใส�ไวิในสแต็�กเร� อยๆ จนกระท��งพื่บต็�วิโอเปอเรเต็อร' เมู� อพื่บแลวิจ�งด)าเน�นสแต็�กเร� อยๆ จนกระท��งพื่บต็�วิโอเปอเรเต็อร' เมู� อพื่บแลวิจ�งด)าเน�นการหัาผ่ลล�พื่ธิ'จากค��โอเปอแรนด'ท( พื่บก�อนหันา ผ่ลการค)านวิณจะการหัาผ่ลล�พื่ธิ'จากค��โอเปอแรนด'ท( พื่บก�อนหันา ผ่ลการค)านวิณจะเป&นไปต็ามูข้��นต็อนด�งร�ปท( เป&นไปต็ามูข้��นต็อนด�งร�ปท( 522. 522. ส�วินอ�ลกอร�ท�มูการหัาส�วินอ�ลกอร�ท�มูการหัาผ่ลล�พื่ธิ'จากน�พื่จน' ผ่ลล�พื่ธิ'จากน�พื่จน' Postfix Postfix แสดงไวิในอ�ลกอร�ท�มูท( แสดงไวิในอ�ลกอร�ท�มูท( 510 510 ในท( ในท( น(�ข้อยกต็�วิอย�างน�พื่จน' น(�ข้อยกต็�วิอย�างน�พื่จน' Postfix Postfix เพื่� อน)าไปค)านวิณหัาผ่ลล�พื่ธิ'ด�งน(�เพื่� อน)าไปค)านวิณหัาผ่ลล�พื่ธิ'ด�งน(�

3939วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

การผ่ลล�พื่ธิ'จากน�พื่จน' การผ่ลล�พื่ธิ'จากน�พื่จน' Postfix Postfix ((Evaluation Evaluation Postfix Postfix Expressions)Expressions)

Page 40: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

4040วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

ร�ปท( 522. การค)านวิณหัาผ่ลล�พื่ธิ'ข้องน�พื่จน' Postfix

2 4 6 + *

A B C + *A B C + *โดยท�� โดยท�� A=2 B = 4 A=2 B = 4 และ และ C = 6 C = 6

(a)(a)

(b)(b)

(c)(c)

(d)(d)

(e)(e)

(f)(f)

StaStackck

PostfiPostfixx

4 6 + *

6 + *

+ *

*

2

20

42

624

210

2 * 10 = 20

4 * 6 = 10

Page 41: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

4141วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูท( 510 การหัาผ่ลล�พื่ธิ'จากน�พื่จน' Postfix (Evaluation of Postfix Expressions

Algorithm postFixEvaluate (expr)This algorithm evaluates a postfix expression and returns its value. Pre a valid expression Post postfix value computed Return value of expression1 ereateStack (stack)2 loop (for each character) 1 if (character is operand) 1 pushstaek (stack, character) 2 else 1 popStaek (stack, oper2) 2 popStack (stack, operl) 3 operator = character 4 set value to calculate (operl, operator, oper2) 5 pushstack (stack, value) 3 end if3 end loop4 popStack (stack, result)5 return (result)end postFixEvaluate

Page 42: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

ส)าหัร�บการสรางสแต็�กดวิยอาร'เรย'ในท( น(� จะเร� มูต็นท( ล)าด�บท( ส)าหัร�บการสรางสแต็�กดวิยอาร'เรย'ในท( น(� จะเร� มูต็นท( ล)าด�บท( 0 ( 0 (ในในภาษา ภาษา CC ) ) โดยภายในอาร'เรย'จะมู(ข้อมู�ลเพื่� มูในกรณ(ท( มู(การเพื่� มูราบการโดยภายในอาร'เรย'จะมู(ข้อมู�ลเพื่� มูในกรณ(ท( มู(การเพื่� มูราบการข้อมู�ลเข้าไปดวิยฟั3งก'ช�น ข้อมู�ลเข้าไปดวิยฟั3งก'ช�น Push Push ในข้ณะท( ภายในอาร'เรย'จะมู(ข้อมู�ลลดในข้ณะท( ภายในอาร'เรย'จะมู(ข้อมู�ลลดนอยลงเมู� อมู(การน)าข้อมู�ลออกไปดวิยฟั3งก'ช�น นอยลงเมู� อมู(การน)าข้อมู�ลออกไปดวิยฟั3งก'ช�น Pop Pop และการ และการ Push Push รายการเข้าไป ก�จะมู(การเพื่� มูต็�วิน�บอ(กต็�วิเข้าไป ซ่� งจะใชซ่�บสคร�ปต็'เป&นต็�วิรายการเข้าไป ก�จะมู(การเพื่� มูต็�วิน�บอ(กต็�วิเข้าไป ซ่� งจะใชซ่�บสคร�ปต็'เป&นต็�วิอางอ�งท( ส�วินบนส$ดข้องสแต็�ก และการ อางอ�งท( ส�วินบนส$ดข้องสแต็�ก และการ Pop Pop ก�จะท)าการค�ดลอกข้อมู�ลก�จะท)าการค�ดลอกข้อมู�ลข้อมู�ลต็)าแหัน�งซ่�บสคร�ปต็'ท( อย��ส�วินบนส$ดข้องสแต็�กไปย�งโมูด�ลท( เร(ยกใชข้อมู�ลต็)าแหัน�งซ่�บสคร�ปต็'ท( อย��ส�วินบนส$ดข้องสแต็�กไปย�งโมูด�ลท( เร(ยกใชแลวิจ�งลดค�าข้องซ่�บสคร�ปต็'ลงอ(กหัน� งจากส�วินบนส$ดลงมูาแลวิจ�งลดค�าข้องซ่�บสคร�ปต็'ลงอ(กหัน� งจากส�วินบนส$ดลงมูา

4242วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูการสรางอ�ลกอร�ท�มูการสรางสแต็�กดวิยอาร'เรย'สแต็�กดวิยอาร'เรย' ((Stack Array Stack Array Algorithm)Algorithm)

Page 43: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

Algorithm createStack (stackElem <integer>)Allocates memory for a. stack head node from, dynamic memory and returns its address to the caller. Pre stackElem contains size of stack Post head node and array allocated or error returned Return pointer to head node or null pointer if no memory1 if(memory not available 1 stackPtr = null )2 else } 1 allocate (stackPtr) Head allocated. Now initialize and allocate stack array. 2 stackPtr -> count = 0 3 stackPtr -> top = -1 4 stackPtr -> stackMax = stackElem 5 if (memory not available) 1 recycle (stackPtr) 2 stackPtr = null 6 else Allocate memory for stack array 1 allocate (stackPtr -> stackAry)3 return stackPtrend createStack

4343วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูท( 511. Create Stack

Page 44: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

Algorithm pushstack (val stack <head pointer>, val data <dataType>)Insert (push) one item into the stack. Pre stack is a pointer to the stack head structure data contains data to be pushed into stack Post data have been pushed in stack Return true if successful false if memory overflow1 if (stack -> count is at maximum) 1 success = false2 else 1 stack -> count = stack -> count + 1 2 stack -> top = stack -> top + 1 3 stack -> stack&Ary[stack -> top] = data 4 success = true3 return successend pushstack 4444วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส

41222024122202

อ�ลกอร�ท�มูท( 512. Push Stack

Page 45: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

Algorithm popStack (val stack <head pointer>, ref dataOut <dataType>)This algorithm pops the item on the top of the stack and returns it to the user. Pre stack is a pointer to the stack head structure dataOut is a reference variable to receive the data Post data have been returned to calling algorithm Return true if successful false if underflow1 if (stack empty) 1 success = false2 else 1 dataOut = stack -> staek&ry [stack -> top] 2 stack -> top = stack -> top - 1 3 stack -> count = stack -> count - 1 4 success = true3 return successend popStack

4545วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูท( 513. Pop Stack

Page 46: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

Algorithm stackTop (val stack <head pointer>,ref dataOut <dataType>)This algorithm retrieves the data from the top of the stack without changing the stack. Pre stack is a pointer to the stack head structure Post data have been returned to calling algorithm Return true if data returned false if underflow1 if (stack -> count zero) 1 success = false2 else 1 dataOut = stack -> stack&ry [stack -> top].data 2 success = true 3 return successend stackTop 4646วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส

41222024122202

อ�ลกอร�ท�มูท( 514 Stack Top

Page 47: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

Algorithm emptyStack (val stack <head pointer>)Determines if stack is empty and return a Boolean. Pre stack is a pointer to the stack head structure Post returns stack status Return Boolean, true if stack empty false if stack contains data1 if (stack -> count > 0) 1 result = false2 else 1 result = true3 return resultend emptyStack

4747วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูท( 515. Empty Stack

Page 48: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

Algorithm fullStack (val stack <head pointer>)Determines if stack is full and return a Boolean. Pre stack is a pointer to the stack head structure Post returns stack status Return Boolean, true if stack full false if memory available1 if (stack -> count < MAX_STACK) 1 result = false2 else 1 result = true3 return resultend fullStack

4848วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูท( 516 Full Stack

Page 49: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

Algorithm stackCount (val stack <head pointer >)Return the number of elements currently in stack. Pre stack is a pointer to the stack head structure Post returns stack count Return integer count of number of elements in stack1 return (stack -> count)end stackCount

4949วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูท( 517 Stack Count

Page 50: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

Algorithm destroyStack (val stack <typeStack>)This algorithm releases all nodes back to the dynamic memory. Pre stack is a pointer to the stack head structure Post head structure and array recycled Return null pointer1 If (stack not empty) 1 recycle (stack -> stackAry) 2 recycle (stack)2 return null pointerend destroyStack

5050วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูท( 518 Destroy Stack

Page 51: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

ร(เคอร'ช�น ร(เคอร'ช�น ((RecursionRecursion))ร(เคอร'ช�น ร(เคอร'ช�น ((RecursionRecursion ) ) เป&นหัล�กการท( จะน)ามูาใชเป&นหัล�กการท( จะน)ามูาใช

ก�บการโปรแกรมูแบบร(เคอร'ซ่(พื่ ก�บการโปรแกรมูแบบร(เคอร'ซ่(พื่ ((RecursiveRecursive ) ) ซ่� งโดยซ่� งโดยปกต็� สามูารถึเข้(ยน อ�ลอร�ท�มูได ปกต็� สามูารถึเข้(ยน อ�ลอร�ท�มูได 2 2 ร�ปแบบดวิยก�นค�อ ร�ปแบบดวิยก�นค�อ

1. 1. การวินรอบ การวินรอบ ((IterationIteration ) ) เป&นเทคน�คใชเป&นเทคน�คใชหัล�กการวินรอบหัร�อล�ป หัล�กการวินรอบหัร�อล�ป ((LoopingLooping ) ) เพื่� อกระท)ากระบวินเพื่� อกระท)ากระบวินการซ่)�าๆ จนกระท��งต็รงต็ามูเง� อนไข้การควิบค$มูล�ปก�จะการซ่)�าๆ จนกระท��งต็รงต็ามูเง� อนไข้การควิบค$มูล�ปก�จะหัล$ดออกจากล�ป หัล$ดออกจากล�ป 2. 2. การเร(ยกต็�วิการเร(ยกต็�วิเอง เอง ((RecursionRecursion ) ) เป&นเทคน�คการวินซ่)�าเพื่� อกระบวินการเป&นเทคน�คการวินซ่)�าเพื่� อกระบวินการหัร�อช$ดค)าส� งน��นซ่)�าๆ ดวิยวิ�ธิ(การเร(ยกต็�วิเองเพื่� อท)าซ่)�าหัร�อช$ดค)าส� งน��นซ่)�าๆ ดวิยวิ�ธิ(การเร(ยกต็�วิเองเพื่� อท)าซ่)�า

5151วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�สรหั�ส

41222024122202

Page 52: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

Algorithm iterativeFactorial (n)Calculates factorial of a number using a loop. Pre n is the number to be raised factorially Post n! Is returned1set i to 12set facN to 13 loop (i <= n) 1 set facN to facN * 1 2 increment i 4 end loop 5 return FactNend iterativeFactorial

5252วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูท( 519 Iterative Factorial Algorithm

Factorial (n) = 1 (if n = 0)Factorial (n) = n X (n-1) X (n-2) X … X 3 X 2 X 1 {if n > 0}

Page 53: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

5353วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูท( 523. การค)านวิณหัา Factorial(3) ดวิยโปรแกรมูร(เคอร'ซ่(พื่

Factorial (3) = 3 X Factorial (2)

Factorial (2) = 2 X Factorial (1)

Factorial (1) = 1 X Factorial (0)

Factorial (0) = 1

Factorial (3) = 3 X 2 = 6

Factorial (2) = 2 X 1 = 2

Factorial (1) = 1 X 1 = 1

Page 54: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

Algorithm recursiveFactorial (n)Calculates factorial of a number using recursion. Pre n is the number to be raised factorially Post n! is returned1 if {n equals 0} 1 return 12 else 1 return (n * recursiveFactorial (n - 1) )3 end ifend recursiveFactorial

5454วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูท( 520. Recursive Factorial Algorithm

Factorial (n) = 1 (if n = 0)Factorial (n) = n X (Factorial (n-1)) {if n > 0}

Page 55: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

5555วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222024122202

อ�ลกอร�ท�มูท( 524. การค)านวิณหัา Factorial(3) ดวิยโปรแกรมูร(เคอร'ซ่(พื่ท( เร(ยกต็�วิเองท)างาน

Page 56: บทที่ 5   สแต๊ก ( Stacks ) (ส่วนที่ 2)

The End The End

Lesson 5Lesson 5 (Session 2)(Session 2)

5656วิ�ชาโครงสรางข้อมู�ล วิ�ชาโครงสรางข้อมู�ล ((Data Structure) Data Structure) รหั�ส รหั�ส 41222014122201