งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

กอง ซ้อน (stack) ยอดกอง ซ้อน. กองซ้อน จัดเป็นรายการที่การนำเข้า สมาชิก ( เพิ่ม ) หรือการนำออกสมาชิก ( ลบ ) จะกระทำที่ปลายด้านหนึ่งของรายการ และเรียกปลายด้านนั้นว่า.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "กอง ซ้อน (stack) ยอดกอง ซ้อน. กองซ้อน จัดเป็นรายการที่การนำเข้า สมาชิก ( เพิ่ม ) หรือการนำออกสมาชิก ( ลบ ) จะกระทำที่ปลายด้านหนึ่งของรายการ และเรียกปลายด้านนั้นว่า."— ใบสำเนางานนำเสนอ:

1 กอง ซ้อน (stack) ยอดกอง ซ้อน

2 กองซ้อน จัดเป็นรายการที่การนำเข้า สมาชิก ( เพิ่ม ) หรือการนำออกสมาชิก ( ลบ ) จะกระทำที่ปลายด้านหนึ่งของรายการ และเรียกปลายด้านนั้นว่า ยอดกองซ้อน (top of stack) การนำสมาชิกเข้าไปวางไว้ในกองซ้อน เรียกว่า push การนำสมาชิกออกจากกองซ้อน เรียกว่า pop

3 ยอดกอง ซ้อน push pop

4 push ‘A’ A push ‘C’push ‘B’ pop B AA AA A B C B D กองซ้อน ว่าง poppush ‘D’

5 การแทนกองซ้อนด้วยตัวแปร แถวลำดับ stack เป็นตัวแปรแถวลำดับ 1 มิติแทนกองซ้อน top เป็นตัวแปรระบุยอดกองซ้อน (top = -1 คือกอง ซ้อนว่าง ) n เป็นจำนวนสมาชิกของตัวแปร stack x เป็นข้อมูล n = 8 stack top = - 1

6 ฟังก์ชันนำข้อมูลเข้า สู่กองซ้อน push(int stack[ ],int *top,int n,int x) { if (*top < n-1) {*top = *top + 1 ; /* increment top) */ stack[*top] = x; /*insert element */ } else printf(“stack overflow\n”); return 0; } เริ่มต้น top = -1 คือกอง ซ้อนว่าง

7 ฟังก์ชันนำข้อมูลออก จากกองซ้อน pop(int stack[ ],int *top,int *x) { if (*top >= 0) { *x = stack[*top]; /* delete element */ *top = *top -1 ; /*decrement top */ } else printf(“stack underflow \n”); return 0; }

8 แบบฝึกหัด เริ่มต้น top = -1 คำสั่ง push(stack,&top,n,15); push(stack,&top,n,30); pop(stack,&top,&x); จะได้ค่า x = push(stack,&top,n,25); push(stack,&top,n,45); push(stack,&top,n,38); pop(stack,&top,&x); จะได้ค่า x = push(stack,&top,n,49); push(stack,&top,n,50); pop(stack,&top,&x); จะได้ค่า x = push(stack,&top,n,60); push(stack,&top,n,20); จบแล้ว top = จำนวนสมาชิกในกองซ้อน =

9 การประยุกต์ กองซ้อน จากจุด A ไปจุด B : push A จากจุด B ไปจุด C : push B จากจุด C ไปจุด D : push C จากจุด D ไปจุด E : push D pop : กลับไปจุด D pop : กลับไปจุด C pop : กลับไปจุด B pop : กลับไปจุด A การเก็บลำดับเพื่อการ ย้อนกลับ C A D G B H I F E

10 การจัดการโปรแกรมที่เรียกใช้ โปรแกรมย่อยแบบต่อเนื่อง main call f1 f2(…) call f3 return f1(…) call f2 return f3(…) return เมื่อมีการเรียกโปรแกรมย่อยใด จะ push ตำแหน่งกลับ ลงกองซ้อน เมื่อจบโปแกรมย่อยใด จะ pop ตำแหน่งกลับ ( มาดูเพื่อ กลับไปยังตำแหน่งที่มา )

11 การจัดการโปรแกรมที่เรียกใช้ตัวเอง (recursive program) long int factorial(int n;) { if (n == 0)return 1; else return n*factorial(n-1); }

12 นิพจน์แบบโพสต์ฟิกซ์ (postfix expression) infix expression postfix expression A+B AB+ A+B+C AB+C+ A-B*C ABC*- A*(B+C) ABC+* A+B/(C+D)*E ABCD+/E*+ (A+B*C)/(E-F)+G ABC*+EF-/G+

13 เปลี่ยน infix expression ไปเป็น postfix expression infix (A+B*C)/(E-F)+G 1. เข้าวงเล็บตามลำดับการคำนวณด้วยวิธีใน ระบบคอมพิวเตอร์ ( ที่มีอยู่แล้วไปต้องใส่ ) (((A+(B*C))/(E-F))+G) 2. ย้ายตัวดำเนินการไปแทนที่เครื่องหมาย วงเล็บของมัน (((A (B C*+ (E F-/ G+ 3. ลบเครื่องหมานวงเล็บเปิดออก A B C*+ E F-/ G+ postfix

14 การคำนวณนิพจน์แบบ โพสต์ฟิกซ์ จะพิจารณานิพจน์จากซ้ายไปขวา เมื่อพบตัวดำเนินการ จะนำตัวถูกดำเนินการที่อยู่ข้างหน้าสองตัวมาคำนวณ ได้ผลลัพธ์ให้วางไว้ที่ตำแหน่งนั้นแล้วดำเนินการต่อไป จนจบนิพจน์ จะเหลือผลลัพธ์ตัวเดียวซึ่งคือคำตอบของ นิพจน์ ตัวอย่าง 9,4,2,/,+,3,9,4,-,*,2,3,+,/,- 9, 2,+,3,9,4,-,*,2,3,+,/,- 11,3,9,4,-,*,2,3,+,/,- 11,3, 5,*,2,3,+,/,- 11, 15,2,3,+,/,- 11, 15, 5,/,- 11, 3,- 8

15 อัลกอริทึมในการเขียน โปรแกรมคำนวณ อ่านนิพจน์ที่เป็นแบบโพสต์ฟิกซ์ แล้ว ตรวจสอบว่าเป็น ตัวดำเนินการ หรือตัวถูกดำเนินการ ถ้าเป็นตัวถูกดำเนินการ ให้ push ลงกอง ซ้อน ถ้าเป็นตัวดำเนินการ ให้ pop ตัวถูก ดำเนินการในกองซ้อนออก มา 2 ตัว เพื่อคำนวณ โดยให้ตัวแรกเป็นตัวกระทำ ตัวที่สองเป็นตัวตั้ง ได้ผลลัพธ์ให้ push ลงกองซ้อน เมื่ออ่านจบนิพจน์แล้ว จะเหลือคำตอบอยู่ ในกองซ้อน

16 แบบฝึกหัด 1. จงเขียนฟังก์ชันเพื่อเปลี่ยนเลขฐานสิบ ให้เป็นฐาน x ใด (2 ≤ x ≤9) โดยต้องใช้ฟังก์ชัน push และ pop ช่วยด้วย 2. จงเขียนฟังก์ชัน push และ pop โดยใช้ตัวแปรแถวลำดับ แทนกองซ้อน ซึ่ง top = n แทนกองซ้อนว่าง และ top = 0 คือกองซ้อนเต็ม 3. กำหนดตัวแปรแถวลำดับ stack[n] ใช้แทนกองซ้อน 2 กอง คือ กองซ้อน A และ กองซ้อน B โดยใช้คนละปลายของตัว แปรแถวลำดับ จงเขียนฟังก์ชัน pusha, popa, pushb, popb เพื่อนำข้อมูลไปไว้หรือนำออกจากกองซ้อน A และ B ตามลำดับ n-3 n-2 n-1 กองซ้อน A กองซ้อน B topa = 3 topB = n-3


ดาวน์โหลด ppt กอง ซ้อน (stack) ยอดกอง ซ้อน. กองซ้อน จัดเป็นรายการที่การนำเข้า สมาชิก ( เพิ่ม ) หรือการนำออกสมาชิก ( ลบ ) จะกระทำที่ปลายด้านหนึ่งของรายการ และเรียกปลายด้านนั้นว่า.

งานนำเสนอที่คล้ายกัน


Ads by Google