Chapter 3 - Stack, - Queue,- Infix Prefix Postfix

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โปรแกรมฝึกหัด การเลื่อนและคลิกเมาส์
Advertisements

Bansomdej Chaopraya Rajabhat University
วิธีการตั้งค่าและทดสอบ เครื่องคอมพิวเตอร์ก่อนใช้งาน
วิชา องค์ประกอบศิลป์สำหรับคอมพิวเตอร์ รหัส
Chapter 2 Root of Nonlinear Functions
เลขฐานต่าง ๆ อ.มิ่งขวัญ กันจินะ.
โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
Index ความเป็นมา วัตถุประสงค์ ขอบเขตการทำงาน แนวทางแก้ปัญหา
สาระที่ 4 พีชคณิต.
โครงการแลกเปลี่ยนเรียนรู้ เกี่ยวกับระเบียบกระทรวงการคลัง
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures
การใช้งานโปรแกรม Excel เบื้องต้น
Stack.
Stack Holidays/seasonal content.
บทนำ.
Data structure & Algorithms
การจัดเก็บข้อมูลตามตัวบ่งชี้ สกอ. และ สมศ.
บทที่ 1 อัตราส่วน.
เนื้อหา ประเภทของโปรแกรมภาษา ขั้นตอนการพัฒนาโปรแกรม
NUMBER SYSTEM เลขฐานสิบ (Decimal Number) เลขฐานสอง (Binary Number)
Use Case Diagram.
กลุ่มสาระการเรียนรู้ คณิตศาสตร์ โรงเรียนบ้านหนองกุง อำเภอนาเชือก
คิวQueue Circular Queue.
Introduction to Digital System
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
การแปลงภาพสีเทาให้เป็นภาพขาวดำ
จำนวนทั้งหมด ( Whole Numbers )
อาร์เรย์และข้อความสตริง
แนวทางการปฏิบัติโครงการจูงมือ น้องน้อยบนดอยสูง 1.
โครงสร้างข้อมูลแบบคิว
ณัฏฐวุฒิ เอี่ยมอินทร์
การประยุกต์ใช้ค่าเงินที่เปลี่ยนแปลงตามเวลา
สถาปัตยกรรมคอมพิวเตอร์ (Computer Architecture)
เทคนิคการสืบค้น Google
รายละเอียดของ Print Screen หน้าจอสังเกตการณ์ ของคณะกรรมการประกวดราคา (โปรแกรม CAT e-auction โลโก้ใหม่)
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
บทที่ 4 นิพจน์ทางคณิตศาสตร์.
หลักการเขียนโปรแกรม ( )
ค21201 คณิตศาสตร์เพิ่มเติม 1
F M B N สมบัติของจำนวนนับ ตัวคูณร่วมน้อย (ค.ร.น.).
E-Sarabun.
กองซ้อน ยอดกองซ้อน (stack).
โครงสร้างข้อมูลแบบกองซ้อน (Stack)
การสั่งซื้อสินค้า ทางอินเตอร์เน็ต
WATTANAPONG SUTTAPAK SOFTWARE ENGINEERING, SCHOOL OF INFORMATION COMMUNICATION TECHNOLOGY, UNIVERSITY OF PHAYAO Chapter 4 analysis of algorithm efficiency.
Computer Programming การเขียนโปรแกรมคอมพิวเตอร์
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
School of Information Communication Technology,
School of Information Communication Technology,
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
Midterm outline Object-oriented programming Wattanapong suttapak, Software Engineering, school of Information communication Technology, university of phayao.
หลักการเขียนโปรแกรม ( )
แบบฝึกหัด จงหาคำตอบที่ดีที่สุด หรือหาค่ากำไรสูงสุด จาก
Recursive Method.
โครงสร้างข้อมูล Queues
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
หลักการเขียนโปรแกรม ( )
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
วิธีเรียงสับเปลี่ยนและวิธีจัดหมู่
ซอฟต์แวร์ (Softwarre)
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
โครงสร้างข้อมูลแบบ สแตก (stack)
WATTANAPONG SUTTAPAK SOFTWARE ENGINEERING, SCHOOL OF INFORMATION COMMUNICATION TECHNOLOGY, UNIVERSITY OF PHAYAO Chapter 9 Heap and Hash 1.
Wattanapong suttapak SE, ICT University of Phayao.
หลักการโปรแกรมเบื้องต้น
การประยุกต์ใช้ Stack การประยุกต์ใช้ Stack
Stack Sanchai Yeewiyom
ใบสำเนางานนำเสนอ:

Chapter 3 - Stack, - Queue,- Infix Prefix Postfix WATTANAPONG SUTTAPAK Software Engineering, School of Information Communication Technology, University of PHAYAO

จุดประสงค์ บทเรียนที่ 3 เข้าใจถึงความหมายและประโยชน์ของ stack สามารถนำความรู้เรื่อง stack ไปใช้แก้ปัญหาทางคอมพิวเตอร์ได้ เข้าใจถึงความหมายและประโยชน์ของ queue สามารถนำความรู้เรื่อง queueไปใช้แก้ปัญหาทางคอมพิวเตอร์ได้ เข้าใจถึงหลักการ prefix infix postfix ได้ สามารถเขียนโปรแกรมเพื่อแปลงค่าสลับระหว่าง prefix infix postfix ได้

Stack ชื่อภาษาไทยกองซ้อน[4] หลักการทำงานของ stack คือ LIFO(last in first out) ตัวอย่างการประยุกต์ใช้ stack การแปลงนิพจน์คำนวณของคอมพิวเตอร์ การคำนวณค่าจาก function recursion ของคอมพิวเตอร์ การแก้ปัญหาทางคอมพิวเตอร์อื่นๆ เช่น tower of hanoi stack สร้างขึ้นมาเพื่อช่วยให้การแก้ปัญหาทางคอมพิวเตอร์ง่ายขึ้น

Stack 3 2 1 Last in First out การทำงานของ stack คือ เข้าก่อนออกทีหลัง หรือ เข้าทีหลังออกก่อน

Stack Exercise 1 สร้าง class stack ด้วย Array หรือ ArrayList ให้ตั้งชื่อ class ว่า MyStack โดยกำหนดให้ method push() เพิ่ม item method pop() ดึง item ออก กำหนดให้ข้อมูลเป็นดังนี้ push(0) push(1) push(1) push(2) push(3) push(4) pop() push(5) push(6) pop() push(7) pop() push(8) print ค่า array ทั้งหมดใน stack จะต้องได้ 0 1 1 2 3 5 8

Stack Exercise 2 ให้ใช้ class Stack โดยกำหนดให้ method push() เพิ่ม item method pop() ดึง item ออก กำหนดให้ข้อมูลเป็นดังนี้ push(0) push(1) push(1) push(2) push(3) push(4) pop() push(5) push(6) pop() push(7) pop() push(8) print ค่า array ทั้งหมดใน stack จะต้องได้ 0 1 1 2 3 5 8

Queue ชื่อภาษาไทยแถวคอย [4] หลักการทำงานของ queue คือ FIFO(first in first out) ตัวอย่างการทำงานของ queue การเก็บสถานการณ์พิมพ์ของเครื่องพิมพ์ การเข้าคิวต่างๆ เช่น ซื้ออาหาร ซื้อตั๋วหนัง เข้าคิวธนาคาร

Queue 3 2 1 การเข้าออกเป็นไปตามลำดับก่อนหลัง นั่นคือ เข้าก่อนออกก่อน เข้าหลังออกหลัง FIFO (First in First out)

Queue Exercise 3 สร้าง class queue ด้วย Array หรือ ArrayList ให้ตั้งชื่อ class ว่า MyQueue โดยกำหนดให้ method enqueue() เพิ่ม item method dequeue() ดึง item ออก กำหนดให้ข้อมูลเป็นดังนี้ enqueue(10) enqueue(8) enqueue(1) enqueue(2) enqueue(3) dequeue() enqueue(4) dequeue() enqueue(5) จะต้องได้ 1 2 3 4 5

infix prefix postfix infix notation หมายถึง รูปแบบการเขียนตัวเลขและเครื่องหมายในรูปแบบปกติ เช่น (a+b)*(c-d) หรือ (3+5)*(4-3) prefix notation(Polish notation) หมายถึงรูปแบบการเขียนตัวเลขและเครื่องหมายในรูปแบบให้เครื่องหมายอยู่ด้านหน้าตัวเลข เช่น *+ab-cd หรือ *+35-43 postfix notation(Reverse Polish notation) หมายถึงรูปแบบการเขียนตัวเลขและเครื่องหมายในรูปแบบให้เครื่องหมายอยู่ด้านหลังตัวเลข เช่น ab+cd-* หรือ 35+43-*

prefix? postfix? แล้วจะกลับเครื่องหมายไปหน้าไปหลังทำไม ? infix เป็นรูปแบบที่มนุษย์ใช้อ่านและคิดคำนวณ แต่สำหรับคอมพิวเตอร์ รูปแบบที่ง่ายคือ prefix และ postfix

prefix (5*6)+7 = 5*6+7 infix -> prefix เริ่มจากความสำคัญสูงสุดนั่นคือ 5*6 นำเครื่องหมายมาด้านหน้าตัวเลขจะได้เป็น *56 ให้ *56 = x จะได้ x + 7 นำเครื่องหมายไว้ด้านหน้าจะได้เป็น +x7 แทนค่า x ด้วย *56 จะได้ +*567 เป็นคำตอบ คำตอบคือ +*567

prefix 5*6+7 infix -> prefix by Stack วิธีการจะเริ่มจากด้านซ้ายไปขวาโดยให้ความสำคัญของเครื่องหมายสูงสุดก่อน 5 * 6 + 7

prefix +*567 prefix -> infix เริ่มจากด้านซ้ายไปขวา หาเครื่องหมายที่ตามด้วยตัวเลขสองตัว นั่นคือ *56 นำเครื่องหมายมาไว้ตรงกลางจะได้ 5*6 แทนค่า 5*6 ด้วย x จะได้ +x7 นำเครื่องหมายมาไว้ตรงกลางจะได้ x+7 แทนค่า x ด้วย 5*6 จะได้ 5*6+7 คำตอบคือ 5*6+7

prefix +*567 prefix -> infix by Stack วิธีการจะเริ่มจากด้านขวาไปซ้าย(หลังไปหน้า) + * 5 6 7

prefix +*567 prefix -> infix by stack วิธีการจะเริ่มจากด้านขวาไปซ้าย(หลังไปหน้า) + 30 37 7

postfix (5*6)+7 = 5*6+7 infix -> postfix เริ่มจากความสำคัญสูงสุดนั่นคือ 5*6 นำเครื่องหมายมาด้านหลังตัวเลขจะได้เป็น 56* ให้ 56* = x จะได้ x + 7 นำเครื่องหมายไว้ด้านหลังจะได้เป็น x7 + แทนค่า x ด้วย 56* จะได้ 56*7+ เป็นคำตอบ คำตอบคือ 56*7+

prefix 5*6+7 infix -> postfix by Stack วิธีการจะเริ่มจากด้านซ้ายไปขวาโดยให้ความสำคัญของเครื่องหมายสูงสุดก่อน 5 * 6 + 7

postfix 56*7+ postfix -> infix เริ่มจากด้านซ้ายไปขวา หาตัวเลขสองตัวและมีเครื่องด้านหลัง นั่นคือ 56* นำเครื่องหมายมาไว้ตรงกลางจะได้ 5*6 แทนค่า 5*6 ด้วย x จะได้ x7+ นำเครื่องหมายมาไว้ตรงกลางจะได้ x+7 แทนค่า x ด้วย 5*6 จะได้ 5*6+7 คำตอบคือ 5*6+7

postfix 56*7+ postfix -> infix by Stack วิธีการจะเริ่มจากด้านซ้ายไปขวา(หน้าไปหลัง) 5 6 30 * 7 +

postfix 56*7+ postfix -> infix by Stack วิธีการจะเริ่มจากด้านซ้ายไปขวา(หน้าไปหลัง) 37 30 7 +

prefix postfix จากตัวอย่างทั้ง prefix และ postfix จะเห็นว่าเมื่อตัวเลขที่มีจำนวนหลักมากกว่า 2 หลัก(มากกว่าหรือเท่ากับ 10) จะทำให้การแปลงกับจาก prefix(postfix) ไปเป็น infix มีความผิดพลาดเช่น 27*6+5 แปลงเป็น postfix จะได้ 276*5+ และ 2*76+5 แปลงเป็น postfix จะได้ 276*5+ จะเห็นว่า postfix ของทั้งสองค่าเหมือนกัน ดังนั้นในกรณี infix มีจำนวนใดจำนวนหนึ่งมีค่าตั้งแต่ 10 ขึ้นไป ให้ใส่เป็นเครื่องหมาย , คั่นในแต่ละเครื่องหมายและตัวเลขเช่น 27*6+5 -> 27,6,*,5,+ 2*76+5 -> 2,76,*,5,+

Exercise 4 เฉลย แปลงค่า infix ต่อไปนี้เป็น prefix และ postfix (A + B) * C + D / (E + F * G) – H  ! (A && ! ((B < C) || (C > D))) || (C < E) A - B - C * (D + E / F - G) – H เฉลย postfix: A B + C * D E F G * + / + H -  prefix: - + * + A B C / D + E * F G H  postfix: A B C < C D > || ! && ! C E < ||  prefix: || ! && A ! || < B C > C D < C E  postfix: A B - C D E F / + G - * - H -  prefix: - - - A B * C - + D / E F G H 

Exercise 5 แปลงค่า postfix ต่อไปนี้เป็น infix จากนั้นแปลงเป็น prefix A B && C || E F > ! || A B C D * - E / + F + G H / - เฉลย infix: (A && B) || C || ! (E > F)  prefix: || || && A B C ! > E F  infix: A + ((B - C * D) / E ) + F - G / H    prefix: - + + A / - B * C D E F / G H 

Exercise 6 Exercise 6 แปลงค่า prefix ต่อไปนี้เป็น infix จากนั้นแปลงเป็น postfix - / + * A B C D / E + F G เฉลย infix: (A * B + C) / D - E / (F + G)    postfix: A B * C + D / E F G + / - 

Exercise 7 แก้ปัญหา Exercise 4 5 และ 6 โดยใช้ Stack