Upload
nuwaew
View
952
Download
1
Embed Size (px)
Citation preview
1แสตก (Stack)
2
สแตก (Stack) คื�อ โคืรงสรางข้อมู ลชนิ�ดหนิ��งที่��มู�การเก�บข้อมู ลแบบเร�ยงล�าด�บ การใส!ข้อมู ลเข้าหร�อนิ�าข้อมู ลออกจากสแตกกระที่�าที่��บร�เวณเด�ยวก�นิซึ่��งเร�ยกว!า ที่อป (top) ข้องสแตกและล�กษณะที่��ส�าคื�ญคื�อ ข้อมู ลที่��ใส!หล�งส+ด จะถู กนิ�าออกมูาจากสแตกเป-นิล�าด�บแรกส+ด (last in, first out หร�อ LIFO)
การดำาเนิ�นิงานิของสแตก ประกอบดวยกระบวนิงานิหล�ก 2 กระบวนิงานิคื�อ 1 .พุ+ช (push)2. พุอพุ (pop)
3
push คื�อ การนิ�าข้อมู ลใส!ลงไปในิสแตก s เมู��อตองการใส!ข้อมู ล i ในิสแตกด�งนิ�0นิการด�าเนิ�นิงานิข้องกระบวนิงานิ push(s,i) คื�อใส! ข้อมู ล i ลงไปที่��ที่อปข้องสแตก s
pop คื�อ การนิ�าข้อมู ลออกจากส!วนิบนิส+ดข้องสแตก และนิ�าคื!านิ�0ไปใส!ในิต�วแปร iสามูารถูเข้�ยนิดวยคื�าส��ง i = pop(s)
การดำาเนิ�นิการก�บสแตก
การเพุ��มูข้อมู ลลงสแตก เร�ยกว!า push เช!นิ push(A) หมูายถู�งนิ�า A ใส!ลงสแตก push(N) หมูายถู�งนิ�า N ใส!ลงสแตก
ANtop
Top เป-นิต�วช�0ต�าแหนิ!งข้องสมูาช�กต�วบนิส+ดข้องสแตก
การดำาเนิ�นิการก�บสแตก (ต�อ)
การนิ�าข้อมู ลออกจากสแตก เร�ยกว!า pop เช!นิ pop() หมูายถู�ง นิ�าสมูาช�กต�วบนิส+ดออก
จากสแตก
ANtop
Atop
ก!อนิ pop() หล�ง pop()
การ Implement สแตก
Implement ดวยอาร1เรย1
Implement ล�งคื1ล�สต1
การ implement Stack ทำาไดำ� 2 วิ�ธี�คื�อ
1. Array Implementation2. Linked List
Implementation
การ Implement สแตกดำ�วิยอาร�เรย�
ข้อจ�าก�ดข้องอาร1เรย1 คื�อ จ�านิวนิสมูาช�ก จ�าก�ด ตามูข้นิาดข้องอาร1เรย1
เช!นิ ถูาใชอาร1เรย1ข้นิาด 10 ช!อง แที่นิ สแตก จ�านิวนิสมูาช�กส งส+ดข้อง สแตกจะถู กจ�าก�ดแคื! 10 ต�ว ไมู!สามูารถูใส!ต�วที่�� 11 , 12 ลงไปได
ซึ่��งจะส!งผลต!อ อ�ลกอร�ที่�มู push ในิการเพุ��มูข้อมู ลลงสแตก
ส!วนิการนิ�าข้อมู ลออกจากสแตก ถูาสแตกว!าง (อาร1เรย1ย�งไมู!มู�ข้อมู ล ) ก�จะไมู!สามูารถู pop ได เพุราะไมู!มู�ข้อมู ลให pop
โคืรงสรางข้อมู ลสแตก โคืรงสรางข้อมู ลสแตก (Stack)(Stack)
โคืรงสรางข้อมู ลสแตก โคืรงสรางข้อมู ลสแตก (Stack)(Stack)
ในิการใชงานิโคืรงสรางข้อมู ลที่��เป3ดปลายเพุ�ยงดานิเด�ยว การด�าเนิ�นิการก�บข้อมู ลในิโคืรงสรางสามูารถูกระที่�าไดเพุ�ยงปลายข้างหนิ��งเที่!านิ�0นิ ข้อมู ลที่��ถู กบรรจ+อย !ในิโคืรงสรางด�งกล!าว ต�วแรกไมู!สามูารถูถู กด�งข้อมู ลออกจากโคืรงสรางไดถูาข้อมู ลต�วที่��เข้ามูาในิล�าด�บหล�งย�งไมู!ถู กด�งออกไปก!อนิ โคืรงสรางข้อมู ลที่��มู�ล�กษณะด�งกล!าวนิ�0 ไมู!สามูารถูใชงานิโคืรงสรางอาร1เรย1 (Array) ที่��วไปได จ�งมู�การใชโคืรงสรางข้อมู ลที่��เร�ยกว!า โคืรงสรางข้อมู ลสแตก (Stack) มูาแที่นิ
ล�กษณะข้องโคืรงสรางข้อมู ลสแตก ล�กษณะข้องโคืรงสรางข้อมู ลสแตก (Stack)(Stack)โคืรงสรางข้อมู ลแบบสแตก (Stack)
เป-นิโคืรงสรางข้อมู ลแบบรายการเช�งเสนิ (Linear List) ที่��มู�ล�กษณะที่��ส�าคื�ญคื�อ การนิ�าข้อมู ลเข้าส !สแตก (Insertion : บางคืร�0งอาจเร�ยกว!า Pushing) และการนิ�าข้อมู ลออกจากสแตก (Deletion บางคืร�0งเร�ยกว!า Popping) สามูารถูกระที่�าไดเพุ�ยงปลายดานิเด�ยวข้องโคืรงสรางเที่!านิ�0นิ โดยข้อมู ลที่��เข้าไปเก�บที่�หล�งจะถู กนิ�าออกมูาใชงานิก!อนิ จะเร�ยกล�กษณะแบบนิ�0ว!า เข้าหล�งออกก!อนิ (Last In First Out : LIFO)
ล�กษณะข้องโคืรงสรางข้อมู ลสแตก ล�กษณะข้องโคืรงสรางข้อมู ลสแตก (Stack)(Stack)
โคืรงสรางข้องสแตก
ล�กษณะข้องโคืรงสรางข้อมู ลสแตก ล�กษณะข้องโคืรงสรางข้อมู ลสแตก (Stack)(Stack)
ล�กษณะข้องสแตกในิช�ว�ตประจ�าว�นิ
การแที่นิโคืรงสรางข้อมู ลสแตก การแที่นิโคืรงสรางข้อมู ลสแตก (Stack)(Stack)
โคืรงสรางข้อมู ลแบบสแตกสามูารถู แที่นิไดดวยโคืรงสรางข้อมู ลอาร1เรย1 (Array) แต!ก�าหนิดว�ธี�การเข้าถู�งข้อมู ลในิอาร1เรย1นิ�0นิตามูกฏเกณฑ์1ข้องสแตก คื�อ เข้าหล�งออกก!อนิ (Last In First Out : LIFO) ด�งนิ�0นิการเข้าถู�งข้อมู ลในิโคืรงสรางสแตกจะตองอาศั�ยพุอยนิ1เตอร1 (Pointer) ซึ่��งที่�าหนิาที่��ช�0ต�าแหนิ!งข้องข้อมู ลต�วส+ดที่ายข้องสแตก
A
B
C
D
E Pointer
การแที่นิโคืรงสรางข้อมู ลสแตก การแที่นิโคืรงสรางข้อมู ลสแตก (Stack)(Stack)
โคืรงสรางอาร1เรย1 (Array)
…1 2 9
9100
8 …
8 20
…
8 20
6 …
1
2
3
Pointer
Stack[100]
แสดงโคืรงสรางข้อมู ลสแตกดวยอาร1เรย1 Stack[100]
การแที่นิโคืรงสรางข้อมู ลสแตก การแที่นิโคืรงสรางข้อมู ลสแตก (Stack)(Stack)
การด�าเนิ�นิการก�บโคืรงสรางข้อมู ลสการด�าเนิ�นิการก�บโคืรงสรางข้อมู ลสแตก แตก (Stack)(Stack)
มู�อย ! 3 กระบวนิการ คื�อ1. การสรางสแตก
2 การเพุ��มูข้อมู ลเข้าสแตก (Insertion หร�อ Pushing)
3 . การลบข้อมู ลในิสแตก (Deletionหร�อ Popping)
คื!าที่��เก��ยวข้องก�บโคืรงสรางข้อมู ลสแตกคื!าที่��เก��ยวข้องก�บโคืรงสรางข้อมู ลสแตก
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นิ
ล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลสแตก สแตก (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
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)
Q
S
Push box Q onto stack
Push box S onto stack
ล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลสแตก สแตก (Stack)(Stack)
Pushing and Popping a stack (Continue)
ล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลล�กษณะการที่�างานิข้องโคืรงสรางข้อมู ลสแตก สแตก (Stack)(Stack)
Stack frames for subprogram calls
ต�วิอย�าง โคืรงสร�างสแตกในิชี�วิ�ตประจำาวิ�นิ
คื#ณลั�กษณะของสแตกo การนิ�าข้อมู ลเข้าและออกจากสแตกจะกระที่�าที่��
ปลายข้างเด�ยวเที่!านิ�0นิo การที่�างานิข้องสแตกจะมู�ล�กษณะแบบ เข�าหลั�ง
ออกก�อนิ (LIFO: Last In, First Out)o ต�วอย!างการที่�างานิแบบ LIFO เช!นิ การวางจานิ
ซึ่อนิก�นิ
ประโยชีนิ�ของสแตกo เพุ��อแปลงนิ�พุจนิ1ที่างคืณ�ตศัาสตร1o การจ�ดล�าด�บการที่�างานิแบบ recursive
หร�อการเร�ยกใชฟ:งก1ช�นิo เป-นิกลไกส�าคื�ญในิการที่�างานิข้อง
compiler เช!นิ การตรวจสอบเคืร��องหมูาย { } ในิภาษาซึ่� หร�อการตรวจสอบเคืร��องหมูายวงเล�บ
25
จำบการนิาเสนิอคื�ะ