ลักษณะการทำงานของ Stack กองซ้อน Push Operation Pop Operation
Stack ? โครงสร้างข้อมูลเชิงเส้น (Linear) แบบกองซ้อน ที่โครงสร้างหนึ่ง สามารถเก็บข้อมูลได้หลายค่า การเพิ่มหรือการลบข้อมูล จะเกิดขึ้นที่ปลายทางด้านใด ด้านหนึ่งของข้อมูลเท่านั้น Push Pop Push แสดงภาพแนวนอน แสดงภาพแนวตั้ง Pop
Stack ? ข้อมูลที่ถูกจัดวางก่อนจะถูกเรียกใช้ทีหลัง ตาม ความสัมพันธ์แบบ Last In First Out:: LIFO มีการกระทำ (Operations) ที่จัดการข้อมูลอยู่2 ตัว คือการนำข้อมูลเข้า(Push ) และออก(Pop) Stack มีขนาดจำกัด และไม่จำกัดขึ้นอยู่กับวิธีการสร้าง
ตัวอย่าง การวางและหยิบจาน จากจานที่ตั้งเป็นชั้น การเก็บรถเข็นในห้าง การวางและหยิบจาน จากจานที่ตั้งเป็นชั้น การเก็บรถเข็นในห้าง LIFO ( Last In First Out) ข้อมูลที่ถูกนำเข้าไปใส่ใน Stack ก่อน จะถูกนำออกจาก Stack ที่หลัง
Push(ตัวแปร Stack, ข้อมูล) Stack’s Operations Push(ตัวแปร Stack, ข้อมูล) การแทรก หรือ เพิ่มสมาชิก เข้าไปใน Stack Pop(ตัวแปร Stack, ข้อมูล) การลบ หรือนำสมาชิก ออกจาก Stack การกระทำ Push หรือ Pop แต่ละครั้งจะกระทำกับข้อมูลหรือสมาชิกได้เพียง 1 ตัวเท่านั้น
LIFO ( Last In First Out) Top of Stack Bottom of Stack
Max Size = 8 Top =2 Top =1 Top =0 Push(Stack, “A”) Push(Stack, “B”) Top =2 B A Top =1 A Top =0 Stack Empty
การโปรแกรมแบบรีเคอร์ซีฟ (Recursive Programming)
2.การประมวลผลโปรแกรมแบบ Recursive โปรแกรมเรียกใช้ตัวเอง คล้ายกับการเรียกใช้ฟังก์ชัน เพียงแต่เรียกฟังก์ชันที่มีชื่อตนเองเท่านั้น ทุกๆ ครั้งที่มีการเรียกใช้ตัวเอง จะเก็บข้อมูลไว้ใน Stack ก่อนเสมอ #include <iostream.h> int Factorial( int n ){ int fact; if (n == 0) fact = 1; else fact = n * Factorial (n-1); return fact; } void main(){ int n; cout << "Enter Number : "; cin >> n; cout << "Factorial " <n<< " = "<< Factorial(n);
ตัวอย่างการ Recursive Factorial(0) Factorial(1) Factorial(2) Factorial(3) Factorial(4)
ตัวอย่างการ Recursive Factorial(0) Factorial(1) Factorial(2) Factorial(3) Factorial(4)
Factorial := 3 * factorial(3-1) Y := Factorial(3); Factorial := 3 * factorial(3-1) 3
Factorial := 2 * factorial(2-1) Y := Factorial(2); Factorial := 2 * factorial(2-1) 2 3
Factorial := 1 * factorial(1-1) Y := Factorial(1); Factorial := 1 * factorial(1-1) 1 2 3
Y := Factorial(0); Factorial := 1 1 2 3
Factorial(1) := 1 * factorial(0) Return 1 Factorial := 1*1 2 3
Factorial(2) := 2 * factorial(1) Return 2 Factorial := 1*2 3
Factorial(3) := 3 * factorial(2) Return 3 Factorial := 2*3
Y :=6
1. จงเขียนโปรแกรม Recursive ในการหาเทอมของอนุกรม Fibonacci Sequence จำนวน N เทอม โดยป้อนจำนวนเต็ม N เข้าไป แล้วแสดงผลอนุกรมดังกล่าว T(1) = 0 T(2) = 1 T(N) = T(n-2) + T(n-1) Lab3-1.cpp ตัวอย่าง Output Enter Term of Fibonacci : 10 0 1 1 2 3 5 8 13 21 34
2. จงเขียนโปรแกรม Recursive ในการหาค่าของ Xn เทอม โดยป้อนค่าของ X และจำนวนเต็ม N เข้าไป แล้วแสดงผลค่าผลลัพธ์ดังกล่าว X0 = 1 Xn = X * Xn-1 Lab3-2.cpp ตัวอย่าง Output Enter Number : 2 Enter Power : 5 Power 2 of 5 = 32