โครงสร้างข้อมูลแบบ สแตก (stack)

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
คณิตคิดเร็วโดยใช้นิ้วมือ
Advertisements

โปรแกรมฝึกหัด การเลื่อนและคลิกเมาส์
Bansomdej Chaopraya Rajabhat University
โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
การฝึกอบรม โครงการจัดทำระบบคลังข้อมูลสาธารณภัย
วิชา องค์ประกอบศิลป์สำหรับคอมพิวเตอร์ รหัส
ยินดีต้อน เข้าสู่ โครงงาน.
ไม่อิงพารามิเตอร์เบื้องต้น
การซ้อนทับกัน และคลื่นนิ่ง
1.7 ระเบียบวิธีทางสถิติ 1. การเก็บรวบรวมข้อมูล (Data Collection)
โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
แนวทางการรายงานผลการปฏิบัติราชการโดยผ่านระบบเครือข่ายอินเตอร์เน็ต
สาระที่ 4 พีชคณิต.
แนวทางการยกระดับผลสัมฤทธิ์ทางการเรียน ผลการทดสอบระดับชาติ (o – net) ปีการศึกษา 2554 โรงเรียนสรวงสุทธาวิทยา สำนักงานเขตพื้นที่การศึกษามัธยมศึกษา เขต.
Chapter 1 โครงสร้างข้อมูลและอัลกอริธึมส์
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures
Stack Holidays/seasonal content.
จำนวนเต็ม จำนวนเต็ม  ประกอบด้วย                   1. จำนวนเต็มบวก    ได้แก่  1 , 2 , 3 , 4, 5 , ....                   2.  จำนวนเต็มลบ      ได้แก่  -1.
การจัดเก็บข้อมูลตามตัวบ่งชี้ สกอ. และ สมศ.
การเลื่อนเงินเดือนข้าราชการ
การสืบค้นข้อมูลจาก Web OPAC
จำนวนนับใดๆ ที่หารจำนวนนับที่กำหนดให้ได้ลงตัว เรียกว่า ตัวประกอบของจำนวนนับ จำนวนนับ สามารถเรียกอีกอย่างว่า จำนวนเต็มบวก หรือจำนวนธรรมชาติ ซึ่งเราสามารถนำจำนวนนับเหล่านี้มา.
กลุ่มสาระการเรียนรู้ คณิตศาสตร์ โรงเรียนบ้านหนองกุง อำเภอนาเชือก
การออกแบบโปรแกรมอย่างมีโครงสร้าง Structured Design
กระบวนการคิดทางคณิตศาสตร์
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
จำนวนทั้งหมด ( Whole Numbers )
Kampol chanchoengpan it สถาปัตยกรรมคอมพิวเตอร์ Arithmetic and Logic Unit 1.
Infix to Postfix มหาวิทยาลัยเนชั่น หลักการภาษาชุดคำสั่ง
แนวทางการปฏิบัติโครงการจูงมือ น้องน้อยบนดอยสูง 1.
โครงสร้างข้อมูลแบบคิว
1 การสัมมนาผู้ตรวจ ประเมินคุณภาพภายใน ปีการศึกษา 2552 วันพฤหัสบดีที่ 21 ตุลาคม 2553 ณ ห้องประชุม 3222 อาคารสิริคุณากร.
ณัฏฐวุฒิ เอี่ยมอินทร์
บทที่ 3 การวิเคราะห์ Analysis.
สถาปัตยกรรมคอมพิวเตอร์ (Computer Architecture)
การแจกแจงปกติ.
วิชาคณิตศาสตร์ ชั้นประถมศึกษาปีที่6
ค21201 คณิตศาสตร์เพิ่มเติม 1
กองซ้อน ยอดกองซ้อน (stack).
โครงสร้างข้อมูลแบบกองซ้อน (Stack)
ตัวดำเนินการ และนิพจน์คณิตศาสตร์
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
การลงข้อมูลแผนการสอน
วิวัฒน์ ชินนาทศิริกุล
ภาษาอังกฤษเพื่อการสื่อสาร อ32204
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
School of Information Communication Technology,
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
สรุปผลการสำรวจ ความคิดเห็นของประชาชนเกี่ยวกับ การป้องกันและปราบปรามยาเสพติด (ก่อนและหลัง การประกาศสงครามขั้นแตกหักเพื่อเอาชนะยาเสพติด) พ.ศ สำนักงานสถิติแห่งชาติ
แบบฝึกหัด จงหาคำตอบที่ดีที่สุด หรือหาค่ากำไรสูงสุด จาก
โครงสร้างข้อมูล Queues
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
โครงสร้างข้อมูลแบบลิงก์ลิสต์
การค้นในปริภูมิสถานะ
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
วิธีเรียงสับเปลี่ยนและวิธีจัดหมู่
กราฟเบื้องต้น.
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
แผนการจัดการเรียนรู้
คณิตศาสตร์ (ค33101) ชั้นมัธยมศึกษาปีที่ 3 หน่วยการเรียนรู้ที่ 7
การค้นในปริภูมิสถานะ
กราฟเบื้องต้น.
Week 13 Basic Algorithm 2 (Searching)
ผลการประเมิน คุณภาพการศึกษาขั้นพื้นฐาน ปีการศึกษา
การประยุกต์ใช้ Stack การประยุกต์ใช้ Stack
ใบสำเนางานนำเสนอ:

โครงสร้างข้อมูลแบบ สแตก (stack) อาจารย์กัญณัฎฐ์ สุริยันต์ สาขาวิชาคอมพิวเตอร์ธุรกิจ คณะบริหารธุรกิจ วิทยาลัยเทคโนโลยีสยาม Phone 085-3551137

วัตถุประสงค์การเรียนรู้ เพื่อให้นักศึกษาทราบถึงลักษณะโครงสร้างข้อมูลแบบ สแตก (stack) เพื่อให้นักศึกษาส่วนประกอบของ stack เพื่อให้นักศึกษาทราบถึงการประยุกต์ให้โครงสร้างข้อมูลแบบสแตก(stack)

ความหมายของสแตก (Stack) วุฒิพงษ์ เขื่อนดิน (2553 : 61) สแตก (Stack) หมายถึง โครงสร้างข้อมูลที่ออกแบบมาให้มีลักษณะทั้งแบบเป็นเชิงเส้น (Linear Structure) และแบบไม่เป็นเชิงเส้น (Non Liear Structure) เพราะเขียนโปรแกรมได้ทั้งการใช้อาร์เรย์ (Array) และพอยเตอร์ (Pointer) การนำข้อมูลเข้าและออกจากสแตกจะมีลำดับการทำงานแบบเข้าหลังออกก่อน (LIFO)

รูปจำลองแสดงการทำงานของสแตก ทางเข้า ทางออก ข้อมูล 3 3 ตำแหน่ง บนสุด ของสแตก ข้อมูล 2 2 ข้อมูล 1 1

การดำเนินการกับสแตก มี 2 แบบ Push Stack คือ การนำข้อมูลไปเก็บไว้ ในสแตก Pop Stack คือ การนำข้อมูลออกจากสแตก

ตัวอ้างอิง Top Stack จะใช้ตัวอ้างอิง(Index) ชื่อ Top มาเป็นดัชนี สำหรับบ่งบอกถึงจำนวนของสมาชิกในสแตก

ตัวอย่างการ Push ข้อมูลลง Stack

ตัวอย่าง ลำดับการ Push Stack 5 4 3 2 1 Top

ตัวอย่าง ลำดับการ Push Stack Top = Top+1; stack[Top] = data; 1 Push = S S 5 4 3 2 1 Top Complete

ตัวอย่าง ลำดับการ Push Stack Top = Top+1; stack[Top] = data; 2 Push = t t S 5 4 3 2 1 Top Complete

ตัวอย่าง ลำดับการ Push Stack 3 Push = a a t S 5 4 3 2 1 Top Complete

ตัวอย่าง ลำดับการ Push Stack 4 Push = c c a t S 5 4 3 2 1 Top Complete

ตัวอย่าง ลำดับการ Push Stack 5 Push = k k c a t S 5 4 3 2 1 Top Complete

ตัวอย่าง ลำดับการ Push Stack 6 Push = i k c a t S 5 4 3 2 1 Top Overflow

ตัวอย่างการ Pop ข้อมูลออกจากstack

ตัวอย่าง ลำดับการ Pop Stack 5 4 3 2 1 Top

ตัวอย่าง ลำดับการ Pop Stack Top = Top -1; Data = Stack[Top]; 1 Pop c a t S 5 4 3 2 1 Top k Complete

ตัวอย่าง ลำดับการ Pop Stack 2 Pop a t S 5 4 3 2 1 Top c Complete

ตัวอย่าง ลำดับการ Pop Stack 3 Pop t S 5 4 3 2 1 Top a Complete

ตัวอย่าง ลำดับการ Pop Stack 4 Pop S 5 4 3 2 1 Top t Complete

ตัวอย่าง ลำดับการ Pop Stack 5 Pop 5 4 3 2 1 Top S Complete

ตัวอย่าง ลำดับการ Pop Stack 6 Pop 5 4 3 2 1 Top Empty

ลองเขียนแผนภาพ การ Push และการ Pop ข้อมูลออกจากสแตกพร้อมทั้งระบุ ตำแหน่ง ดัชนี Top ของ stack 5 ชั้น Push (A) Push (B ) Pop (B) Push (F) Push (R) Pop (R) Pop (F) Push (D) Push (V) Pop (V) 5 4 3 2 1

แบบฝึกหัด จงวาดภาพจำลองการเปลี่ยนแปลงการทำงานใน Stack ขนาด 5 พร้อมบอกตำแหน่งของ Top ในแต่ละขั้นตอน ให้ครบ Push (10) Push (11 ) Pop (11) Push (12) Push (14) Pop (14) Pop (12) Push (20) Push (16) Pop (16) 5 4 3 2 1

1.การแปลงนิพจน์ Infix เป็น Postfix 2. การหาผลลัพธ์จากนิพจน์ Postfix การประยุกต์ใช้ stack มี 2 แบบ 1.การแปลงนิพจน์ Infix เป็น Postfix 2. การหาผลลัพธ์จากนิพจน์ Postfix

1การแปลงนิพจน์ Infix เป็น Postfix เป็นกระบวนการที่มีความสำคัญต่อการออกแบบโปรแกรม นิพจน์ที่เขียนเข้าไปปกติ จะเรียกว่า นิพจน์ infix ลักษณะคือ A+B เมื่อทำการแปลงเป็น นิพจน์แบบ Postfix จะได้ AB+

คำศัพท์ที่ควรทราบ ในการใช้งานstack นั้น เครื่องหมายทางคณิตศาสตร์เรียกว่า operator ตัวแปร หรือ ค่าคงที่ เรียกว่า operand

การแปลงนิพจน์จาก infix เป็น Postfix ต้องอาศัยหรือใช้กลไกของสแตกเข้ามาช่วยในการแปลง ต้องคำนึงถึงนิยามความสำคัญของลำดับก่อนหลังของOperator

อัลกอริทึม การแปลงนิพจน์ Infix เป็น Postfix อัลกอริทึมในการแปลงนิพจน์ Infix เป็น postfix โดยการใช้ stack - นิพจน์ Infix ที่กำหนดให้ถือว่าเป็นInput ให้อ่านค่ามาละตัวจากซ้ายไปขวา (X+Y) * Z นิพจน์ Infix

1. ถ้า Input เป็น ตัวถูกดำเนินการ(Operand) ได้แก่ ตัวแปร ค่าคงที่ (A, B,1,2,3) ให้นำออกไปเป็น Output 2. ถ้า Input เป็นตัวดำเนินการ (Operator) (-,+,^,*,/) แบ่งเป็นกรณีต่างๆดังนี้ 2.1 ถ้า Stack ว่าง ให้ Push ตัวดำเนินการ ลงใน Stack 2.2 ถ้า Stack ไม่ว่าง ให้เปรียบเทียบตัวดำเนินการ (Operator) ที่เป็น Input กับตัวดำเนินการที่เป็นตำแหน่ง Top 2.2.1 ถ้าตัวดำเนินการที่เป็น Input มีลำดับความสำคัญมากกว่า ให้ push ลงใน stack 2.2.2 ถ้าตัวดำเนินการที่เป็น Input มีลำดับความสำคัญน้อยกว่าหรือ เท่ากัน ให้ pop ตัวดำเนินการที่ตำแหน่ง Top ออกไปเป็น Output แล้วนำ ตัวดำเนินการที่Input ตัวเดิม ทำการเปรียบเทียบกับ ตัวดำเนินการในตำแหน่ง Top ต่อไปเรื่อยๆ **ให้ถือว่าเครื่องหมายวงเล็บเปิด (ใน stack มีลำดับความสำคัญน้อยกว่าตัวดำเนินการอื่นๆ

3. ถ้า Input เป็นเครื่องหมายวงเล็บเปิด ( ให้ push ลงใน stack 4. ถ้า Input เป็นเครื่องหมายวงเล็บปิด ) ให้ pop ตัวดำเนินการออกจาก stack ออกไปเป็น Output ทีละตัวจนกระทั่งเจอเครื่องหมายวงเล็บ ( จากนั้น เมื่อเจอให้ทิ้งเครื่องหมายวงเล็บทั้งคู่ไป 5. ถ้า Input หมดแล้ว ให้ pop ตัวดำเนินการออกจาก stack ออกไปเป็น Output ทีละตัวจน Stack ว่าง

ตัวดำเนินการ (Operator) นิพจน์ (X+Y) * Z ตัวอย่าง Input นิพจน์ Infix Stack ตัวดำเนินการ (Operator) Output นิพจน์ PostFix ( X + ( + Y X Y ) XY + * Z XY +Z XY +Z* 3 1 2.2.1 1 4 2.1 1 5

จงแปลงนิพจน์ต่อไปนี้ จาก infix เป็น postfix นิพจน์ A*(B+C)/D

นิพจน์ A*(B+C)/D A * ( * ( B AB + * (+ C ABC ) ABC+ / ABC+* D ABC+*D Input นิพจน์ Infix Stack ตัวดำเนินการ (Operator) Output นิพจน์ PostFix A * ( * ( B AB + * (+ C ABC ) ABC+ / ABC+* D ABC+*D ABC+*D/ 1 2.1 3 1 2.2.1 1 4 2.2.2 1 5

แบบฝึกหัด จงแปลงนิพจน์ Infix ต่อไปนี้เป็น นิพจน์ Postfix A-B*C A*(B+C) A+B*(C^D*E/F)-G A+(B*C-(D/F-E)*G)*H

2. การหาผลลัพธ์ค่านิพจน์postfix มีอัลกอริทึม ดังต่อไปนี้ กรณีเป็นตัวถูกดำเนินการ (Operand) ให้pushไว้ในstack (หากมีหลายค่าก็ให้เก็บค่านั้นไปเรื่อยๆ ) หากพบตัวดำเนินการ(Operator) ให้popตัวถูกดำเนินการ(Operand) ที่เก็บค่าไว้ล่าสุด 2 ค่า มาคำนวณหาคำตอบแล้วนำค่าคำตอบนั้นเก็บกลับเข้าไปไว้ใน stack

เมื่อพิจารณาขั้นตอนดังกล่าว พบว่า มีลักษณะของการใช้โครงสร้างแบบ LIFO (เข้าหลัง-ออกก่อน ) ซึ่งเป็น ลักษณะโครงสร้างข้อมูลแบบสแตก ดังนั้น ด้วยเหตุนี้ คอมพิวเตอร์จึงนำโครงสร้างข้อมูลแบบสแตก มาช่วยในการคำนวณหาผลลัพธ์จากนิพจน์ Postfix

ตัวอย่าง นิพจน์ Infix (4+6)*(9-(5-2)) ต้องแปลงค่าเป็น นิพจน์ Postfix ก่อน

( 4 + (+ 6 4 6 ) 4 6 + * *( 9 4 6 +9 - *(- 4 6 + 9 Input นิพจน์ Infix Stack ตัวดำเนินการ (Operator) Output นิพจน์ PostFix ( 4 + (+ 6 4 6 ) 4 6 + * *( 9 4 6 +9 - *(- 4 6 + 9 3 4 2.1

ต่อ ( *(-( 46+9 5 46+95 - *(-(- 2 46+952 ) *(- 46+952- *( 46+952- - * Input นิพจน์ Infix Stack ตัวดำเนินการ (Operator) Output นิพจน์ PostFix ( *(-( 46+9 5 46+95 - *(-(- 2 46+952 ) *(- 46+952- *( 46+952- - * 46+952- -* 4 6+9 5 2- -*

จากโจทย์เมื่อแปลงค่า นิพจน์ Infix เป็น Postfix

คำนวณหาค่า จากนิพจน์ Postfix ที่ได้ ดังนี้ stack คำอธิบาย 4 Push 4 เข้าstack 6 46 Push 6 เข้าstack + 10 Pop 4 และ 6 หาค่าผลลัพธ์ 4+6 = 10 Push ผลลัพธ์เข้าstack 9 10 9 Push 9 เข้าstack 5 10 9 5 Push 5 เข้าstack

ต่อ ค่า ของpostfix stack คำอธิบาย 2 10 9 5 2 Push 2 เข้าstack - 10 9 3 Pop 5 และ 2 หาผลลัพธ์ 5-2 = 3 Push ผลลัพธ์เข้า stack 10 6 Pop 9 และ 3 หาผลลัพธ์ 9-3=6 * 60 Pop 10 และ 6 หาผลลัพธ์ 10* 6=60

จงหาผลลัพธ์นิพจน์postfixต่อไปนี้ 2 3 8 4- * 2/+ 28 9 3 /4 + / 4 * + 1 3 3 2 1 3 - / * 3* 22 - - + 1 2 3 * + 6 - 8 9 * + 12 /5 3 4 + 2 * - 9 + * 3 3 3 - - 32 + 1 2 5 + 2 2 3 9 * 3 / + 23 - +

จงแปลงนิพจน์ infix เป็น Postfix จากนั้นหาผลลัพธ์ ของนิพจน์ Postfix ((2+4*2/8)*5-6)/7 2*3+5*2/2-16/4