สแตค(stack) โครงสร้างข้อมูลแบบ Stack - การสร้าง Stack
Stack Structure ประกอบด้วยสมาชิกที่เรียงต่อกันเป็นแถว โดยการนำสมาชิกเข้าและออกจากสแตกจะกระทำที่ด้านปลายหรือด้านบน Top of the stack
การดำเนินการของ Stack การนำสมาชิกเข้าสู่สแตก ข้อมูลจะอยู่ด้านบนเสมอ การนำสมาชิกออกจากสแตก จะต้องนำข้อมูลด้านบนออกก่อน หรือเรียกว่าข้อมูลที่เข้าสแตกก่อนจะออกทีหลังและข้อมูลที่เข้าสแตกทีหลังจะออกก่อน LIFO Last-In , First-out
ตัวอย่างการดำเนินการของ Stack B C C B A A B A C B A B A A ประโยชน์ช่วยจดจำการกระโดดไปมาระหว่างโปรแกรมย่อยและโปรแกรม Recursive
การดำเนินการเกี่ยวกับ Stack (Operation on Stack) **การนำสมาชิกใหม่เข้าสู่ด้านบนสุดของสแตก Push ซึ่งจะต้องใช้ Stack Pointer ชี้ไปยังช่องว่างถัดไปก่อน **การนำสมาชิกออกจากด้านบนสุดของสแตก Pop ซึ่งจะต้องใช้ Stack Pointer ชี้ไปยังตำแหน่งบนสุดก่อน
การนำสมาชิกเข้าและออกจากสแตก Push (Stack,2) Push (Stack,4) Push (Stack,6) Pop (Stack,Item) Push (Stack,7) 2 2 4 2 4 6 2 4 Item = 6 2 Item = 4 2 7
การตรวจสอบ Stack Stack ว่าง EmptyStack ถ้าว่างค่าจะเป็น True ถ้าไม่ว่างค่าจะเป็น False ถ้าทำการลบในขณะที่ Stack ว่างจะเกิด Underflow Stack เต็ม FullStack ถ้าสมาชิกเต็มค่าจะเป็น True ถ้าสมาชิกไม่เต็มค่าจะเป็น False ถ้าเพิ่มในขณะที่ Stack ยังเต็มอยู่จะเกิด Overflow
การสร้าง Stack ด้วยภาษาปาสคาล Const Max = 100; Type Stackltem = char; Stack = record Item : array[1..Max] of Stackltem; Top : 0..Max; End;
การนำข้อมูลเข้า Stack ด้วยภาษาปาสคาล function push(var s:stack; x:Stackltem) : boolean; Begin if s.Top = Max then push := False else begin s.Top := s.Top + 1; s.Item[s.Top] := x; Push := True; End;
การนำข้อมูลออกจาก Stack ด้วยภาษาปาสคาล Function pop(Var s:Stack; Var x:StackItem): boolean; Begin if empty(s) then pop := False else begin X := s.Item[s.Top]; s.Top := S.Top-1; Pop := True; End;
การตรวจสอบ Stack ว่างด้วยภาษาปาสคาล Begin If Top = 0 Then EmptyStack := true; Else EmptyStack := false; End;
การตรวจสอบ Stack เต็มด้วยภาษาปาสคาล Begin If Top = MaxStack Then FullStack := true Else FullStack := false End;