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

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Stack Holidays/seasonal content.
Advertisements

สแตค(stack) โครงสร้างข้อมูลแบบ Stack - การสร้าง Stack
โครงสร้างข้อมูลแบบกองซ้อน (Stack)
เฉลยใบงานที่ 1 องค์ประกอบและหลักการทำงานของคอมพิวเตอร์
การเขียนคำสั่งควบคุม การทำงานขั้นพื้นฐาน
ณ ห้องปฏิบัติการคอมพิวเตอร์ คณะพยาบาลศาสตร์ มหาวิทยาลัยเชียงใหม่
การใช้งานโปรแกรม SPSS
Chapter 10 Arrays Dept of Computer Engineering Khon Kaen University.
ชนิดของข้อมูล และการคำนวณทางคณิตศาสตร์
1 Search & Sort Search & Sort วรวิทย์ พูลสวัสดิ์.
Pushdown Automata : PDA
กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
DATA STRUCTURE AND ALGORITHM Linked List.
การวิเคราะห์ขั้นตอนวิธีการแก้ปัญหา
หน่วยที่ 6 แถวลำดับ (Array)
การใช้งาน Microsoft Excel
ตัวแปร และชนิด ข้อมูล. ตัวแปร การกำหนดตัวแปรเป็นการใช้ ชื่อตัวแปรแทน ตำแหน่งบนหน่วยความจำ สำหรับเก็บ ข้อมูลระหว่างการ ประมวลผล ซึ่งอาจเป็นข้อมูลนำเข้า.
ครั้งที่ 7 รีจิสเตอร์ (REGISTER). รีจิสเตอร์ (Register) รีจิสเตอร์เป็นวงจรความจำที่ใช้ในการเก็บค่า ทางไบนารี่ ใช้ในการเก็บค่าในระหว่างการ ประมวลผลโดยใช้ฟลิป.
MEE 231 Computer Programming สัปดาห์ที่ 6 ภาษา C หลักการของโปรแกรม ชนิดของตัวแปร การดำเนินการ คำสั่งการรับค่าตัวแปร และการแสดงผล.
Intro Excel 2010 ข้อมูลจาก... ellession1.htm.
หน่วยที่ 1 เรื่อง การใช้โปรแกรมตารางงานนำเสนอข้อมูล สาระสำคัญ โปรแกรม Microsoft Excel เป็นโปรแกรมที่ สามารถช่วยในเรื่องการคำนวณทั้งการบวก การลบ การคูณ.
โปรแกรมคำนวณคะแนน สหกรณ์ ตามเกณฑ์ดีเด่นแห่งชาติ กรมส่งเสริม สหกรณ์ กองพัฒนาสหกรณ์ด้านการเงิน และร้านค้า วิธีการใ ช้
เทคนิคการใช้ Microsoft Excel. 1. การตีตารางในรูปแบบต่าง ๆ 2. การแทรกภาพในตาราง 3. การตกแต่งข้อมูลด้วย Format Cells 4. การคำนวณ บวก ลบ คูณ หาร 5. การย่อ.
การเลือกข้อมูลจาก List การกำหนดเงื่อนไขการป้อนข้อมูลด้วย Data Validation การใส่ Comment / แสดง / แก้ไข / ลบ.
วิธีการใ ช้ โปรแกรมคำนวณคะแนน กลุ่มเกษตรกรดีเด่น กองพัฒนาสหกรณ์ด้าน การเงินและร้านค้า กรมส่งเสริม สหกรณ์
LOGO ภาษาซี 1.1 อ. กฤติเดช จินดาภัทร์. LOGO ตัวอย่างโค้ดภาษาซี
เกม คณิตคิดเร็ว.
Microsoft Access 2007 การสร้างฟอร์ม
Burin Rujjanapan Updated:
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
บทที่ 5 อินพุตและเอาต์พุต
Number system (Review)
การประยุกต์ Logic Gates ภาค 2
Principles of Problem Solving and Basic Programming หลักการแก้ปัญหาและการเขียนโปรแกรมเบื้องต้น2(1-2-3) สัปดาห์ที่ 4 เครื่องหมาย ตรรกะศาสตร์ และการดำเนินการทางตรรกะศาสตร์
สถาปัตยกรรมคอมพิวเตอร์ (Computer Architecture)
บทที่ 1 สถาปัตยกรรมของระบบฐานข้อมูล (Database Architecture)
Stack Sanchai Yeewiyom
การเขียน App สำหรับ Android smartphone
แล้วทำการเรียงลำดับข้อมูลใหม่โดยเรียงจากน้อยไปหามาก
รายการ(List) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
BC320 Introduction to Computer Programming
โครงสร้างภาษา C Arduino
QUEUE คิวจะมีโครงสร้างแบบเชิงเส้นเหมือน stack แต่แตกต่างตรงที่ queue มีตัวชี้ 2 ตัวคือ หัว(Head) และหาง(Tail) โดยการใส่ข้อมูลเข้าและนำข้อมูลออก จะมีลักษณะ.
บทที่ 7 การเขียนโปรแกรม แบบวนรอบทำซ้ำ (Loop)
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
ยินดีต้อนรับสู่ PowerPoint
ความรู้เบื้องต้นเกี่ยวกับคอมพิวเตอร์และเทคโนโลยีสารสนเทศ
การเขียนโปรแกรมแบบวนซ้ำ: คำสั่ง while คำสั่ง do….while
วิธีการกำหนดค่า Microsoft SharePoint ของคุณ เว็บไซต์ออนไลน์
Data storage II Introduction to Computer Science ( )
บริษัท พัฒนาวิชาการ (2535) จำกัด
Week 5 C Programming.
อาจารย์อภิพงศ์ ปิงยศ Lab 06 : Microsoft Excel (Part2) ทท101 เทคโนโลยีสารสนเทศและนวัตกรรมการสื่อสารทางการท่องเที่ยว อาจารย์อภิพงศ์
โครงสร้างข้อมูลแบบสแตก (stack)
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
Data storage II Introduction to Computer Science ( )
หน่วยการเรียนรู้ การเขียนโปรแกรมภาษาขั้นพื้นฐาน เรื่อง โครงสร้างพื้นฐาน HTML 5 รหัส รายวิชา ง23102 การงานอาชีพและเทคโนโลยี 6 กลุ่มสาระ การงานอาชีพและเทคโนโลยี
หน่วยที่ 6 อะเรย์ของอักขระ
บทที่ 7 การประมวลผลอาร์เรย์
OPERATOR ภาษาปาสคาล (Pascal)
ค่ารูรับแสง - F/Stop ค่ารูรับแสงที่มีค่าตัวเลขต่ำใกล้เคียง 1 มากเท่าไหร่ ค่าของรูรับแสงนั้นก็ยิ่งมีความกว้างมาก เพราะเราเปรียบเทียบค่าความสว่างที่ 1:1.
3 โครงสร้างข้อมูลแบบคิว (QUEUE).
บทที่ 2 โครงสร้างข้อมูลแบบแถวลำดับหรืออาร์เรย์ (Array)
Array: One Dimension Programming I 9.
ฟังก์ชันของโปรแกรม Computer Game Programming
การเขียนโปรแกรมด้วยภาษาไพทอน การเขียนโปรแกรมแบบทางเลือก
Decision: Single and Double Selection (if and if-else statement)
Computer Game Programming
ใบสำเนางานนำเสนอ:

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

ความหมายของ Stack เป็นโครงสร้างข้อมูลที่สมาชิกมีลักษณะเป็นแถวเรียงต่อกัน โดยเมื่อมีสมาชิกเข้ามาใหม่จะต้องเข้าที่ปลายหรือด้านบนของ Stack และเมื่อมีสมาชิกออกจะต้องออกจากปลายหรือด้านบนของ Stack การนำข้อมูลเข้าสู่ stack และการนำข้อมูลออกจาก stack จะทำได้ที่ปลายด้านหนึ่งของ stack เท่านั้น โครงสร้างข้อมูลแบบนี้จึงถูกเรียกว่า “LIFO” (LAST IN FIRST OUT) เพราะสมาชิกที่เข้ามาใน Stack หลังสุดจะต้องออกก่อนเสมอ

การดำเนินงานของ Stack PUSH คือการนำสมาชิกใหม่เข้าไปเก็บสู่ Stack โดยจะเป็นการนำไปเก็บที่ด้านบนสุดของ Stack POP คือการนำสมาชิกที่อยู่ใน Stack ออกจาก Stack โดยจะเป็นการนำออกที่ด้านบนสุดของ Stack

การดำเนินงานของ Stack B A C C B A การนำข้อมูลเข้า (PUSH) การนำข้อมูลออก (POP)

การดำเนินงานของ Stack เพราะการจะ POP Stack ได้ก็ต่อเมื่อมีสมาชิกใน Stack แต่ถ้าไม่มีจะไม่สามารถนำข้อมูลออกได้ เรียกว่า “Empty Stack” หรือ “Stack Under Flow” การตรวจสอบดูว่า Stack เต็มหรือไม่ ? เพราะการจะ Push Stack ได้ก็ต่อเมื่อมีพิ้นที่เหลือใน Stack แต่ถ้าไม่มีจะไม่สามารถนำข้อมูลเข้าได้ เรียกว่า “Full Stack” หรือ “Stack Over Flow”

การสร้าง Stack ด้วยโครงสร้างข้อมูล Array (Implementation of Stack as Array) ประกอบไปด้วย ตัวสแตก ( อาจจะเป็น ARRAY ได้ หรือ Link List) ตัวระบุค่าของ stack (stack pointer) มีเพื่อระบุว่าค่าที่อยู่บนสุดของสแตกคือค่าใด บางครั้งเรียกว่า “ทอปพอยน์เตอร์ของสแตก” / TOP OF STACK โปรแกรมย่อย 2 โปรแกรมคือ POP() และ PUSH() โปรแกรมย่อย 2 โปรแกรมคือ EmptyStack() และ FullStack()

การดำเนินการ PUSH() 1. ตรวจสอบว่า Stack เต็ม ? โดยการตรวจสอบว่า Top เท่ากับ MaxStack ? ใช้ Function FullStack() ถ้า Stack เต็ม แสดงว่า "Stack Overflow“ หรือ “Full Stack” แล้วเลิกงาน ถ้า Stack ไม่เต็ม ให้ทำงานข้อที่ 2 และ 3 2. ให้เพิ่มค่าของ Top อีก 1 3. ใส่ข้อมูลลงใน Stack ในตำแหน่งของตัวแปร Top

การดำเนินการ POP() 1. ตรวจสอบว่า Stack ว่างเปล่า ? โดยการตรวจสอบว่า Top เท่ากับ 0 ? ใช้ Function EmptyStack() ถ้า Stack ว่าง แสดงว่า "Stack Under flow" หรือ “Full Stack”แล้วเลิกงาน ถ้า Stack ไม่ว่าง ให้ทำงานข้อที่ 2 และ 3 2. นำค่าของ Stack ในตำแหน่ง Top มาเก็บในตัวแปร 3. ให้ลดค่าของ Top อีก 1 4. แสดงค่าที่ POP ได้

ตัวอย่างการประยุกต์ใช้งาน Stack การใช้งานสแตกสำหรับการเขียนโปรแกมประโยคย้อนหลัง การใช้งานสแตกสำหรับการแปลงรูปนิพจน์ทางคณิตศาสตร์ การแปลงนิพจน์ทางคณิตศาสตร์เป็นกระบวนการที่สำคัญต่อคอมไพลเลอร์ (COMPLIER) เพื่อที่จะทำการแปลงไปเป็นชุดคำสั่งของภาษาเครื่อง

การใช้งานสแตก สำหรับการแปลงรูปนิพจน์ทางคณิตศาสตร์ รูปแบบนิพจน์คำนวณ (Arithmetic Expression) Infix Notation : A + B Prefix Notation : + A B Postfix Notation : A B + เช่น INFIX : (A + B) * (C - D) / E PREFIX : / * + A B – C D E POSTFIX : A B + C D - * E /

Algorithm ในการแปลง Infix เป็น Postfix ตรวจสอบ Token (OPERAND OPERATOR CONSTANT VARIABLE วงเล็บ “)” ทีละ Token ถ้าเป็น วงเล็บเปิด “(” ให้ Push เข้าสแตก ถ้าเป็น วงเล็บปิด “)” ให้ Pop Stack ออกมาที่ละตัวจนกว่าจะเจอ วงเล็บเปิด “(” ไม่ต้องรวมวงเล็บเข้าไปใน ผลลัพธ์ ถ้าเป็น ตัวถูกดำเนินการ (ตัวแปร ค่าคงที่) ให้นำไปเป็นผลลัพธ์

Algorithm ในการแปลง Infix เป็น Postfix ถ้าเป็น ตัวดำเนินการ (เครื่องหมาย) ถ้าสแตกว่าง ให้ PUSH ลงในสแตก ถ้าสแตกไม่ว่าง ให้ทำการเปรียบเทียบลำดับการทำงานของตัวดำเนินการที่อยู่ในสแตก ถ้าลำดับมากกว่า ให้ PUSH ลงในสแตก ถ้าน้อยกว่าหรือเท่ากัน ให้ POP ตัวดำเนินการที่อยู่ในสแตก ออกมาใส่ที่ผลลัพธ์ แล้วเปรียบเทียบใหม่ * * * ให้ถือว่า วงเล็บ () มีค่าความสำคัญต่ำที่สุด ถ้าข้อมูลหมดให้ POP ที่เหลือไปไว้ที่ผลลัพธ์

ลำดับการทำงานของ ตัวดำเนินการทางคณิตศาสตร์ ลำดับการทำงานของตัวดำเนินการทางคณิตศาสตร์ เครื่องหมายยกกำลัง (^) เครื่องหมาย คูณ (*) และ หาร(/) เครื่องหมาย บวก(+) และ ลบ(-) ถ้าลำดับเดียวกันทำจากซ้ายไปขวา แต่ถ้าเป็นเครื่องหมาย ยกกำลังทำจากขวาไปซ้าย

ตัวอย่าง จงแปลงจากนิพจน์ Infix : เป็นนิพจน์ Postfix ? ตัวอย่าง : การแปลงนิพจน์ INFIX TO POSTFIX และ การหาค่าผลลัพธ์จากนิพจน์ Postfix ตัวอย่าง จงแปลงจากนิพจน์ Infix : เป็นนิพจน์ Postfix ? A + B – C  A B + C – A * (B + C) – D / E  A B C + * D E / - A + (B + C / D - E) / F * G A B C D / + E – F / G * +

Algorithm ในการหาค่าผลลัพธ์จาก Postfix ตรวจสอบ Token (OPERAND OPERATOR CONSTANT VARIABLE วงเล็บ ) ที่ละ Token ถ้าเป็น Operand ให้ Push ลง Stack ถ้าเป็น Operator ให้ Pop ค่า 2 ค่าจาก Stack แล้วกระทำกันโดยใช้ Operator (ตัวที่กำลังตรวจสอบ) จากนั้นทำการ Push ผลลัพธ์ลงใน Stack โดยที่ค่าที่ออกจาก Stack ตัวแรกกำหนดให้เป็น Operand ตัวที่2 (ขวามือของเครื่องหมาย)

ตัวอย่าง : การแปลงนิพจน์ INFIX TO POSTFIX และ การหาค่าผลลัพธ์จากนิพจน์ Postfix ตัวอย่าง จงแปลงจากนิพจน์ Infix : เป็นนิพจน์ Postfix ? แล้วทำการหาค่าผลลัพธ์ A + B – C : A = 10 , B = 20 , C = 5  A B + C – PUSH (A) PUSH (B) POP()  A POP()  B B + A 20 + 10 = 30 PUSH(30) PUSH (C) POP()  C POP()  30 30 – C 30 – 5 = 25

ตัวอย่าง : การแปลงนิพจน์ INFIX TO POSTFIX และ การหาค่าผลลัพธ์จากนิพจน์ Postfix ตัวอย่าง จงแปลงจากนิพจน์ Infix : เป็นนิพจน์ Postfix ? แล้วทำการหาค่าผลลัพธ์ A + B / C * D –E : A = 1 , B = 6 , C = 3 , D = 4 , E = 7 A B C / D * + E – PUSH (A) PUSH (B) PUSH (C) POP()  C POP()  B B / C  6 / 3 = 2  PUSH(2) PUSH (D) POP()  D POP()  2 2 * D  2 * 4 = 8  PUSH(8) POP()  8 POP()  A A + 8  1 + 8 = 9  PUSH(9) PUSH (E) POP()  E POP()  9 9 – E  9 – 7 = 2  PUSH(2)

ตัวอย่าง : การแปลงนิพจน์ INFIX TO POSTFIX และ การหาค่าผลลัพธ์จากนิพจน์ Postfix ตัวอย่าง จงแปลงจากนิพจน์ Infix : เป็นนิพจน์ Postfix ? แล้วทำการหาค่าผลลัพธ์ A * ( B / C * D) – E + I A = 3 , B = 6 , C = 3 , D = 1 , E = 5 , I = 13