+ All Categories
Home > Documents > สแตก และคิว (Stack & Queue)

สแตก และคิว (Stack & Queue)

Date post: 15-Jan-2016
Category:
Upload: breena
View: 91 times
Download: 1 times
Share this document with a friend
Description:
สแตก และคิว (Stack & Queue). FIFO และ LIFO. F irst I n F isrt O ut : FIFO หมายถึงข้อมูลที่ เข้ามา ในลิสต์ ก่อน จะถูก นำออก จากลิสต์เป็น ลำดับแรก ตัวอย่างได้แก่การยืนรอคิวเพื่อซื้อตั๋ว - PowerPoint PPT Presentation
46
Transcript
Page 1: สแตก และคิว  (Stack & Queue)
Page 2: สแตก และคิว  (Stack & Queue)

First In Fisrt Out : FIFO หมายถึ�งข้อม�ลที่��เข้�ามาในล�สต์�ก่�อน จะถึ�กนาออก่จากล�สต์�เป็�นลำาดั บแรก่ ต์�วอย�างได้แก�การย$นรอคิ�วเพื่$�อซื้$(อต์�)ว

Last In First Out : LIFO หมายถึ�งข้อม�ลที่��เข้�ามาในล�สต์�เป็�นลำาดั บสุ�ดัท้�าย จะถึ�กนาออก่จากล�สต์�เป็�นอ นดั บแรก่ ต์�วอย�างได้แก�การน*าชั้�(นข้องป็,� นโต์เข้าและออกจากเถึาป็,� นโต์

Page 3: สแตก และคิว  (Stack & Queue)

เป็�นโคิรงสรางข้อม�ลแบบเชั้�งเสน ท้��ม�ก่ารใสุ�ข้�อม�ลำเข้�า แลำะนาข้�อม�ลำออก่เพี�ยงดั�านเดั�ยว ด้�งน�(น ข้อม�ลที่��เข้าไป็อย��ใน stack ก�อนจะออกจาก stack หล�งข้อม�ลที่��เข้าไป็ใน stack ที่�หล�ง น��นคิ$อ การ "เข้�าท้�หลำ งแต่�ออก่ก่�อน " (Last In First Out : LIFO)

Page 4: สแตก และคิว  (Stack & Queue)

ป็ฏิ�บ�ต์�การพื่$(นฐานข้องสแต์กได้แก� push คื!อก่ารนาข้�อม�ลำเก่"บในสุแต่ก่ และ pop คื!อก่ารนาข้�อม�ลำออก่จาก่สุแต่ก่ ซื้��งที่�(งสองกระบวนการ จะกระที่*าที่��ส�วนบนส1ด้ข้องสแต์กเสมอ โด้ยป็กต์�แลวม�กก*าหนด้ใหม�ต่ วชี้�%สุ�วนบนสุ�ดัข้องสุแต่ก่ เร�ยก่ว�า top ส�วนป็ฏิ�บ�ต์�การอ$�น ๆ เป็�นป็ฏิ�บ�ต์�การที่��เก��ยวเน$�องก�บการ push และ pop ม�ด้�งน�(

การสุร�างสุแต่ก่ (CREATE) การที่ด้สอบว�า stack ว�างหร!อไม�(EMPTY) การที่ด้สอบว�า stack เต่"มหร!อไม�(FULL) การท้าให� stack เป็(น stack ว�าง(CLEAR)

Page 5: สแตก และคิว  (Stack & Queue)

ก่ารนาข้�อม�ลำเข้�าสุ��สุแต่ก่ (Push) กระที่*าที่��ส�วนบนข้องสแต์ก (Top) ซื้��งต่�องม�ก่ารต่รวจสุอบก่�อนว�าสุแต่ก่เต่"มหร!อไม�

และการน*าข้อม�ลออก่จาก่สุแต่ก่ (Pop) กระที่*าที่��ส�วนบนข้องสแต์กเชั้�นก�น โด้ยต์รวจสอบว�าม�สมาชั้�กอย��ในสแต์กหร$อไม� (ต่รวจสุอบว�าสุแต่ก่ว�างเป็ลำ�าหร!อไม� )

Page 6: สแตก และคิว  (Stack & Queue)

เป็�นการด้*าเน�นการที่��น*าข้อม�ลเข้าไป็เก3บไวด้านบนส1ด้ข้องกองซื้อน (Top of the Stack) เร$�อย ๆ จนกว�ากองซื้อนไม�สามารถึน*าข้อม�ลเข้าไป็เก3บได้

จะเร�ยกว�า กองซื้อนเต์3ม (Stack Full)

Page 7: สแตก และคิว  (Stack & Queue)

0

1

2

3

4

Top

90

1. Top = 0

2. Top = Top + 1

3. Stack[Top] = 10154060

Stack

Stack Full

Page 8: สแตก และคิว  (Stack & Queue)

ก่ารท้างานจะต่รงข้�ามก่ บ Push จะด้�งเอาข้อม�ลที่��อย��บนส1ด้ออกมาก�อน แต์�ก�อนที่��จะด้�งจะม�

การต์รวจสอบว�ากองซื้อนว�างหร$อไม� ◦ถ้�าว�างจะไม�สุามารถ้นาข้�อม�ลำออก่ไดั� แสด้งว�า

กองซื้อนว�าง (Stack Empty)◦ถึาไม�ว�างจะน*าเอาข้อม�ลออกแลวเลำ!�อนต่ วชี้�%ไป็

ย งต่าแหน�งถ้ ดัลำงไป็

Page 9: สแตก และคิว  (Stack & Queue)

Top2. Top = Top - 1

1. Temp = Stack[Top]

0

1

2

3

4

Stack

Stack Empty

Temp

10

15

40

60

Page 10: สแตก และคิว  (Stack & Queue)

หมายถึ�ง ก่ารแท้นท้��ข้�อม�ลำข้อง stack ดั�วย array ซื้��ง เป็�นการจ ดัสุรรเน!%อท้��หน�วยคืวามจาแบบ static น��นคิ$อ

ม�ก่ารก่าหนดัข้นาดัข้อง stack ลำ�วงหน�าว�าม�ข้นาด้เที่�าใด้ และจะม�การจ�ด้สรรเน$(อที่��หน�วยคิวามจ*าใหเลย

Page 11: สแตก และคิว  (Stack & Queue)

แบบล*าด้�บจะต์องม�การจองพื่$(นที่��หน�วยคิวามจ*าไวล�วงหนา ว�าจะม�ข้นาด้เที่�าใด้

โดัยแถ้วลำาดั บน�%จะป็+ดัป็ลำายดั�านหน,�งไว� เพี!�อให�ข้�อม�ลำเข้�า-ออก่ท้างเดั�ยว

ป็ฏิ�บ�ต์�การม� 4 ข้�(นต์อนคิ$อ◦การสราง◦การ Push◦การ Pop◦การ แสด้ง

Page 12: สแตก และคิว  (Stack & Queue)

เป็�นการเต์ร�ยมเน$(อที่��ในหน�วยคิวามจ*าไวส*าหร�บเก3บข้อม�ล ต์�วอย�างในภาษาซื้� คิ$อ

int Stack[4];

การน*าข้อม�ลเข้าและออกจากหน�วยคิวามจ*าด้วยแถึวล*าด้�บ ก3เหม$อนก�บที่��ยกต์�วอย�างไป็แลว

Stack

Page 13: สแตก และคิว  (Stack & Queue)

จะเป็�นการด้�งข้อม�ลต์�(งแต์�ต์*าแหน�งแรกจนถึ�งต์*าแหน�งที่�� Top ชั้�(อย��ออกมาแสด้ง

หร$อจะกล�บก�นคิ$อ น*าข้อม�ลจากต์*าแหน�ง Top ชั้�(อย��จนถึ�งต์*าแหน�งที่�� 0 ออกมาแสด้ง

Page 14: สแตก และคิว  (Stack & Queue)

I

0

1

2

3

4

Stack

แสด้งข้อม�ล

10

15

40

60Top

60

40

15

10

Page 15: สแตก และคิว  (Stack & Queue)

หมายถึ�ง การแที่นที่��ข้อม�ลข้อง stack ด้วย Link list ซื้��งเป็�นการจ�ด้สรรเน$(อที่��หน�วยคิวามจ*าแบบ Dynamic น��นคิ$อ หน�วยคิวามจ*าจะถึ�กจ�ด้สรรเม$�อม�การข้องใชั้จร�งๆ ระหว�างการป็ระมวลำผลำโป็รแก่รมผ�านต่ วแป็รชี้น/ดั Pointer

Page 16: สแตก และคิว  (Stack & Queue)

เป็�นการแท้นท้��ท้��ม�คืวามย!ดัหย��นมาก่ เน$�องจากไม�ต่�องก่าหนดัหร!อจองหน�วยคืวามจาลำ�วงหน�า ข้อม�ลที่��เก3บในกองซื้อนม�จ*านวนเที่�าใด้ก3ได้ การป็ฏิ�บ�ต์�การม�

4 ข้�(นต์อนคิ$อ การสราง, การ Push, การ Pop และการแสด้ง

Page 17: สแตก และคิว  (Stack & Queue)

เหม$อนก�บในบที่ที่�� 3 ในที่��น�(จะยกต์�วอย�างกรณี�ที่��เป็�น รายการโยงแบบเด้��ยว การสรางจะเป็�นด้�งน�(

typedef struct node

{ int data;

struct node *Next;

} node;

node *Top;

int info;

data

node

Next

Page 18: สแตก และคิว  (Stack & Queue)

8 0 ^

P

Top

1. Top = Null2. New(P)3. Data(p) = 804. Next(p) = Null5. Top = p

Page 19: สแตก และคิว  (Stack & Queue)

เพื่��มข้อม�ล 90 เข้าไป็ในรายการโยง

80 ^

Top

1. New(P)2. Data(P) = 903. Next(P) = Top

4. Top = p

P

90Top

Page 20: สแตก และคิว  (Stack & Queue)

80 ^

Top

1. New(P)

2. Data(P) = 120

3. Next(P) = Top

4. Top = p

P

120Top 90

Page 21: สแตก และคิว  (Stack & Queue)

80 ^

TopTemp

120Top 90

1. Temp=Top 2. Top = Next(Top)

Page 22: สแตก และคิว  (Stack & Queue)

TopTemp

90Top 80

1. Temp=Top 2. Top = Next(Top)

^

Page 23: สแตก และคิว  (Stack & Queue)

Top = NULLTemp

80Top

1. Temp=Top 2. Top = Next(Top)

Page 24: สแตก และคิว  (Stack & Queue)

Top = NULL

1. Temp=Top

Stack Empty

Page 25: สแตก และคิว  (Stack & Queue)

80 ^

P

120Top 90

P P

120 90 80

Page 26: สแตก และคิว  (Stack & Queue)

โคิรงสรางข้อม�ลแบบ stack ม�การป็ระย1กต์�ใชั้มากในการเข้�ยนโป็รแกรมข้องสาข้าว�ที่ยาการคิอมพื่�วเต์อร� เชั้�น การจ�ด้สรรหน�วยคิวามจ*าในการป็ระมวลผลโป็รแกรม การต์รวจสอบอ�กข้ระสมด้1ล(Balancing Symbol ) และการคิ*านวณีน�พื่จน�คิณี�ต์ศาสต์ร�

Page 27: สแตก และคิว  (Stack & Queue)

การเร�ยกโป็รแกรมย�อยม�คิวามแต์กต์�างก�บการกระโด้ด้ที่��วไป็ เน$�องจากภายหล�งที่��โป็รแกรมย�อยที่*างานเสร3จ หน�วยป็ระมวลผลจะต์องสามารถึกระโด้ด้กล�บมาที่*างานในโป็รแกรมหล�กต์�อไป็ได้   ดั งน %นก่ารเร�ยก่ใชี้�โป็รแก่รมย�อยน %นจะต่�องม�ก่ารเก่"บต่าแหน�งข้องคืาสุ �งท้��ท้างานอย��เด้�มด้วย และเม!�อจบโป็รแก่รมย�อยโป็รแก่รมจะต่�องก่ระโดัดัก่ลำ บมาท้างานท้��เดั/ม โด้ยใชั้ข้อม�ลที่��เก3บไว ภาพื่และอ�ลกอร�ที่�มแสด้งต์�วอย�างการเร�ยกใชั้โป็รแกรมย�อย

Page 28: สแตก และคิว  (Stack & Queue)

PROGRAM MAIN......CALL Sub1PRINT Q....END MAINPROCEDURE Sub1....CALL Sub2A:=A+B...END Sub1PROCEDURE Sub2...END Sub2

Page 29: สแตก และคิว  (Stack & Queue)

การเร�ยกใชั้โป็รแกรมย�อยอ$�น โป็รแกรมย�อยที่��เร�ยกใชั้ต์�วเอง

◦ Factorial การคิ*านวณีน�พื่จน�ที่างคิณี�ต์ศาสต์ร�

Page 30: สแตก และคิว  (Stack & Queue)

Stack

-----Call B-----

Call Cส�(นส1ด้โป็รแกรม

-----Call B1

-----Return

----------

Return

----------

Return1000

1500

B B1

C

1000

1500

Page 31: สแตก และคิว  (Stack & Queue)

ส�ญล�กษณี�แฟกต์อเร�ยลเข้�ยนเป็�น n! 0! = 11! = 12! = 2 x 13! = 3 x 2 x 1n! = n x (n-1) x (n-2) x …x 2 x 1

Page 32: สแตก และคิว  (Stack & Queue)

0

1

2

3

4

Top3

2

1

Stack

3! = 3 * 2!

2! = 2 * 1!

1! = 1 * 0!

0! = 1

Push

Pop

1! = 1 * 1

2! = 2 * 1

3! = 3 * 2

Page 33: สแตก และคิว  (Stack & Queue)

ในก่ารต่รวจสุอบอ ก่ข้ระสุมดั�ลำน %น คือมไพีเลำอร0ไดั�นาแนวคื/ดัโคืรงสุร�างข้�อม�ลำแบบ Stack มาป็ระย�ก่ต่0 โดัยม�ว/ธี�ก่ารดั งน�%

1. ให�อ�านอ ก่ข้ระท้�ลำะต่ ว - ถ้�าอ ก่ข้ระเป็(นอ ก่ข้ระเป็+ดั เชี้�น {,(,[ เป็(นต่�น

ให� PUSH ลำง stack - ถ้�าอ ก่ข้ระเป็(นอ ก่ข้ระป็+ดั เชี้�น },),] เป็(นต่�น

ให�ต่รวจสุอบว�าอ ก่ข้ระบน TOP ข้อง stack เป็(นอ ก่ข้ระเป็+ดัท้��คื��ก่ นหร!อไม�

- ถ้�าใชี้� ให� POP อ ก่ข้ระน %นออก่จาก่ stack - ถ้�าไม�ใชี้� ให�แสุดังผลำ error 2.เม!�ออ�านอ ก่ข้ระหมดัแลำ�ว แต่� stack ไม�เป็(น

stack ว�าง ให�แสุดังผลำ error

Page 34: สแตก และคิว  (Stack & Queue)

เป็�นว�ธี�การจ�ด้ร�ป็แบบข้องสมการใหม� โดัยก่ารย�ายต่าแหน�งข้องเคืร!�องหมายแลำะต่ วดัาเน/นก่าร เชี้�น 2*3 เข้�ยนเป็(น *23 เป็�นต์น โด้ยม�ร�ป็แบบการเข้�ยนสมการ ด้�งน�(

Prefix : การเข้�ยนสมการโด้ยใหเคิร$�องหมายอย��หนาต์�วด้*าเน�นการ

เชั้�น * + 5 3 2 Infix : การเข้�ยนสมการโด้ยใหเคิร$�องหมายอย��ระหว�างต์�ว

ด้*าเน�นการ เชั้�น (5+3)*2 Postfix : การเข้�ยนสมการโด้ยใหเคิร$�องหมายอย��หล�งต์�ว

ด้*าเน�นการ เชั้�น 5 3 + 2 *

Page 35: สแตก และคิว  (Stack & Queue)

ใหอ�านข้อม�ลจากซื้ายไป็ข้วาที่�ละต์�ว ถึาพื่บต์�วถึ�กด้*าเน�นการ(ต์�วเลข้ ) ให push stack ถึาพื่บต่ วดัาเน/นก่าร(เคืร!�องหมาย ) ให� pop item บน

สุ�ดัข้อง stack 2 ต่ ว แลวที่*าการคิ*านวณีต์ามเคิร$�องหมายที่��พื่บ แลวน*าผลล�พื่ธี�ที่��ได้ push stack

ท้าซ้ำ%าจนก่ระท้ �งหมดัข้�อม�ลำ

Page 36: สแตก และคิว  (Stack & Queue)
Page 37: สแตก และคิว  (Stack & Queue)

1. Completely parnthesize th infix notation to specify the order of all operations

2. Move each operator to the space held by its corressponding right parenthesis

3. Remove all parenthesis ต์�วอย�าง A/B^C+D*E-A*C ผลล�พื่ธี�ข้อ --1 > (((A/(B^C))+

(D*E))-(A*C)) ผลล�พื่ธี�ข้อ --2 > (((A(BC)^)/(DE)*)

+(AC)*) - ผลล�พื่ธี�ข้อ --3 > ABC^/DE*+AC*-

Page 38: สแตก และคิว  (Stack & Queue)

Algorithm ก่ารเป็ลำ��ยน Infix เป็(น Postfix ให EXP เป็�นสมการคิณี�ต์ศาสต์ร�ที่��เป็�น Infix และ

Stack เป็�น stack ใด้ ๆ NEXP เป็�นสมการที่��เป็�น Postfix

1. ใส� “(“ เข้าไป็ใน Stack 2. อ�าน EXP จากซื้ายไป็ข้วา 21. ถึาพื่บต์�วถึ�กด้*าเน�นการ(ต์�วเลข้ ) ใหใส�เข้าไป็

ใน NEXP 2.2 ถึาพื่บ “(“ ให push ใส� stack

Page 39: สแตก และคิว  (Stack & Queue)

2.3 ถึาพื่บต์�วด้*าเน�นการ(เคิร$�องหมาย ) ใหที่*าด้�งน�( - ให pop ต์�วด้*าเน�นการ ที่1กต์�วที่��ม�ล*าด้�บ

คิวามส*าคิ�ญกว�าต์�วด้*าเน�นการที่��พื่บใน 23. ออกมาใส�ใน NEXP ใหหมด้

- น*าต์�วด้*าเน�นการที่��พื่บใน 23. push เข้าใน stack แที่นที่��

24. ถึาพื่บ “)” ใหที่*าด้�งน�( - ให push ต์�วด้*าเน�นการ ที่1กต์�วมาใส�ไวใน

NEXP ใหหมด้จนพื่บ “(“ - push “(“ ที่�(ง 3. จบการที่*างาน

Page 40: สแตก และคิว  (Stack & Queue)

เคืร!�องหมาย คืวามสุาคื ญเม!�ออย��ในStack

คืวามสุาคื ญเม!�ออย��ท้��อ/นพี�ต่

** (ยกก*าล�ง) 3 4

* , / 2 2

+ , - 1 1

( 0 3

Page 41: สแตก และคิว  (Stack & Queue)

เคิร$�องหมาย

Stack น�พื่จน� Postfix

A

+

B

ว�าง+

+

A

A

AB

AB+

Page 42: สแตก และคิว  (Stack & Queue)

เคิร$�องหมาย Stack น�พื่จน� Postfix

A

+

B

*

C

ว�าง+

+

+ , *

+ , *

A

A

AB

AB

ABC

ABC*+

Page 43: สแตก และคิว  (Stack & Queue)

เคิร$�องหมาย Stack น�พื่จน� Postfix

(

A

+

B

)

*

C

(

(

(+

(+

ว�าง *

*

ว�างA

A

AB

AB+

AB+

AB+C

AB+C*

Page 44: สแตก และคิว  (Stack & Queue)
Page 45: สแตก และคิว  (Stack & Queue)

เคิร$�องหมาย Stack น�พื่จน� Postfix

8

*

(

4

+

3

)

-

9

/

6

ว�าง

ว�าง*

*(

*(

*(+

*(+

*

-

-

- /

- /

8

8

8

8 4

8 4

8 4 3

8 4 3 +

8 4 3 + *

8 4 3 + * 9

8 4 3 + * 9

8 4 3 + * 9 6

8 4 3 + * 9 6 / -

Page 46: สแตก และคิว  (Stack & Queue)

จงเป็ล��ยนน�พื่จน�อ�นฟ,กซื้� ต์�อไป็น�(ใหเป็�นโพื่สฟ,กซื้� 1. ((A+B)*C)-D 2. A*C/D 3. 10+15*20/6 4. 5*4+(8/2) 5. 10/(2+3)+(5+6)*9 6. A*(B-C/D)+E


Recommended