งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

First In First Out : FIFO หมายถึงข้อมูลที่เข้ามาใน ลิสต์ก่อน จะถูกนำออกจากลิสต์เป็นลำดับแรก ตัวอย่าง ได้แก่การยืนรอคิวเพื่อซื้อตั๋ว Last In First Out.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "First In First Out : FIFO หมายถึงข้อมูลที่เข้ามาใน ลิสต์ก่อน จะถูกนำออกจากลิสต์เป็นลำดับแรก ตัวอย่าง ได้แก่การยืนรอคิวเพื่อซื้อตั๋ว Last In First Out."— ใบสำเนางานนำเสนอ:

1

2 First In First Out : FIFO หมายถึงข้อมูลที่เข้ามาใน ลิสต์ก่อน จะถูกนำออกจากลิสต์เป็นลำดับแรก ตัวอย่าง ได้แก่การยืนรอคิวเพื่อซื้อตั๋ว Last In First Out : LIFO หมายถึงข้อมูลที่เข้ามาใน ลิสต์เป็นลำดับสุดท้าย จะถูกนำออกจากลิสต์เป็นอันดับ แรก ตัวอย่างได้แก่การนำชั้นของปิ่นโตเข้าและออกจากเถา ปิ่นโต

3 เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการ ใส่ข้อมูลเข้า และนำข้อมูลออกเพียง ด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack หลังข้อมูลที่ เข้าไปใน stack ทีหลัง นั่นคือ การ " เข้าที หลังแต่ออกก่อน " (Last In First Out : LIFO)

4 ปฏิบัติการพื้นฐานของ Stack ได้แก่ push คือการนำข้อมูล เก็บใน Stack และ pop คือการนำข้อมูลออกจาก Stack ซึ่งทั้งสองกระบวนการ จะกระทำที่ส่วนบนสุดของ Stack เสมอ โดยปกติแล้วมักกำหนดให้มีตัวชี้ส่วนบนสุด ของ Stack เรียกว่า top ส่วนปฏิบัติการอื่น ๆ เป็น ปฏิบัติการที่เกี่ยวเนื่องกับการ push และ pop มีดังนี้ การสร้าง Stack (CREATE) การทดสอบว่า stack ว่างหรือไม่ (EMPTY) การทดสอบว่า stack เต็มหรือไม่ (FULL) การทำให้ stack เป็น stack ว่าง (CLEAR)

5 การนำข้อมูลเข้าสู่ Stack (Push) กระทำที่ส่วนบนของ Stack (Top) ซึ่งต้องมีการตรวจสอบก่อนว่า Stack เต็ม หรือไม่ และการนำข้อมูลออกจาก Stack (Pop) กระทำที่ส่วนบน ของ Stack เช่นกัน โดยตรวจสอบว่ามีสมาชิกอยู่ใน Stack หรือไม่ ( ตรวจสอบว่า Stack ว่างเปล่าหรือไม่ )

6 เป็นการดำเนินการที่นำข้อมูลเข้าไปเก็บไว้ ด้านบนสุดของกองซ้อน (Top of the Stack) เรื่อย ๆ จนกว่ากองซ้อนไม่สามารถ นำข้อมูลเข้าไปเก็บได้ จะเรียกว่า กองซ้อนเต็ม (Stack Full)

7 การทำงานจะตรงข้ามกับ Push จะดึงเอาข้อมูลที่อยู่บนสุดออกมาก่อน แต่ก่อนที่จะดึงจะมี การตรวจสอบว่ากองซ้อนว่างหรือไม่ ถ้าว่างจะไม่สามารถนำข้อมูลออกได้ แสดงว่ากองซ้อนว่าง (Stack Empty) ถ้าไม่ว่างจะนำเอาข้อมูลออกแล้วเลื่อนตัวชี้ ไปยังตำแหน่งถัดลงไป

8 ให้ Y เป็นสแตกเก็บค่าตัวเลขได้ไม่ เกิน 6 ตัว Push(‘2’),Push(‘5’),Push(‘3’) Pop(),Push(‘9’), Push(‘0’) Push(‘4’) Push(‘6’),Pop()

9 เริ่มต้นจาก การสร้าง สแตก Y ขึ้นมาทำงาน จำได้สแตก ว่าง ไม่มี สมาชิกโดย ตัวชี้สแตก Top ยังไม่มี ค่า Top

10 2 นำค่า 2 เข้า มาเก็บเป็นตัว แรกโดยใช้ Push(‘2’) สแตก Y=[2] ตัวชี้สแตก Top = 2 Top

11 2 5 นำค่า 5 เข้ามาเก็บ เป็นตัวแรก โดยใช้ Push(‘5’) สแตก Y=[5] ตัว ชี้สแตก Top = 5 Top

12 2 5 3 นำค่า 3 เข้ามาเก็บ เป็นตัวแรก โดยใช้ Push(‘3’) สแตก Y=[3] ตัว ชี้สแตก Top = 3

13 5 2 ต้องการดึง ค่าออกมา โดยใช้ Pop() สแตก Y=[2,5,3] ตัว ชี้สแตก Top = 3 Top

14 2 5 9 นำค่า 9 เข้ามาเก็บ เป็นตัว แรกโดย ใช้ Push(‘9’) สแตก Y=[9] ตัว ชี้สแตก Top = 9 Top

15 นำค่า 0 เข้ามาเก็บ เป็นตัวแรก โดยใช้ Push(‘0’) สแตก Y=[0] ตัว ชี้สแตก Top = 0 Top

16 นำค่า 4 เข้ามาเก็บ เป็นตัวแรก โดยใช้ Push(‘4’) สแตก Y=[4] ตัว ชี้สแตก Top = 4 Top

17 นำค่า 6 เข้ามาเก็บ เป็นตัวแรก โดยใช้ Push(‘6’) สแตก Y=[6] ตัว ชี้สแตก Top = 6 Top

18 Any list implementation could be used to implement a stack Arrays (static: the size of stack is given initially) Linked lists (dynamic: never become full) We will explore implementations based on array and linked list Let’s see how to use an array to implement a stack first

19 Need to declare an array size ahead of time มีทางให้ข้อมูลเข้า และ ข้อมูลออก เพียงด้านเดียว Associated with each stack is TopOfStack for an empty stack, set TopOfStack to -1 Push (1) Increment TopOfStack by 1. (2) Set Stack[TopOfStack] = X Pop (1) Set return value to Stack[TopOfStack] (2) Decrement TopOfStack by 1 These operations are performed in very fast constant time

20 เป็นการเตรียมเนื้อที่ในหน่วยความจำไว้สำหรับเก็บข้อมูล ตัวอย่างในภาษาซี คือ int Stack[4]; การนำข้อมูลเข้าและออกจากหน่วยความจำด้วยแถวลำดับ ก็เหมือนกับที่ยกตัวอย่างไปแล้ว Stack

21 class Stack { public: Stack(int size = 10);// constructor ~Stack() { delete [] values; }// destructor bool IsEmpty() { return top == -1; } bool IsFull() { return top == maxTop; } double Top(); void Push(const double x); double Pop(); void DisplayStack(); private: int maxTop;// max stack size = size - 1 int top;// current top of stack double* values;// element array };

22 Attributes of Stack maxTop : the max size of stack top : the index of the top element of stack values : point to an array which stores elements of stack Operations of Stack IsEmpty : return true if stack is empty, return false otherwise IsFull : return true if stack is full, return false otherwise Top : return the element at the top of stack Push : add an element to the top of stack Pop : delete the element at the top of stack DisplayStack : print all the data in the stack

23 The constructor of Stack Allocate a stack array of size. By default, size = 10. When the stack is full, top will have its maximum value, i.e. size – 1. Initially top is set to -1. It means the stack is empty. Stack::Stack(int size /*= 10*/) { maxTop=size - 1; values=new double[size]; top=-1; } Although the constructor dynamically allocates the stack array, the stack is still static. The size is fixed after the initialization.

24 void Push(const double x); Push an element onto the stack If the stack is full, print the error information. Note top always represents the index of the top element. After pushing an element, increment top. void Stack::Push(const double x) { if (IsFull()) cout << "Error: the stack is full." << endl; else values[++top]=x; }

25 double Pop() Pop and return the element at the top of the stack If the stack is empty, print the error information. (In this case, the return value is useless.) Don’t forgot to decrement top double Stack::Pop() { if (IsEmpty()) { cout << "Error: the stack is empty." << endl; return -1; } else { return values[top--]; }

26 double Top() Return the top element of the stack Unlike Pop, this function does not remove the top element double Stack::Top() { if (IsEmpty()) { cout << "Error: the stack is empty." << endl; return -1; } else return values[top]; }

27 void DisplayStack() Print all the elements void Stack::DisplayStack() { cout "; for (int i = top; i >= 0; i--) cout << "\t|\t" << values[i] << "\t|" << endl; cout << "\t| |" << endl; }

28 int main(void) { Stack stack(5); stack.Push(5.0); stack.Push(6.5); stack.Push(-3.0); stack.Push(-8.0); stack.DisplayStack(); cout << "Top: " << stack.Top() << endl; stack.Pop(); cout << "Top: " << stack.Top() << endl; while (!stack.IsEmpty()) stack.Pop(); stack.DisplayStack(); return 0; } result

29 โครงสร้างข้อมูลแบบ stack มีการประยุกต์ใช้มากในการเขียน โปรแกรมของสาขาวิทยาการคอมพิวเตอร์ เช่น การจัดสรรหน่วยความจำในการประมวลผลโปรแกรม (Function Call) รวมทั้ง โปรแกรมเรียกใช้ตัวเอง (Recursive) การตรวจสอบอักขระสมดุล (Balancing Symbol) การคำนวณนิพจน์คณิตศาสตร์

30 การเรียกใช้ Function หรือ Procedure หรือ โปรแกรมย่อยในภาษาที่ไม่มีการ Recursive เมื่อมีการเรียกใช้ Function ก็จะทำการ Push Function to Stack และเมื่อมีการ Return หรือจบการทำงานของ Function แล้วจะต้อง Pop Function from Stack

31 การเรียกโปรแกรมย่อยมีความแตกต่างกับการกระโดด ทั่วไป เนื่องจากภายหลังที่โปรแกรมย่อยทำงานเสร็จ หน่วย ประมวลผลจะต้องสามารถกระโดดกลับมาทำงานใน โปรแกรมหลักต่อไปได้ ดังนั้นการเรียกใช้โปรแกรม ย่อยนั้นจะต้องมีการเก็บตำแหน่งของคำสั่งที่ทำงานอยู่ เดิมด้วย และเมื่อจบโปรแกรมย่อยโปรแกรมจะต้อง กระโดดกลับมาทำงานที่เดิม โดยใช้ข้อมูลที่เก็บไว้ ภาพ และอัลกอริทึมแสดงตัวอย่างการเรียกใช้โปรแกรมย่อย

32 PROGRAM MAIN CALL Sub1 PRINT Q.... END MAIN PROCEDURE Sub1.... CALL Sub2 A:=A+B... END Sub1 PROCEDURE Sub2... END Sub2

33 Example : {x+(y-[a+b])*c-[(d+e)]}/(h-(j-(k-[l-n])))

34 ในการตรวจสอบอักขระสมดุลนั้น คอมไพเลอร์ ได้นำแนวคิดโครงสร้างข้อมูลแบบ Stack มา ประยุกต์ โดยมีวิธีการดังนี้ 1. ให้อ่านอักขระทีละตัว - ถ้าอักขระเป็นอักขระเปิด เช่น {,(,[ เป็นต้น ให้ PUSH ลง stack - ถ้าอักขระเป็นอักขระปิด เช่น },),] เป็นต้น ให้ตรวจสอบว่าอักขระบน TOP ของ stack เป็นอักขระเปิดที่คู่กันหรือไม่ - ถ้าใช่ ให้ POP อักขระนั้นออกจาก stack - ถ้าไม่ใช่ ให้แสดงผล error 2. เมื่ออ่านอักขระหมดแล้ว แต่ stack ไม่เป็น stack ว่าง ให้แสดงผล error


ดาวน์โหลด ppt First In First Out : FIFO หมายถึงข้อมูลที่เข้ามาใน ลิสต์ก่อน จะถูกนำออกจากลิสต์เป็นลำดับแรก ตัวอย่าง ได้แก่การยืนรอคิวเพื่อซื้อตั๋ว Last In First Out.

งานนำเสนอที่คล้ายกัน


Ads by Google