สแต็กเป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียวซึ่งเรียกว่า Top ของสแต็ก (Top Of Stack) ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อน จะออกจาก stack หลังข้อมูลที่เข้าไปใน stack ทีหลัง นั่นคือ การ “เข้าทีหลังแต่ออกก่อน” (Last In First Out : LIFO)

การกระทำ (Operation) ที่เกี่ยวข้องกับโครงสร้างข้อมูลแบบ Stack ประกอบด้วยกระบวนการ 3 กระบวนการที่สำคัญ คือ

Push

คือ การนำข้อมูลใส่ลงไปในสแต็ก กระทำที่ส่วนบนของสแต็ก (Top) ซึ่งต้องมีการตรวจสอบก่อนว่าสแต็กเต็มหรือไม่ ถ้าไม่เต็มก็ สามารถเพิ่มข้อมูลลงไปในสแต็กได้แล้วปรับตัวชี้ตำแหน่งให้ไปชี้ที่ตำแหน่งข้อมูลใหม่ ถ้าสแต็กเต็ม (Stack Overflow) ก็จะไม่สามารถเพิ่มข้อมูลเขาไปในสแต็กได้อีก

ตัวอย่าง

Stack stack = new Stack();
stack.push ( new Integer ( 1 ) );
stack.push ( new Integer ( 2 ) );
stack.push ( new Integer ( 3 ) );

System.out.println(stack);

ผลลัพธ์

[1, 2, 3]

Pop

คือ การนำข้อมูลออกจากสแต็ก การทำงานจะตรงข้ามกับ Push จะดึงเอาข้อมูลที่อยู่บนสุดออกมาก่อน แต่ก่อนที่จะดึงจะมีการตรวจสอบว่ากองซ้อนว่างหรือไม่ ถ้าว่างจะไม่สามารถนำข้อมูลออกได้ แสดงว่ากองซ้อนว่าง (Stack Empty) ถ้าไม่ว่างจะนำเอาข้อมูลออกแล้วเลื่อนตัวชี้ไปยังตำแหน่งถัดลงไป

ตัวอย่าง

Stack stack = new Stack();
stack.push ( new Integer ( 1 ) );
stack.push ( new Integer ( 2 ) );
stack.push ( new Integer ( 3 ) );

stack.pop ();

System.out.println(stack);

ผลลัพธ์

[1, 2]

คือจะดึงข้อมูลตัวบนสุดออกมาคือ 3 ในสแต็กก็จะเหลือ 1 2 นั่นเอง

Stack Top

เป็นการคัดลอกข้อมูลที่อยู่บนสุดของสแต็กแต่ไม่ได้นำเอาข้อมูลนั้นออกจากสแต็ก

ตัวอย่าง

Stack stack = new Stack();
stack.push ( new Integer ( 1 ) );
stack.push ( new Integer ( 2 ) );
stack.push ( new Integer ( 3 ) );

stack.pop ();

int number = ( int ) stack.peek ();
System.out.println(stack);
System.out.println("Top of stack is "+number);

ผลลัพธ์

[1, 2]

Top of stack is 2

เพราะว่า 2 คือข้อมูลในตำแหน่งบนสุดของสแต็กนั่นเอง

สำหรับวันนี้เรื่องของสแต็กผมก็คงเขียนถึงเท่านี้ก่อน เพราะแค่นี้ก็พอจะเข้าใจโครงสร้างข้อมูลของสแต็กได้แล้ว