Stack Holidays/seasonal content.

Slides:



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

Pointers. Why have pointers? / pointers ทำให้ฟังก์ชันหรือส่วนของ โปรแกรมสามารถใช้งานข้อมูลร่วมกันได้ / ใช้ pointers ในการสร้างโครงสร้างข้อมูลที่ ซับซ้อนได้
จงเขียนโปรแกรมในการคำนวณหาค่า function ข้างล่างโดยอาศัยหลักการ
โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
ประเภทของข้อมูลและตัวดำเนินการ Data Types and Operator (บทที่ 3)
โครงสร้างข้อมูลสแตก มีลักษณะเป็นรายการในแนวเชิงเส้น(Linear List)รูปแบบหนึ่ง และมีข้อกำหนดให้ชุดปฏิบัติการสามารถเพิ่มและลบรายการเพียงด้านเดียว ซึ่งเป็นด้านบนสุดของสแตก(Top.
Control Statement if..else switch..case for while do-while.
สถาปัตยกรรมแบบ stack และ การผลิตโค๊ด
สภาวะแวดล้อมในขณะโปรแกรมทำงาน
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures
Functional Programming
Functional programming part II
Functional programming part II
Data Structures and Algorithms
Data Structures and Algorithms
Stack.
CS Assembly Language Programming
Data structure & Algorithms
ลักษณะการทำงานของ Stack
แบบทดสอบ 1. สแตก (stack) หมายถึงอะไร
Week 6 ประกาศค่าตัวแปร.
บทที่ 4 การตัดสินใจในการเขียนโปรแกรม
หน่วยที่ 1 ระบบคอมพิวเตอร์
บรรยายครั้งที่ 2: Stack
ภาษาโปรแกรมเชิงหน้าที่
ปฏิบัติการครั้งที่ 9 ฟังก์ชัน.
โปรแกรมย่อย : Pascal Procedure
บทที่ 13 Pre-processor directive & macro Kairoek choeychuen
คิวQueue Circular Queue.
การเขียนโปรแกรมคอมพิวเตอร์และอัลกอริธึม
ตัวแปร (variable) ตัวแปร เป็นชื่อที่เราตั้งขึ้น เพื่อให้คอมพิวเตอร์เตรียมที่ใน หน่วยความจำไว้สำหรับเก็บข้อมูลที่นำไปประมวลผล การตั้งชื่อตัวแปร ชื่อตัวแปรในภาษา.
Infix to Postfix มหาวิทยาลัยเนชั่น หลักการภาษาชุดคำสั่ง
ตัวแปรกับชนิดของข้อมูล
โครงสร้างข้อมูลแบบคิว
คิว ลักษณะการทำงานของ Queue การดำเนินการของ Queue การตรวจสอบ Queue
สแตค(stack) โครงสร้างข้อมูลแบบ Stack - การสร้าง Stack
คิว (Queue) Queue ADT Queue เป็น List ชนิดหนึ่ง แต่สำหรับ queue การแทรกข้อมูลลงบน queue (Insertion) จะทำที่ปลายใดปลายหนึ่งของ Queue ในขณะที่การลบข้อมูลออกจากคิว.
หมวดวิชาคอมพิวเตอร์ โรงเรียนพะเยาพิทยาคม โดย อ.วัชระ การสมพจน์
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Java Programming Language.
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.
Week 12 Engineering Problem 2
โครงสร้างข้อมูลทรีและไบนารีทรี (Tree and Binary Tree)
Week 12 Engineering Problem 2
คำสั่งควบคุมขั้นตอน Flow control statements
ลิงค์ลิสต์ (Linked List)
Operators ตัวดำเนินการ
บทที่ 4 นิพจน์ทางคณิตศาสตร์.
หลักการเขียนโปรแกรม ( )
กองซ้อน ยอดกองซ้อน (stack).
โครงสร้างข้อมูลแบบกองซ้อน (Stack)
ตัวดำเนินการ และนิพจน์คณิตศาสตร์
PHP การตรวจสอบเงื่อนไข.
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
Lecture9 Tree อ. วรวิทย์ วีระพันธุ์ เรียบเรียงโดย อ
รายการโยง (linked lists) หอยทอด 30 ข้าวผัด 30 ไก่ย่าง 50 เนื้อทอด 30
สาขาวิชาเทคโนโลยี สารสนเทศ คณะเทคโนโลยีสารสนเทศ และการสื่อสาร.
โครงสร้างข้อมูล Queues
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
บทที่ 6 คำสั่งเงื่อนไข.
บทที่ 6 พจนานุกรมข้อมูล และ คำอธิบายกระบวนการ
ตัวแปร และชนิดข้อมูล.
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
โครงสร้างข้อมูลแบบ สแตก (stack)
การประยุกต์ใช้ Stack การประยุกต์ใช้ Stack
รศ. ดร. บุญธีร์ เครือตราชู รศ. กฤตวัน ศิริบูรณ์ KMITL Data Structures & Algorithms : Stack & Queue 1 Stack & Queue Lecturers : Boontee Kruatrachue.
Stack Sanchai Yeewiyom
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
2 โครงสร้างข้อมูลแบบสแตก (STACK).
ใบสำเนางานนำเสนอ:

Stack Holidays/seasonal content

Stack คุณลักษณะของสแตก การนำข้อมูลเข้าและออกจากสแตกจะกระทำที่ปลายข้างเดียวเท่านั้น การทำงานของสแตกจะมีลักษณะแบบ เข้าหลัง ออกก่อน (LIFO: Last In, First Out) ตัวอย่างการทำงานแบบ LIFO เช่น การวางจานซ้อนกัน

Stack ประโยชน์ของสแตก เพื่อแปลงนิพจน์ทางคณิตศาสตร์ การจัดลำดับการทำงานแบบ recursive หรือการเรียกใช้ฟังก์ชัน เป็นกลไกสำคัญในการทำงานของ compiler เช่น การตรวจสอบเครื่องหมาย { } ในภาษาซี หรือการตรวจสอบเครื่องหมายวงเล็บ

Stack การสร้างสแตก สามารถใช้อาเรย์ หรือ Linked List แทนได้ มีตัวชี้ 1 ตัวสำหรับชี้ที่สมาชิกตัวบนสุดของสแตก สมมติให้เป็น TOP กรณีสแตกว่าง กำหนดให้ค่า TOP = 0 กรณี TOP=N เมื่อ N คือขนาดของสแตก แสดงว่าสแตกเต็ม Empty stack Full stack TOP=N A A A D C B A TOP=0

Stack Operation ของสแตก การเพิ่มข้อมูลลงในสแตก (PUSH) การดึงข้อมูลออกจากสแตก (POP)

Stack การเพิ่มข้อมูลลงในสแตก (PUSH) ในการ PUSH ข้อมูลต้องตรวจสอบก่อนว่าสแตกเต็มหรือไม่ โดยใช้เงื่อนไข TOP = N หรือไม่ เมื่อ N คือขนาดของสแตก หาก TOP = N แสดงว่าสแตกเต็ม หากสแตกเต็มจะไม่สามารถนำข้อมูลเข้าไปในสแตกได้อีก

Stack PUSH ALGORITHM Push(stack,max,top,item) if(max=top) write “Full Stack” else top ← top + 1 stack[top] = item หมายเหตุ: stack คือ ชื่ออาเรย์ที่ใช้เก็บข้อมูลในสแตก max คือ ขนาดของสแตก top ใช้เก็บตำแหน่งบนสุดของสแตก Item แทนข้อมูลที่ต้องการ push ลงในสแตก

Stack ตัวอย่าง PUSH Empty stack Push(A) Push(B) Push(C) Push(D) TOP=0 Push(A) A TOP=1 Push(B) B TOP=2 A Push(C) B TOP=3 A C Push(D) B TOP=4 A C D Push(E) B TOP=4 A C D Error:Full Stack

Stack การดึงข้อมูลออกจากสแตก (POP) ในการ POP ข้อมูลต้องตรวจสอบก่อนว่ามีข้อมูลอยู่ในสแตกหรือไม่ โดยใช้เงื่อนไข TOP = 0 หาก TOP = 0 แสดงว่าสแตกว่างเปล่า หากสแตกว่างเปล่าจะไม่สามารถดึงข้อมูลออกจากสแตกได้

Stack POP ALGORITHM Pop(top) if(top=0) write “Empty Stack” else top ← top - 1 หมายเหตุ: top ใช้เก็บตำแหน่งบนสุดของสแตก

Stack ตัวอย่าง POP Pop Pop Pop Pop Pop Pop Error: Empty Stack B A C D TOP=4 A C D Pop B TOP=3 A C B Pop TOP=2 A A Pop TOP=1 Pop TOP=0 Pop TOP=0 Error: Empty Stack

การใช้ สแตก เพื่อแปลงเลขฐานสิบเป็นเลขฐานสอง Algorithm 1. loop (number > 0) 1.1 b = number modulo 2 1.2 push (stack,b) 1.3 number = number / 2 2. loop (not empty(stack)) 2.1 pop(stack) 1 1 1 ตัวอย่าง: 11 ---> 1011 pop stack 1 top top stack 1 top stack 1 top stack 1

Parenthesis matching ตัวอย่าง: ((A + B) / C) Algorithm 1. loop (more data) 1.1 If character is ‘(‘ 1.1.1 push(stack, character) 1.2 else if character is ‘)’ 1.2.1 if empty (stack) then error 1.2.2 else pop(stack) 2. if not empty(stack) 2.1 error ตัวอย่าง: ((A + B) / C) stack ( top push(‘(’) stack ( top push(‘(’) stack ( top pop stack top pop

Parenthesis matching ตัวอย่าง: (A + B) + C) error Algorithm 1. loop (more data) 1.1 If character is ‘(‘ 1.1.1 push(stack, character) 1.2 else if character is ‘)’ 1.2.1 if empty (stack) then error 1.2.2 else pop(stack) 2. if not empty(stack) 2.1 error stack empty stack error ตัวอย่าง: (A + B) + C) stack ( top push(‘(’) pop stack top

การใช้ สแตก เพื่อแปลงนิพจน์ทางคณิตศาสตร์ รูปแบบนิพจน์ทางคณิตศาสตร์ Infix : A + B * C - D / E Postfix : A B C * + D E / - Operators priority priority 3 : + - priority 2 : * / priority 1 : ^ priority 0 : ( น้อย มาก

Infix to Postfix Transformation Algorithm infix2postfix 1. CreateStack (s) 2. Loop (for each character in infix) 2.1 if (character = ‘(‘) 2.1.1 pushStack (s, character) 2.2 elseif (character = ‘)’) 2.2.1 popStack (s, character) 2.2.2 loop (character ≠ ‘(‘) 1. print character 2. popStack (s, character)

Infix to Postfix Transformation Algorithm infix2postfix (cont.) 2.3 elseif (character = ‘*’, ‘/’, ‘+’, ‘-’, ‘^’) 2.3.1 stackTop (s, toptoken) 2.3.2 loop (not emptyStack (s) and priority(character) <= priority(toptoken)) 1. popStack (s, tokenout) 2. print tokenout 3. stackTop (s, toptoken) 2.3.3 pushStack (s, character) 2.4 else 2.4.1 print character

Infix to Postfix Transformation Algorithm infix2postfix (cont.) 3. Loop (not emptyStack (s)) 3.1 popStack (s, character) 3.2 print character 4. end

Infix to Postfix Transformation Infix : A + B * C Postfix : A B C * + A B C * +

Infix to Postfix Transformation Infix : A + B * C - D / E Postfix : A B C * + D E / - - D E / A B C + * * / + -

Algorithm Postfix Evaluation 1. createStack (s) 2. Loop (for each character) 2.1 if character is operand 2.1.1 pushStack (s, character) 2.2 else 2.2.1 popStack (s, oper2) 2.2.2 popStack (s, oper1) 2.2.3 operator  character 2.2.4 value  calculate (oper1, operator, oper2) 2.2.5 pushStack (s, value) 3. popStack (s, result) 4. end

Postfix Evaluation A B C + * 2 4 6 + * + 10 20 * 6 4 2

Exercise Convert Infix to Postfix 1. A+B*C-D+E 2. (A+B)*C-(D+E) 3. A*(B-C)/D+E*F 4. 3*(1+7)/2

จัดทำโดย อ.ดารารัตน์ แซ่ลี้ ภาควิชาวิทยาการคอมพิวเตอร์ คณะวิทยาศาสตร์ มหาวิทยาลัยสงขลานครินทร์