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

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Bansomdej Chaopraya Rajabhat University
Advertisements

จงเขียนโปรแกรมในการคำนวณหาค่า function ข้างล่างโดยอาศัยหลักการ
โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
บทที่ 2 รหัสควบคุมและการคำนวณ
รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
CSI1201 การเขียนโปรแกรมเชิงโครงสร้าง Structured Programming
สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
โดยอาจารย์ศิริพร ศักดิ์บุญญารัตน์ ครูชำนาญการ โรงเรียนมหิดลวิทยานุสรณ์
การเขียนโปรแกรมด้วยคำสั่งเบื้องต้น
บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงาน.
โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
Introduction to C Programming
สถาปัตยกรรมแบบ stack และ การผลิตโค๊ด
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures
Functional Programming
Functional programming part II
Data Structures and Algorithms
Lecture No. 3 ทบทวนทฤษฎีและแบบฝึกหัด
หลักการโปรแกรม 1 Lecture 3: ตัวแปร, นิพจน์คณิตศาสตร์, การคำนวณทางคณิตศาสตร์,การดำเนินการกับสายอักขระ.
Stack.
Lecture 13: ฟังก์ชันเรียกตัวเอง
Stack Holidays/seasonal content.
CS Assembly Language Programming
Data structure & Algorithms
ลักษณะการทำงานของ Stack
รับและแสดงผลข้อมูล.
ปฏิบัติการครั้งที่ 9 ฟังก์ชัน.
โปรแกรมย่อย : Pascal Procedure
Lecture no. 2: Overview of C Programming
หน่วยที่ 5 ตัวดำเนินการ (Operators)
Arrays.
การเขียนโปรแกรมคอมพิวเตอร์และอัลกอริธึม
บทที่ 11 การเขียนโปรแกรมภาษาซี
การใช้งานเบื้องต้นของเครื่องคิดเลขทางการเงิน
หน่วยที่ นิพจน์ในภาษา C
อาร์เรย์และข้อความสตริง
บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงานลักษณะของฟังก์ชั่นมีความรอบรัดสั้นกว่าแบบวนลูป.
การคำนวณทางคณิตศาสตร์ ตัวดำเนินการ
Infix to Postfix มหาวิทยาลัยเนชั่น หลักการภาษาชุดคำสั่ง
การเขียนโปรแกรมภาษาซี
Chapter 3 เครื่องหมายและการคำนวณ
บทที่ 4 อัลกอริทึมแบบเรียงลำดับ (Sequential Algorithm)
โครงสร้างข้อมูลแบบคิว
คิว ลักษณะการทำงานของ Queue การดำเนินการของ Queue การตรวจสอบ Queue
สแตค(stack) โครงสร้างข้อมูลแบบ Stack - การสร้าง Stack
ฟังก์ชัน ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ ศูนย์คอมพิวเตอร์
ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
ทบทวน กันก่อน .....กระบวนการแปลโปรแกรม
Week 12 Engineering Problem 2
เสรี ชิโนดม ฟังก์ชัน เสรี ชิโนดม
2 /* ข้อความนี้เป็นเพียงคำอธิบาย ไม่มีผลต่อขั้นตอนการ ทำงานของโปรแกรม */ /* A simple program to display a line of text */ #include void main ( ) { printf.
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
การออกแบบโครงสร้าง (Structured Design)
ค21201 คณิตศาสตร์เพิ่มเติม 1
Overview of C Programming
การเขียนโปรแกรมแบบวนซ้ำ: คำสั่ง while คำสั่ง do….while
โครงสร้างข้อมูลแบบกองซ้อน (Stack)
ตัวดำเนินการ และนิพจน์คณิตศาสตร์
PHP การตรวจสอบเงื่อนไข.
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
รายการโยง (linked lists) หอยทอด 30 ข้าวผัด 30 ไก่ย่าง 50 เนื้อทอด 30
โครงสร้างข้อมูล Queues
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
พื้นฐานการเขียนโปรแกรมด้วย C#
การกระทำทางคณิตศาสตร์
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
โครงสร้างข้อมูลแบบ สแตก (stack)
การประยุกต์ใช้ Stack การประยุกต์ใช้ Stack
Stack Sanchai Yeewiyom
ใบสำเนางานนำเสนอ:

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

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

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

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

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

ฟังก์ชันนำข้อมูลเข้าสู่กองซ้อน 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 คือกองซ้อนว่าง

ฟังก์ชันนำข้อมูลออกจากกองซ้อน 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;

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

การประยุกต์กองซ้อน การเก็บลำดับเพื่อการย้อนกลับ C A D G B H I F E จากจุด 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

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

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

นิพจน์แบบโพสต์ฟิกซ์(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+

เปลี่ยน 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

การคำนวณนิพจน์แบบโพสต์ฟิกซ์ จะพิจารณานิพจน์จากซ้ายไปขวา เมื่อพบตัวดำเนินการ จะนำตัวถูกดำเนินการที่อยู่ข้างหน้าสองตัวมาคำนวณได้ผลลัพธ์ให้วางไว้ที่ตำแหน่งนั้นแล้วดำเนินการต่อไปจนจบนิพจน์ จะเหลือผลลัพธ์ตัวเดียวซึ่งคือคำตอบของนิพจน์ ตัวอย่าง 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

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

แบบฝึกหัด 0 1 2 3 n-3 n-2 n-1 45 32 18 12 13 72 98 กองซ้อน A กองซ้อน B 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 ตามลำดับ 0 1 2 3 n-3 n-2 n-1 45 32 18 12 13 72 98 กองซ้อน A กองซ้อน B topa = 3 topB = n-3