25
1 แแแแ (Stack)

แสตก

  • Upload
    nuwaew

  • View
    952

  • Download
    1

Embed Size (px)

Citation preview

Page 1: แสตก

1แสตก (Stack)

Page 2: แสตก

2

สแตก (Stack) คื�อ โคืรงสรางข้อมู ลชนิ�ดหนิ��งที่��มู�การเก�บข้อมู ลแบบเร�ยงล�าด�บ การใส!ข้อมู ลเข้าหร�อนิ�าข้อมู ลออกจากสแตกกระที่�าที่��บร�เวณเด�ยวก�นิซึ่��งเร�ยกว!า ที่อป (top) ข้องสแตกและล�กษณะที่��ส�าคื�ญคื�อ ข้อมู ลที่��ใส!หล�งส+ด จะถู กนิ�าออกมูาจากสแตกเป-นิล�าด�บแรกส+ด (last in, first out หร�อ LIFO)

การดำาเนิ�นิงานิของสแตก ประกอบดวยกระบวนิงานิหล�ก 2 กระบวนิงานิคื�อ 1 .พุ+ช (push)2. พุอพุ (pop)

Page 3: แสตก

3

push คื�อ การนิ�าข้อมู ลใส!ลงไปในิสแตก s เมู��อตองการใส!ข้อมู ล i ในิสแตกด�งนิ�0นิการด�าเนิ�นิงานิข้องกระบวนิงานิ push(s,i) คื�อใส! ข้อมู ล i ลงไปที่��ที่อปข้องสแตก s

pop คื�อ การนิ�าข้อมู ลออกจากส!วนิบนิส+ดข้องสแตก และนิ�าคื!านิ�0ไปใส!ในิต�วแปร iสามูารถูเข้�ยนิดวยคื�าส��ง i = pop(s)

Page 4: แสตก

การดำาเนิ�นิการก�บสแตก

การเพุ��มูข้อมู ลลงสแตก เร�ยกว!า push เช!นิ push(A) หมูายถู�งนิ�า A ใส!ลงสแตก push(N) หมูายถู�งนิ�า N ใส!ลงสแตก

ANtop

Top เป-นิต�วช�0ต�าแหนิ!งข้องสมูาช�กต�วบนิส+ดข้องสแตก

Page 5: แสตก

การดำาเนิ�นิการก�บสแตก (ต�อ)

การนิ�าข้อมู ลออกจากสแตก เร�ยกว!า pop เช!นิ pop() หมูายถู�ง นิ�าสมูาช�กต�วบนิส+ดออก

จากสแตก

ANtop

Atop

ก!อนิ pop() หล�ง pop()

Page 6: แสตก

การ Implement สแตก

Implement ดวยอาร1เรย1

Implement ล�งคื1ล�สต1

การ implement Stack ทำาไดำ� 2 วิ�ธี�คื�อ

1. Array Implementation2. Linked List

Implementation

Page 7: แสตก

การ Implement สแตกดำ�วิยอาร�เรย�

ข้อจ�าก�ดข้องอาร1เรย1 คื�อ จ�านิวนิสมูาช�ก จ�าก�ด ตามูข้นิาดข้องอาร1เรย1

เช!นิ ถูาใชอาร1เรย1ข้นิาด 10 ช!อง แที่นิ สแตก จ�านิวนิสมูาช�กส งส+ดข้อง สแตกจะถู กจ�าก�ดแคื! 10 ต�ว ไมู!สามูารถูใส!ต�วที่�� 11 , 12 ลงไปได

ซึ่��งจะส!งผลต!อ อ�ลกอร�ที่�มู push ในิการเพุ��มูข้อมู ลลงสแตก

ส!วนิการนิ�าข้อมู ลออกจากสแตก ถูาสแตกว!าง (อาร1เรย1ย�งไมู!มู�ข้อมู ล ) ก�จะไมู!สามูารถู pop ได เพุราะไมู!มู�ข้อมู ลให pop

Page 8: แสตก

โคืรงสรางข้อมู ลสแตก โคืรงสรางข้อมู ลสแตก (Stack)(Stack)

Page 9: แสตก

โคืรงสรางข้อมู ลสแตก โคืรงสรางข้อมู ลสแตก (Stack)(Stack)

ในิการใชงานิโคืรงสรางข้อมู ลที่��เป3ดปลายเพุ�ยงดานิเด�ยว การด�าเนิ�นิการก�บข้อมู ลในิโคืรงสรางสามูารถูกระที่�าไดเพุ�ยงปลายข้างหนิ��งเที่!านิ�0นิ ข้อมู ลที่��ถู กบรรจ+อย !ในิโคืรงสรางด�งกล!าว ต�วแรกไมู!สามูารถูถู กด�งข้อมู ลออกจากโคืรงสรางไดถูาข้อมู ลต�วที่��เข้ามูาในิล�าด�บหล�งย�งไมู!ถู กด�งออกไปก!อนิ โคืรงสรางข้อมู ลที่��มู�ล�กษณะด�งกล!าวนิ�0 ไมู!สามูารถูใชงานิโคืรงสรางอาร1เรย1 (Array) ที่��วไปได จ�งมู�การใชโคืรงสรางข้อมู ลที่��เร�ยกว!า โคืรงสรางข้อมู ลสแตก (Stack) มูาแที่นิ

Page 10: แสตก

ล�กษณะข้องโคืรงสรางข้อมู ลสแตก ล�กษณะข้องโคืรงสรางข้อมู ลสแตก (Stack)(Stack)โคืรงสรางข้อมู ลแบบสแตก (Stack)

เป-นิโคืรงสรางข้อมู ลแบบรายการเช�งเสนิ (Linear List) ที่��มู�ล�กษณะที่��ส�าคื�ญคื�อ การนิ�าข้อมู ลเข้าส !สแตก (Insertion : บางคืร�0งอาจเร�ยกว!า Pushing) และการนิ�าข้อมู ลออกจากสแตก (Deletion บางคืร�0งเร�ยกว!า Popping) สามูารถูกระที่�าไดเพุ�ยงปลายดานิเด�ยวข้องโคืรงสรางเที่!านิ�0นิ โดยข้อมู ลที่��เข้าไปเก�บที่�หล�งจะถู กนิ�าออกมูาใชงานิก!อนิ จะเร�ยกล�กษณะแบบนิ�0ว!า เข้าหล�งออกก!อนิ (Last In First Out : LIFO)

Page 11: แสตก

ล�กษณะข้องโคืรงสรางข้อมู ลสแตก ล�กษณะข้องโคืรงสรางข้อมู ลสแตก (Stack)(Stack)

โคืรงสรางข้องสแตก

Page 12: แสตก

ล�กษณะข้องโคืรงสรางข้อมู ลสแตก ล�กษณะข้องโคืรงสรางข้อมู ลสแตก (Stack)(Stack)

ล�กษณะข้องสแตกในิช�ว�ตประจ�าว�นิ

Page 13: แสตก

การแที่นิโคืรงสรางข้อมู ลสแตก การแที่นิโคืรงสรางข้อมู ลสแตก (Stack)(Stack)

โคืรงสรางข้อมู ลแบบสแตกสามูารถู แที่นิไดดวยโคืรงสรางข้อมู ลอาร1เรย1 (Array) แต!ก�าหนิดว�ธี�การเข้าถู�งข้อมู ลในิอาร1เรย1นิ�0นิตามูกฏเกณฑ์1ข้องสแตก คื�อ เข้าหล�งออกก!อนิ (Last In First Out : LIFO) ด�งนิ�0นิการเข้าถู�งข้อมู ลในิโคืรงสรางสแตกจะตองอาศั�ยพุอยนิ1เตอร1 (Pointer) ซึ่��งที่�าหนิาที่��ช�0ต�าแหนิ!งข้องข้อมู ลต�วส+ดที่ายข้องสแตก

Page 14: แสตก

A

B

C

D

E Pointer

การแที่นิโคืรงสรางข้อมู ลสแตก การแที่นิโคืรงสรางข้อมู ลสแตก (Stack)(Stack)

โคืรงสรางอาร1เรย1 (Array)

Page 15: แสตก

…1 2 9

9100

8 …

8 20

8 20

6 …

1

2

3

Pointer

Stack[100]

แสดงโคืรงสรางข้อมู ลสแตกดวยอาร1เรย1 Stack[100]

การแที่นิโคืรงสรางข้อมู ลสแตก การแที่นิโคืรงสรางข้อมู ลสแตก (Stack)(Stack)

Page 16: แสตก

การด�าเนิ�นิการก�บโคืรงสรางข้อมู ลสการด�าเนิ�นิการก�บโคืรงสรางข้อมู ลสแตก แตก (Stack)(Stack)

มู�อย ! 3 กระบวนิการ คื�อ1. การสรางสแตก

2 การเพุ��มูข้อมู ลเข้าสแตก (Insertion หร�อ Pushing)

3 . การลบข้อมู ลในิสแตก (Deletionหร�อ Popping)

Page 17: แสตก

คื!าที่��เก��ยวข้องก�บโคืรงสรางข้อมู ลสแตกคื!าที่��เก��ยวข้องก�บโคืรงสรางข้อมู ลสแตก

1 . สแตกพุอยนิ1เตอร1 (Stack Pinter : SP) เป-นิต�วช�0ข้อมู ลคื!าที่��อย !บนิส+ดข้องสแตก (Top of Stack)

2. พุ+ช (Push) เป-นิการกระที่�าเพุ��อนิ�าข้อมู ลเข้าส !สแตก เมู��อสแตกเต�มูแลว หากมู�การนิ�าข้อมู ลเข้าส !สแตกอ�กจะเก�ดข้อผ�ดพุลาดที่��เร�ยกว!า โอเวอร1โฟลว1 (Over flow) ข้�0นิ

3. ป9อบ (Pop) เป-นิการกระที่�าเพุ��อนิ�าข้อมู ลที่��อย !บนิส+ดออกมูาจากโคืรงสรางสแตก เมู��อนิ�าข้อมู ลคื!าส+ดที่ายออกจากสแตกแลวจะที่�าใหสแตกว!างเปล!า (Empty) ได หากมู�การ Pop คื!าข้อมู ลอ�กจะเก�ดข้อผ�ดพุลาดที่��เร�ยกว!า อ�นิเดอร1โฟลว1 (Under flow) ข้�0นิ

Page 18: แสตก

ล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลสแตก สแตก (Stack)(Stack)

Q

A

Q A

Q(Empty)

Push box Q onto empty stack

Push box A onto stack

Pop box A from stack

Pop box Q from stack

Pushing and Popping a stack

Page 19: แสตก

R

D

M

D M

Push box R onto empty stack

Push box D onto stack

Push box M onto stack

Pop box M from stack

ล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลสแตก สแตก (Stack)(Stack)

Pushing and Popping a stack (Continue)

Page 20: แสตก

Q

S

Push box Q onto stack

Push box S onto stack

ล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลสแตก สแตก (Stack)(Stack)

Pushing and Popping a stack (Continue)

Page 21: แสตก

ล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลสแตก สแตก (Stack)(Stack)

Stack frames for subprogram calls

Page 22: แสตก

ต�วิอย�าง โคืรงสร�างสแตกในิชี�วิ�ตประจำาวิ�นิ

Page 23: แสตก

คื#ณลั�กษณะของสแตกo การนิ�าข้อมู ลเข้าและออกจากสแตกจะกระที่�าที่��

ปลายข้างเด�ยวเที่!านิ�0นิo การที่�างานิข้องสแตกจะมู�ล�กษณะแบบ เข�าหลั�ง

ออกก�อนิ (LIFO: Last In, First Out)o ต�วอย!างการที่�างานิแบบ LIFO เช!นิ การวางจานิ

ซึ่อนิก�นิ

Page 24: แสตก

ประโยชีนิ�ของสแตกo เพุ��อแปลงนิ�พุจนิ1ที่างคืณ�ตศัาสตร1o การจ�ดล�าด�บการที่�างานิแบบ recursive

หร�อการเร�ยกใชฟ:งก1ช�นิo เป-นิกลไกส�าคื�ญในิการที่�างานิข้อง

compiler เช!นิ การตรวจสอบเคืร��องหมูาย { } ในิภาษาซึ่� หร�อการตรวจสอบเคืร��องหมูายวงเล�บ

Page 25: แสตก

25

จำบการนิาเสนิอคื�ะ