Stack Sanchai Yeewiyom

Slides:



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

จงเขียนโปรแกรมในการคำนวณหาค่า function ข้างล่างโดยอาศัยหลักการ
โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
ครั้งที่ 12 การค้นหาข้อมูล (Searching)
โครงสร้างข้อมูลแบบรายการโยง (Linked Lists) Data Structures and Algorithms อ. ธารารัตน์ พวงสุวรรณ คณะวิทยาศาสตร์และศิลปศาสตร์ มหาวิทยาลัยบูรพา วิทยาเขตสารสนเทศจันทบุรี
Data Structures and Algorithms
Data Structures and Algorithms
Stack.
Lecture 13: ฟังก์ชันเรียกตัวเอง
Stack Holidays/seasonal content.
Data structure & Algorithms
ลักษณะการทำงานของ Stack
Linked-List (รายการโยง)
การวิเคราะห์ประสิทธิภาพของอัลกอริธึม (Performance Analysis)
Infix to Postfix มหาวิทยาลัยเนชั่น หลักการภาษาชุดคำสั่ง
โครงสร้างข้อมูลแบบคิว
คิว ลักษณะการทำงานของ Queue การดำเนินการของ Queue การตรวจสอบ Queue
สแตค(stack) โครงสร้างข้อมูลแบบ Stack - การสร้าง Stack
คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว.
STACK ADT By Pantharee S.. Stack Model  A list with the restriction that insertions deletions can be performed in only one position (LIFO)  Push – insert.
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
บทที่ 5 Link List Link List.
21 August ดรุณี ศมาวรรตกุล 1 2. ADT List - Unsorted list ADT - list implementation - Sorted List - Circular list - Doubly linked list.
กองซ้อน ยอดกองซ้อน (stack).
โครงสร้างข้อมูลแบบกองซ้อน (Stack)
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
Lecture9 Tree อ. วรวิทย์ วีระพันธุ์ เรียบเรียงโดย อ
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
โครงสร้างข้อมูลแบบ สแตก (stack)
Programming assignments ชื่องาน (subject) : program เขียนด้วยภาษา C หรือ C++ มีทั้งหมด 7 ข้อ กำหนดส่ง 29 กรกฎาคม 2554.
การประยุกต์ใช้ Stack การประยุกต์ใช้ Stack
Linked List (2) Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
รศ. ดร. บุญธีร์ เครือตราชู รศ. กฤตวัน ศิริบูรณ์ KMITL Data Structures & Algorithms : Stack & Queue 1 Stack & Queue Lecturers : Boontee Kruatrachue.
Linked List ( ต่อ ) Lecturer : Kritawan Siriboon, Room no. 913 Text : Data Structures & Algorithm Analysis in C, C++,… Mark Allen Weiss, Addison Wesley.
Queue Sanchai Yeewiyom School of Information & Communication Technology University of Phayao.
List, Stack, Queue 2018/9/21.
Computer Programming การเขียนโปรแกรมคอมพิวเตอร์
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Linked List.
INC 161 , CPE 100 Computer Programming
Data Structure & Algorithm Concept
Linked List.
วิธีปฏิบัติทางบัญชี 1. การรับบริจาคเงินสด
System Requirement Collection (1)
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Linked List Lecturer : Kritawan Siriboon, Room no. 913
Queue [2] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
Project Feasibility Study
Yeunyong Kantanet School of Information and Communication Technology
หลักเกณฑ์และวิธีการจัดเตรียมคำขอรับ สิทธิบัตร/อนุสิทธิบัตร
การประเมินส่วนราชการ
Problem Solving ขั้นตอนวิธีและการแก้ปัญหาสำหรับวิทยาการคอมพิวเตอร์
Linked List (ต่อ) Lecturer : Kritawan Siriboon, Room no. 913
Chapter 7 ฟังก์ชัน Function.
โครงสร้างข้อมูลแบบสแตก (stack)
Hashing Sanchai Yeewiyom
Timing diagram ปรับปรุง 19 มีนาคม
ติว ม. 6 วันที่ 15 ก.ค 2558.
บทที่ 2 การวัด.
ตัวแปรชนิดพอยเตอร์ (Pointer)
นิพจน์และตัวดำเนินการ
Algorithms Analysis Sanchai Yeewiyom
4.4 AVL Trees AVL (Adelson-Velskii and Landis) tree เป็น binary search tree กำกับด้วยเงื่อนไขของการสมดุล และประกันว่า depth ของ tree จะเป็น O(log n) อย่างง่ายที่สุดคือกำหนดว่า.
2 โครงสร้างข้อมูลแบบสแตก (STACK).
Array Sanchai Yeewiyom
Stack (Push Down Stack)
ใบสำเนางานนำเสนอ:

Stack Sanchai Yeewiyom School of Information & Communication Technology University of Phayao

Nature of Stack A stack has the property that the last placed on the stack will be the first item removed. (Last In First Out: LIFO)

Implementation of Stack Array-based implementation Pointer-based implementation

Array-based implementation Push Pop

Array-based implementation POP PUSH 4 E top 3 D 2 C 1 B A

Exp. Push void push (stackitemtype newitem , boolean& success) { success = boolean (top < max-1) if (success) top ++ ; item [ top] = newitem ; }

Exp. Pop void pop (boolean& success) { success = boolean (! stackisempty ()) ; if (success) stacktop = item [top] top -- ; }

Pointer-based implementation temp 20 topptr newtopptr 10 topptr newtopptr

Push newtopptr -> next = topptr; topptr = newtopptr;

Pop topptr = temp -> next; temp -> next = null; delete temp;

Exp. Push

Exp. Pop

การคำนวณนิพจน์ทางคณิตศาสตร์ แบ่งเป็น 3 ประเภทคือ นิพจน์ Infix คือ นิพจน์ที่มีเครื่องหมายดำเนินการ (operator) อยู่กึ่งกลางตัวถูกดำเนินการ (operand) เช่น A + B นิพจน์ Postfix คือ นิพจน์ที่มีเครื่องหมายดำเนิน (operator) การอยู่ด้านหลังตัวถูกดำเนินการ (operand) เช่น AB+ นิพจน์ Prefix คือ นิพจน์ที่มีเครื่องหมายดำเนินการ (operator) อยู่ด้านหน้าตัวถูกดำเนินการ (operand) เช่น -AB

การคำนวณนิพจน์ทางคณิตศาสตร์ เครื่องหมายดำเนินการ (operand) ได้แก่เครื่องหมาย + - * / ^ ตัวถูกดำเนินการ ได้แก่ สัญลักษณ์แทนค่าตัวเลข เช่น A B C D หรือตัวแปรอื่น สำหรับในระบบคอมพิวเตอร์ไม่สามารถที่จะคำนวณในรูปแบบของนิพจน์ infix ได้ จะต้องแปลงเป็นรูปแบบของนิพจน์postfix เสียก่อน โดยลักษณะของการแปลงนิพจน์จะใช้การเปรียบเทียบความสำคัญของตัวดำเนินการ

การคำนวณนิพจน์ทางคณิตศาสตร์ ลำดับความสำคัญของตัวดำเนินการ 1. เครื่องหมาย ( 2. เครื่องหมาย ^ 3. เครื่องหมาย * / 4. เครื่องหมาย + - 5. เครื่องหมาย )

การประยุกต์ Stack ในการคำนวณนิพจน์พีชคณิต (Algebraic Expression) จงเปลี่ยนจาก infix ให้เป็น postfix A+B*C-(E-F)/G*H ให้ A=3, B=2, C=3, E=5, F=2, G=1, H=2

การประยุกต์ Stack ในการคำนวณนิพจน์พีชคณิต (Algebraic Expression) Result ABC*+EF-G/H*-

การประยุกต์ Stack ในการคำนวณนิพจน์พีชคณิต (Algebraic Expression) หลักการเปลี่ยนจาก infix ให้เป็น postfix 1. ถ้าตัวที่อ่านเข้ามาเป็น operand ให้นำไปเป็น output 2. ถ้าตัวที่อ่านเข้ามาเป็น ( ให้ทำการ Push 3. ถ้าตัวที่อ่านเข้ามาเป็น ) ให้ทำการ Pop จาก Stack ไปเป็นผลลัพธ์ Pop จนกว่าจะถึง (

การประยุกต์ Stack ในการคำนวณนิพจน์พีชคณิต (Algebraic Expression) 4. ถ้าตัวที่อ่านเข้ามาเป็น operator ให้ตรวจสอบว่า ถ้า stack ว่าง ให้ทำการ Push ถ้า stack ไม่ว่าง ให้เปรียบเทียบ operator ที่เข้ามากับ operator ที่ top of stack ถ้ามี precedence (priority) น้อยกว่าหรือเท่ากับให้ Pop แล้วจึงทำการเปรียบเทียบกับ top of stack ตัวใหม่ทำไปเรื่อยๆ จะหยุดก็ต่อเมื่อเจอ ( หรือมี precedence น้อยกว่า จึงทำการ Push

การประยุกต์ Stack ในการคำนวณนิพจน์พีชคณิต (Algebraic Expression) 5. ถ้าข้อมูลหมด ให้ Pop stack ไปเป็นผลลัพธ์

ตัวอย่างการแปลงนิพจน์ infix เป็น postfix นิพจน์ A+B*C-D ข้อมูลเข้า operator stack นิพจน์ postfix A A + + B + AB * +* AB C +* ABC - - ABC*+ D - ABC*+D ABC*+D-

ตัวอย่างการแปลงนิพจน์ infix เป็น postfix นิพจน์ (A+B)*C-D ข้อมูลเข้า operator stack นิพจน์ postfix ( ( A ( A + (+ A B (+ AB ) AB+ * * AB+ C * AB+C - - AB+C* D - AB+C*D AB+C*D-

การหาค่าผลลัพธ์จากนิพจน์ postfix (Propostfix) การคำนวณโดยใช้ stack ช่วย และแสดงให้เห็นความถูกต้องของนิพจน์ postfix ที่ถูกแปลงจากนิพจน์ infix ด้วย

การหา Propostfix 1. ถ้าข้อมูลเข้าเป็น operand ให้ push ลงสแตก 2. ถ้าข้อมูลเข้าเป็น operator ให้ pop stack 2 ครั้ง โดยให้ - operand ที่ pop นั้นเป็น operand ตัวที่ 2 และ 1 ตามลำดับ - นำ operand ทั้งสองคำนวณผลลัพธ์ตาม operator ที่เป็น ข้อมูลเข้า แล้วนำผลการคำนวณ push ลง stack

ตัวอย่างการหา Propostfix ตัวอย่าง การประมวลผล ABC*+D- ข้อมูลเข้า op1 op2 คำนวณ stack A A B A, B C A, B, C * B C B*C A,B*C + A B*C A+B*C A+B*C D A+B*C, D - A+B*C D A+B*C-D A+B*C-D

** ถ้าผลลัพธ์ที่ได้ออกมาเท่ากัน แสดงว่า Propostfix ที่หาได้ถูกต้อง ตรวจสอบความถูกต้อง กำหนดค่าให้กับแต่ละ Operand เพื่อตรวจสอบค่าที่ได้จากนิพจน์ Infix และค่าที่ได้จาก Propostfix ตัวอย่าง จากนิพจน์ Infix A+B*C-D กำหนดให้ A=2, B=3, C=1, D=1หาค่าออกมาได้เท่ากับ …… เมื่อหาแปลงจาก Infix เป็น Postfix และนำ Postfix ไปหา Propostfix จากตัวอย่างที่ผ่านมา โดยแทนค่า Operand ลงไป จะได้ดังนี้ ** ถ้าผลลัพธ์ที่ได้ออกมาเท่ากัน แสดงว่า Propostfix ที่หาได้ถูกต้อง

ตัวอย่างการหา Propostfix ตัวอย่าง การประมวลผล ABC*+D- ข้อมูลเข้า op1 op2 คำนวณ สแตก A A B A, B C A, B, C * B C 3*1 A,3 + A 3 2+3 5 D 5, D - 5 D 5-1 4

Homework จงเปลี่ยน infix ให้เป็น postfix A+B/(C+D)*E

การประยุกต์ Stack ในการคำนวณนิพจน์พีชคณิต (Algebraic Expression) Exp. จงหาผลลัพธ์ของ Postfix 5 3 2 * + 4 – 5 +

การประยุกต์ Stack ในการเลือกเส้นทางการบิน Z Exp. จงหาเส้นทางจาก P ไปยัง Z Y W S P T R X Q

การประยุกต์ Stack ในการเลือกเส้นทางการบิน

Recursive Solution เป็นฟังก์ชันที่มีการเรียกใช้ตัวเองซ้ำๆ วนไปเรื่อยๆ จนกว่าจะถึงเงื่อนไขที่กำหนด เช่น Factorial function Factorial function (n!) คือผลคูณของเลขจำนวนเต็มบวก ตั้งแต่ 1 ถึง n นิยาม n! = 1 if n=0 n(n-1)! if n>0.

Factorial function Exp. 4!=? 4! = 4x3! = 4x(3x2!) = 4x(3x(2x1!)) = 24

Factorial function เขียนแบบวนรอบ (Iterative) long int Factorial (int n) { int i; long int prod = 1; for (i=2; i<=n; i++) prod = prod * i; return (prod); }

Factorial function เขียนแบบ Recursive long int Factorial (int n) { if (n==0) return 1; else return (n*Factorial (n-1)); }

Factorial function (Stack) Exp. Calculate 4! 1! 1 * Fac (0) 2 * Fac (1) 3 * Fac (2) 4 * Fac (3) 2! 3! 4!