1 / 27

โครงสร้างข้อมูลแบบคิว

โครงสร้างข้อมูลแบบคิว. QUEUE. เนื้อหา. คิว โอเปอร์เรชั่นของคิว การเพิ่มข้อมูลเข้าไปในคิว ( En Queue ) การลบข้อมูลออกจากคิว ( De Queue ) คิวแบบวงกลม การประยุกต์ใช้งานคิว. Queue Slide# 2. คิว : Queue.

loyal
Download Presentation

โครงสร้างข้อมูลแบบคิว

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. โครงสร้างข้อมูลแบบคิวโครงสร้างข้อมูลแบบคิว QUEUE

  2. เนื้อหา • คิว • โอเปอร์เรชั่นของคิว • การเพิ่มข้อมูลเข้าไปในคิว (En Queue) • การลบข้อมูลออกจากคิว (De Queue) • คิวแบบวงกลม • การประยุกต์ใช้งานคิว Queue Slide# 2

  3. คิว : Queue คิวเป็นลิสต์แบบเชิงเส้นเช่นเดียวกับสแตค แต่มีความแตกต่างกันตรงที่คิวมีตัวชี้ 2 ตัว คือ front และ rear สำหรับการใส่ข้อมูลเข้าและนำข้อมูลออก คิวมีกระบวนการทำงานแบบ First In First Out : FIFO Queue Slide# 3

  4. ตัวอย่างของคิว front rear ลบข้อมูล A front +1 rear Queue Slide# 4

  5. Chapter 4 Stack and Queue โครงสร้างข้อมูลแบบเชิงเส้นเช่นเดียวกับสแตก และคิว มีตัวชี้ 2 ตัว - หัว (Head) - หาง (Tail) ข้อมูลจะเข้าทางหางและออกทางหัวที่เรียกว่า FIFO ก ข ค H T

  6. Chapter 4 Stack and Queue Queue ข ค H+1 T ข ค ง H+1 T+1 A H T H and T = NULL

  7. Chapter 4 Stack and Queue Queue(circular queue) H=1 H=2 H=3 ก ข ข ค ง ค ง T=2 T=4 T=4 1 2 3 4 1 2 3 4 1 2 3 4 H=3 H=4 H=1 จ ค ง จ ง จ ฉ T=1 T=1 T=2 1 2 3 4 1 2 3 4 1 2 3 4 Circular queue มีหลักอยู่ว่าต้องทราบจำนวนสูงสุดของ หน่วยความจำที่ใช้เก็บข้อมูล

  8. สถานะของคิว 0 1 2 0 1 2 front = 0 rear = 0 front = -1 rear = -1 A b) enqueue A a) empty queue 0 1 2 0 1 2 front = 0 rear = 1 front = 1 rear = 1 A B B c) enqueue B d) dequeue A 0 1 2 0 1 2 front = 1 rear = 2 front = 2 rear = 2 B C C e) enqueue C full queue f) dequeue B Queue Slide# 8

  9. Chapter 4 Stack and Queue • อัลกอริธึมINSQ (Q,N,H,T,DATA) : Q = คิวของข้อมูล • ถ้า H = 1 และ T = N หรือถ้า H = T+1 แสดงว่าคิวเต็มและจบการทำงาน • 1.1 ถ้า H = NULL ดังนั้นให้ H = 1 and T = 1 • 1.2 ถ้า T = N ให้ T = 1 และ • 1.3 ถ้า T = ตำแหน่งใดๆให้ T = T+1 • 2. ให้ Q [T] = DATA • จบการดำเนินการ

  10. Chapter 4 Stack and Queue • อัลกอริธึมDELQ (Q,N,H,T,DATA) • ถ้า H = NULL ดังนั้นคิว Underflow และจบการทำงาน • ให้ DATA = Q [H] • 2.1 ถ้า H = T ให้ H = T= NULL • 2.2 ถ้า H = N ให้ H = 1 • 2.3 ถ้า H = ตำแหน่งใดๆในคิวให้ H = H+1 • จบการดำเนินการ

  11. การเพิ่มข้อมูลเข้าไปในคิว : En Queue การนำข้อมูลเข้าที่ rear ซึ่งจะชี้สมาชิกตัวสุดท้าย และต้องเพิ่มค่า rear ทีละ 1 ก่อนจะนำสมาชิกใหม่เข้ามา และทำลักษณะเช่นนี้จนกว่าคิวจะเต็ม ที่ rear=n-1 เป็นค่าสูงสุด Queue Slide# 11

  12. De Queue • ในการจัดรูปแบบของคิวอีกรูปแบบเรียกว่า ดีคิว หรือ เดค • ซึ่งแบ่งออกเป็น 2 ชนิด • ดีคิวที่จำกัดการนำเข้าของข้อมูล(In-put restricted de queue) • ดีคิวที่ใส่ข้อมูลได้เพียงด้านเดียว แต่ลบข้อมูลออกได้ทั้ง • สองด้าน • ดีคิวที่จำกัดการส่งออกของข้อมูล(Out-put restricted de queue) • ดีคิวที่ใส่ข้อมูลได้ทั้งสองด้าน แต่ลบข้อมูลออกได้เพียง • ด้านเดียว

  13. En Queue • ในการจัดลำดับและการลบออกของคิวที่มีขบวนการดัง • ต่อไปนี้ • ข้อมูลที่มีลำดับความสำคัญสูงสุดจะถูกเรียกทำงานก่อน • ในกรณีที่มีลำดับความสำคัญเท่ากันเลือกอันที่มาก่อน • ในการสร้างคิวแบ่งได้เป็น 2 ลักษณะ • คิวแบบแถวเดียว (One Way List) • ประกอบด้วย 3 ส่วน (ข้อมูล, ลำดับความสำคัญ และตัวชี้ถัดไป) H T 1 ก 1 ก 1 ก 1 ก

  14. Chapter 4 Stack and Queue • ในการสร้างคิวแบ่งได้เป็น 2 ลักษณะ • คิวแบบหลายคิวตามจำนวนลำดับความสำคัญและกำหนด • เป็นลักษณะหลายแถวเรียกว่า circular Queue มีลักษณะ 2 มิติ • ไม่เป็นข้อมูลแบบเชิงเส้น ตำแหน่ง 1 2 3 4 1 ก 2 ข ค ง 3 จ 4 ฉ ลำดับความสำคัญ

  15. Enqueue addq ( int item ) { if ( rear == MAX - 1 ) { printf ( "\nQueue is full" ) ; return ; } rear++ ; arr[rear] = item ; if ( front == -1 ) front = 0 ; } กรณี e) และ f) คิวเต็ม Queue Slide# 15

  16. การลบข้อมูลจากคิว : De Queue การนำข้อมูลออกจากคิว จะออกที่ front ซึ่งจะชี้ที่สมาชิกตัวแรกเสมอ ค่า front จะเพิ่มขึ้นทีละ 1 ทุกครั้งหลังจากนำข้อมูลออกจากคิวแล้ว ทำจนกระทั่ง front = rear โดยกำหนดให้ค่าของ front=-1 และ rear=-1 ซึ่งแสดงว่าคิวว่าง Queue Slide# 16

  17. Dequeue delq( ) { int data ; if ( front == -1 ) { printf ( "\nQueue is Empty" ) ; return NULL ; } data = arr[front] ; if ( front == rear ) front = rear = -1 ; else front++ ; return data ; } กรณีลบคิวที่เหลือเพียงตัวเดียว Queue Slide# 17

  18. คิววงกลม : Circular Queue คือคิวที่เปรียบเสมือนกับ ลิเนียร์อาเรย์ทั่ว ๆ ไป แตกต่างเพียงแต่ว่า คิววงกลมสามารถกลับไปใช้คิวหน้าได้ในกรณีที่หมดคิวปกติแล้ว Queue Slide# 18

  19. คิวแบบวงกลม 0 1 2 front = 2 rear = 2 C f) full queue 0 1 2 front = 1 rear = 0 D C กรณีคิวเต็ม กำหนดให้ rear ไปชี้ที่จุดเริ่มต้นใหม่ (0) เพื่อสามารถเพิ่ม D เข้าไปได้ g) enqueue D Queue Slide# 19

  20. Enqueue of Circular Queue addq ( int item ) { if ( ( rear == MAX - 1 && front == 0 ) || ( rear + 1 == front ) ) { printf ( "\nQueue is full" ) ; return ; } if ( rear == MAX - 1 ) rear = 0 ; else rear++ ; arr[rear] = item ; if ( front == -1 ) front = 0 ; } แสดงข้อความว่า “คิวเต็ม” เช่น กรณี h) กรณี g) คิวเต็ม เมื่อต้องการเพิ่มข้อมูลเข้าไปอีก ให้กำหนด rear ไปชี้ที่จุดเริ่มต้นใหม่ Queue Slide# 20

  21. เพิ่มข้อมูลในคิวแบบวงกลมเพิ่มข้อมูลในคิวแบบวงกลม 0 1 2 0 1 2 front = 1 rear = 0 front = 2 rear = 1 D C D E C g) enqueue D h) enqueue E Queue Slide# 21

  22. Dequeue of Circular Queue delq( ) { int data ; if ( front == -1 ) { printf ( "\nQueue is Empty" ) ; return NULL ; } else { data = arr[front] ; if ( front == rear ) front = rear = -1 ; else { if ( front == MAX - 1 ) front = 0 ; else front++ ; } } return data ; } กรณี k) ลบคิวที่เหลือเพียงตัวเดียว กรณี i) ลบคิวที่ช่องความจำสุดท้าย กำหนดให้ front วนไปชี้ที่จุดเริ่มต้นใหม่ Queue Slide# 22

  23. ลบข้อมูลในคิวแบบวงกลมลบข้อมูลในคิวแบบวงกลม 0 1 2 0 1 2 front = 2 rear = 1 front = 0 rear = 1 D E C D E h) enqueue E i) dequeue C 0 1 2 0 1 2 front = 1 rear = 1 front = -1 rear = -1 E j) dequeue D k) dequeue E Queue Slide# 23

  24. Chapter 4 Stack and Queue สรุป ในบทแสดงโครงสร้างข้อมูล 2 ชนิด สแตก และ คิว ความแตกต่างของโครงสร้างใน การจัดเก็บ และขบวนการลบ การแทรกข้อมูล การประยุกต์ใช้ในเรื่องการจัดลำดับการทำงานสมการ ทางคณิตศาสตร์ ในเรื่องการแก้สมการ อินฟิก ด้วย พรีฟิก และโพสฟิก

  25. Home work 1. จงอธิบายถึงสิ่งที่เหมือนกันและสิ่งที่แตกต่างกันระหว่างสแตกกับคิว 2. “ท็อปของสแตก” คืออะไร จงอธิบาย 3. จงอธิบายถึงสิ่งที่เหมือนกันและสิ่งที่แตกต่างกันระหว่างคิวเส้นตรงกับคิววงกลม 4. จงเปรียบเทียบข้อดี ข้อเสียของโครงสร้างข้อมูลสแตก คิววงกลม และคิวเส้นตรง 5. คิวขนาด 7 ค่า มีรายการต่อไปนี้ Front = 2, Rear = 6, Queue [ ]= {null, null, “ขนุน”, “ส้มโอ”, “แตงโม”, “ฝรั่ง”, null} จงอธิบายผลของคิวแบบวงกลม โดยมีค่าเริ่มต้นตำแหน่งที่ 0 รวมทั้ง Front และ Rear เมื่อมีการกระทำต่อไปนี้

  26. Home work ก. เพิ่มมะม่วง ข. ลบ 2 รายการออกจากคิว ค. เพิ่ม “ทุเรียน” ลงในคิว ง. เพิ่ม “องุ่น” ลงในคิว จ. ลบ 2 รายการออกจากคิว ฉ. เพิ่ม “ละมุด” ลงในคิว

  27. Home work 6. จงเขียนแผนภาพและค่าของตัวแปรของคิวที่มีสมาชิกเป็นเลขจำนวนเต็มและสร้างด้วยลิงค์ลิสต์ เมื่อมีการดำเนินการดังนี้ ก. สร้างคิวว่าง ข. เพิ่ม 5 และ 8 ลงในคิว ค. นำข้อมูลออกจากคิว 1 ค่า ง. เพิ่มข้อมูลในคิวอีก 5 ค่า จ. นับจำนวนสมาชิกในคิว

More Related