First In Fisrt Out : FIFO หมายถึ�งข้อม�ลที่��เข้�ามาในล�สต์�ก่�อน จะถึ�กนาออก่จากล�สต์�เป็�นลำาดั บแรก่ ต์�วอย�างได้แก�การย$นรอคิ�วเพื่$�อซื้$(อต์�)ว
Last In First Out : LIFO หมายถึ�งข้อม�ลที่��เข้�ามาในล�สต์�เป็�นลำาดั บสุ�ดัท้�าย จะถึ�กนาออก่จากล�สต์�เป็�นอ นดั บแรก่ ต์�วอย�างได้แก�การน*าชั้�(นข้องป็,� นโต์เข้าและออกจากเถึาป็,� นโต์
เป็�นโคิรงสรางข้อม�ลแบบเชั้�งเสน ท้��ม�ก่ารใสุ�ข้�อม�ลำเข้�า แลำะนาข้�อม�ลำออก่เพี�ยงดั�านเดั�ยว ด้�งน�(น ข้อม�ลที่��เข้าไป็อย��ใน stack ก�อนจะออกจาก stack หล�งข้อม�ลที่��เข้าไป็ใน stack ที่�หล�ง น��นคิ$อ การ "เข้�าท้�หลำ งแต่�ออก่ก่�อน " (Last In First Out : LIFO)
ป็ฏิ�บ�ต์�การพื่$(นฐานข้องสแต์กได้แก� push คื!อก่ารนาข้�อม�ลำเก่"บในสุแต่ก่ และ pop คื!อก่ารนาข้�อม�ลำออก่จาก่สุแต่ก่ ซื้��งที่�(งสองกระบวนการ จะกระที่*าที่��ส�วนบนส1ด้ข้องสแต์กเสมอ โด้ยป็กต์�แลวม�กก*าหนด้ใหม�ต่ วชี้�%สุ�วนบนสุ�ดัข้องสุแต่ก่ เร�ยก่ว�า top ส�วนป็ฏิ�บ�ต์�การอ$�น ๆ เป็�นป็ฏิ�บ�ต์�การที่��เก��ยวเน$�องก�บการ push และ pop ม�ด้�งน�(
การสุร�างสุแต่ก่ (CREATE) การที่ด้สอบว�า stack ว�างหร!อไม�(EMPTY) การที่ด้สอบว�า stack เต่"มหร!อไม�(FULL) การท้าให� stack เป็(น stack ว�าง(CLEAR)
ก่ารนาข้�อม�ลำเข้�าสุ��สุแต่ก่ (Push) กระที่*าที่��ส�วนบนข้องสแต์ก (Top) ซื้��งต่�องม�ก่ารต่รวจสุอบก่�อนว�าสุแต่ก่เต่"มหร!อไม�
และการน*าข้อม�ลออก่จาก่สุแต่ก่ (Pop) กระที่*าที่��ส�วนบนข้องสแต์กเชั้�นก�น โด้ยต์รวจสอบว�าม�สมาชั้�กอย��ในสแต์กหร$อไม� (ต่รวจสุอบว�าสุแต่ก่ว�างเป็ลำ�าหร!อไม� )
เป็�นการด้*าเน�นการที่��น*าข้อม�ลเข้าไป็เก3บไวด้านบนส1ด้ข้องกองซื้อน (Top of the Stack) เร$�อย ๆ จนกว�ากองซื้อนไม�สามารถึน*าข้อม�ลเข้าไป็เก3บได้
จะเร�ยกว�า กองซื้อนเต์3ม (Stack Full)
0
1
2
3
4
Top
90
1. Top = 0
2. Top = Top + 1
3. Stack[Top] = 10154060
Stack
Stack Full
ก่ารท้างานจะต่รงข้�ามก่ บ Push จะด้�งเอาข้อม�ลที่��อย��บนส1ด้ออกมาก�อน แต์�ก�อนที่��จะด้�งจะม�
การต์รวจสอบว�ากองซื้อนว�างหร$อไม� ◦ถ้�าว�างจะไม�สุามารถ้นาข้�อม�ลำออก่ไดั� แสด้งว�า
กองซื้อนว�าง (Stack Empty)◦ถึาไม�ว�างจะน*าเอาข้อม�ลออกแลวเลำ!�อนต่ วชี้�%ไป็
ย งต่าแหน�งถ้ ดัลำงไป็
Top2. Top = Top - 1
1. Temp = Stack[Top]
0
1
2
3
4
Stack
Stack Empty
Temp
10
15
40
60
หมายถึ�ง ก่ารแท้นท้��ข้�อม�ลำข้อง stack ดั�วย array ซื้��ง เป็�นการจ ดัสุรรเน!%อท้��หน�วยคืวามจาแบบ static น��นคิ$อ
ม�ก่ารก่าหนดัข้นาดัข้อง stack ลำ�วงหน�าว�าม�ข้นาด้เที่�าใด้ และจะม�การจ�ด้สรรเน$(อที่��หน�วยคิวามจ*าใหเลย
แบบล*าด้�บจะต์องม�การจองพื่$(นที่��หน�วยคิวามจ*าไวล�วงหนา ว�าจะม�ข้นาด้เที่�าใด้
โดัยแถ้วลำาดั บน�%จะป็+ดัป็ลำายดั�านหน,�งไว� เพี!�อให�ข้�อม�ลำเข้�า-ออก่ท้างเดั�ยว
ป็ฏิ�บ�ต์�การม� 4 ข้�(นต์อนคิ$อ◦การสราง◦การ Push◦การ Pop◦การ แสด้ง
เป็�นการเต์ร�ยมเน$(อที่��ในหน�วยคิวามจ*าไวส*าหร�บเก3บข้อม�ล ต์�วอย�างในภาษาซื้� คิ$อ
int Stack[4];
การน*าข้อม�ลเข้าและออกจากหน�วยคิวามจ*าด้วยแถึวล*าด้�บ ก3เหม$อนก�บที่��ยกต์�วอย�างไป็แลว
Stack
จะเป็�นการด้�งข้อม�ลต์�(งแต์�ต์*าแหน�งแรกจนถึ�งต์*าแหน�งที่�� Top ชั้�(อย��ออกมาแสด้ง
หร$อจะกล�บก�นคิ$อ น*าข้อม�ลจากต์*าแหน�ง Top ชั้�(อย��จนถึ�งต์*าแหน�งที่�� 0 ออกมาแสด้ง
I
0
1
2
3
4
Stack
แสด้งข้อม�ล
10
15
40
60Top
60
40
15
10
หมายถึ�ง การแที่นที่��ข้อม�ลข้อง stack ด้วย Link list ซื้��งเป็�นการจ�ด้สรรเน$(อที่��หน�วยคิวามจ*าแบบ Dynamic น��นคิ$อ หน�วยคิวามจ*าจะถึ�กจ�ด้สรรเม$�อม�การข้องใชั้จร�งๆ ระหว�างการป็ระมวลำผลำโป็รแก่รมผ�านต่ วแป็รชี้น/ดั Pointer
เป็�นการแท้นท้��ท้��ม�คืวามย!ดัหย��นมาก่ เน$�องจากไม�ต่�องก่าหนดัหร!อจองหน�วยคืวามจาลำ�วงหน�า ข้อม�ลที่��เก3บในกองซื้อนม�จ*านวนเที่�าใด้ก3ได้ การป็ฏิ�บ�ต์�การม�
4 ข้�(นต์อนคิ$อ การสราง, การ Push, การ Pop และการแสด้ง
เหม$อนก�บในบที่ที่�� 3 ในที่��น�(จะยกต์�วอย�างกรณี�ที่��เป็�น รายการโยงแบบเด้��ยว การสรางจะเป็�นด้�งน�(
typedef struct node
{ int data;
struct node *Next;
} node;
node *Top;
int info;
data
node
Next
8 0 ^
P
Top
1. Top = Null2. New(P)3. Data(p) = 804. Next(p) = Null5. Top = p
เพื่��มข้อม�ล 90 เข้าไป็ในรายการโยง
80 ^
Top
1. New(P)2. Data(P) = 903. Next(P) = Top
4. Top = p
P
90Top
80 ^
Top
1. New(P)
2. Data(P) = 120
3. Next(P) = Top
4. Top = p
P
120Top 90
80 ^
TopTemp
120Top 90
1. Temp=Top 2. Top = Next(Top)
TopTemp
90Top 80
1. Temp=Top 2. Top = Next(Top)
^
Top = NULLTemp
80Top
1. Temp=Top 2. Top = Next(Top)
Top = NULL
1. Temp=Top
Stack Empty
80 ^
P
120Top 90
P P
120 90 80
โคิรงสรางข้อม�ลแบบ stack ม�การป็ระย1กต์�ใชั้มากในการเข้�ยนโป็รแกรมข้องสาข้าว�ที่ยาการคิอมพื่�วเต์อร� เชั้�น การจ�ด้สรรหน�วยคิวามจ*าในการป็ระมวลผลโป็รแกรม การต์รวจสอบอ�กข้ระสมด้1ล(Balancing Symbol ) และการคิ*านวณีน�พื่จน�คิณี�ต์ศาสต์ร�
การเร�ยกโป็รแกรมย�อยม�คิวามแต์กต์�างก�บการกระโด้ด้ที่��วไป็ เน$�องจากภายหล�งที่��โป็รแกรมย�อยที่*างานเสร3จ หน�วยป็ระมวลผลจะต์องสามารถึกระโด้ด้กล�บมาที่*างานในโป็รแกรมหล�กต์�อไป็ได้ ดั งน %นก่ารเร�ยก่ใชี้�โป็รแก่รมย�อยน %นจะต่�องม�ก่ารเก่"บต่าแหน�งข้องคืาสุ �งท้��ท้างานอย��เด้�มด้วย และเม!�อจบโป็รแก่รมย�อยโป็รแก่รมจะต่�องก่ระโดัดัก่ลำ บมาท้างานท้��เดั/ม โด้ยใชั้ข้อม�ลที่��เก3บไว ภาพื่และอ�ลกอร�ที่�มแสด้งต์�วอย�างการเร�ยกใชั้โป็รแกรมย�อย
PROGRAM MAIN......CALL Sub1PRINT Q....END MAINPROCEDURE Sub1....CALL Sub2A:=A+B...END Sub1PROCEDURE Sub2...END Sub2
การเร�ยกใชั้โป็รแกรมย�อยอ$�น โป็รแกรมย�อยที่��เร�ยกใชั้ต์�วเอง
◦ Factorial การคิ*านวณีน�พื่จน�ที่างคิณี�ต์ศาสต์ร�
Stack
-----Call B-----
Call Cส�(นส1ด้โป็รแกรม
-----Call B1
-----Return
----------
Return
----------
Return1000
1500
B B1
C
1000
1500
ส�ญล�กษณี�แฟกต์อเร�ยลเข้�ยนเป็�น n! 0! = 11! = 12! = 2 x 13! = 3 x 2 x 1n! = n x (n-1) x (n-2) x …x 2 x 1
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
ในก่ารต่รวจสุอบอ ก่ข้ระสุมดั�ลำน %น คือมไพีเลำอร0ไดั�นาแนวคื/ดัโคืรงสุร�างข้�อม�ลำแบบ Stack มาป็ระย�ก่ต่0 โดัยม�ว/ธี�ก่ารดั งน�%
1. ให�อ�านอ ก่ข้ระท้�ลำะต่ ว - ถ้�าอ ก่ข้ระเป็(นอ ก่ข้ระเป็+ดั เชี้�น {,(,[ เป็(นต่�น
ให� PUSH ลำง stack - ถ้�าอ ก่ข้ระเป็(นอ ก่ข้ระป็+ดั เชี้�น },),] เป็(นต่�น
ให�ต่รวจสุอบว�าอ ก่ข้ระบน TOP ข้อง stack เป็(นอ ก่ข้ระเป็+ดัท้��คื��ก่ นหร!อไม�
- ถ้�าใชี้� ให� POP อ ก่ข้ระน %นออก่จาก่ stack - ถ้�าไม�ใชี้� ให�แสุดังผลำ error 2.เม!�ออ�านอ ก่ข้ระหมดัแลำ�ว แต่� stack ไม�เป็(น
stack ว�าง ให�แสุดังผลำ error
เป็�นว�ธี�การจ�ด้ร�ป็แบบข้องสมการใหม� โดัยก่ารย�ายต่าแหน�งข้องเคืร!�องหมายแลำะต่ วดัาเน/นก่าร เชี้�น 2*3 เข้�ยนเป็(น *23 เป็�นต์น โด้ยม�ร�ป็แบบการเข้�ยนสมการ ด้�งน�(
Prefix : การเข้�ยนสมการโด้ยใหเคิร$�องหมายอย��หนาต์�วด้*าเน�นการ
เชั้�น * + 5 3 2 Infix : การเข้�ยนสมการโด้ยใหเคิร$�องหมายอย��ระหว�างต์�ว
ด้*าเน�นการ เชั้�น (5+3)*2 Postfix : การเข้�ยนสมการโด้ยใหเคิร$�องหมายอย��หล�งต์�ว
ด้*าเน�นการ เชั้�น 5 3 + 2 *
ใหอ�านข้อม�ลจากซื้ายไป็ข้วาที่�ละต์�ว ถึาพื่บต์�วถึ�กด้*าเน�นการ(ต์�วเลข้ ) ให push stack ถึาพื่บต่ วดัาเน/นก่าร(เคืร!�องหมาย ) ให� pop item บน
สุ�ดัข้อง stack 2 ต่ ว แลวที่*าการคิ*านวณีต์ามเคิร$�องหมายที่��พื่บ แลวน*าผลล�พื่ธี�ที่��ได้ push stack
ท้าซ้ำ%าจนก่ระท้ �งหมดัข้�อม�ลำ
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*-
Algorithm ก่ารเป็ลำ��ยน Infix เป็(น Postfix ให EXP เป็�นสมการคิณี�ต์ศาสต์ร�ที่��เป็�น Infix และ
Stack เป็�น stack ใด้ ๆ NEXP เป็�นสมการที่��เป็�น Postfix
1. ใส� “(“ เข้าไป็ใน Stack 2. อ�าน EXP จากซื้ายไป็ข้วา 21. ถึาพื่บต์�วถึ�กด้*าเน�นการ(ต์�วเลข้ ) ใหใส�เข้าไป็
ใน NEXP 2.2 ถึาพื่บ “(“ ให push ใส� stack
2.3 ถึาพื่บต์�วด้*าเน�นการ(เคิร$�องหมาย ) ใหที่*าด้�งน�( - ให pop ต์�วด้*าเน�นการ ที่1กต์�วที่��ม�ล*าด้�บ
คิวามส*าคิ�ญกว�าต์�วด้*าเน�นการที่��พื่บใน 23. ออกมาใส�ใน NEXP ใหหมด้
- น*าต์�วด้*าเน�นการที่��พื่บใน 23. push เข้าใน stack แที่นที่��
24. ถึาพื่บ “)” ใหที่*าด้�งน�( - ให push ต์�วด้*าเน�นการ ที่1กต์�วมาใส�ไวใน
NEXP ใหหมด้จนพื่บ “(“ - push “(“ ที่�(ง 3. จบการที่*างาน
เคืร!�องหมาย คืวามสุาคื ญเม!�ออย��ในStack
คืวามสุาคื ญเม!�ออย��ท้��อ/นพี�ต่
** (ยกก*าล�ง) 3 4
* , / 2 2
+ , - 1 1
( 0 3
เคิร$�องหมาย
Stack น�พื่จน� Postfix
A
+
B
ว�าง+
+
A
A
AB
AB+
เคิร$�องหมาย Stack น�พื่จน� Postfix
A
+
B
*
C
ว�าง+
+
+ , *
+ , *
A
A
AB
AB
ABC
ABC*+
เคิร$�องหมาย Stack น�พื่จน� Postfix
(
A
+
B
)
*
C
(
(
(+
(+
ว�าง *
*
ว�างA
A
AB
AB+
AB+
AB+C
AB+C*
เคิร$�องหมาย 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 / -
จงเป็ล��ยนน�พื่จน�อ�นฟ,กซื้� ต์�อไป็น�(ใหเป็�นโพื่สฟ,กซื้� 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