Outline – Nội dung Khái niệm Queue Các thao tác trên Queue Hiện thực Queue Ứng dụng của Queue... • Queue là một danh sách mà các đối tượng được thêm vào ở một đầu của danh sách và
Trang 1DATA STRUCTURE AND ALGORITHM
Trang 2Outline – Nội dung
Khái niệm Queue
Các thao tác trên Queue
Hiện thực Queue
Ứng dụng của Queue
Trang 3Resource - Reference
Slides adapted from David Matuszek, Marty Stepp
and Hélène Martin, edit by Dao Nam Anh
Major Reference:
• Robert Sedgewick, and Kevin Wayne, “Algorithms”
Princeton University, 2011, Addison Wesley
• Algorithm in C (Parts 1-5 Bundle)- Third Edition by
Robert Sedgewick, Addison-Wesley
• Cấu trúc dữ liệu và giải thuật, Đinh Mạnh Tường
• Giải thuật và lập trình, Lê Minh Hoàng, Đại Học
Sư Phạm, 2002
Trang 4• Queue là một danh sách mà các đối tượng được thêm vào ở
một đầu của danh sách và lấy ra ở một đầu kia của danh sách
• Việc thêm một đối tượng vào Queue luôn diễn ra ở cuối
Queue và việc lấy một đối tượng ra khỏi Queue luôn diễn ra
ở đầu Queue
• Việc thêm một đối tượng vào Queue hoặc lấy một đối tượng
ra khỏi Queue được thực hiện theo cơ chế FIFO (First In
First Out - Vào trước ra trước)
Trang 5Hàng đợi hỗ trợ các thao tác:
• Add - EnQueue(): Thêm đối tượng vào cuối
(rear) Queue
• Remove - DeQueue(): Lấy đối tượng ở đầu
(front) Queue ra khỏi Queue
• Peek: Examine the front element.
queue
front back
remove, peek
Trang 6Queue còn hỗ trợ các thao tác:
• isEmpty(): Kiểm tra xem hàng đợi có rỗng không
• Front(): Trả về giá trị của phần tử nằm ở đầu
hàng đợi mà không hủy nó Nếu hàng đợi rỗng thì
Trang 7Ứng dụng Hàng đợi
Xếp hàng đợi thang máy
Hàng xe ô tô tại trạm xăng
Hàng đợi các chương trình để chạy
Hàng đợi các gói tin gửi lên mạng
Trang 8Mô tả Queue bằng mảng
Có thể tạo một Queue bằng cách sử dụng một mảng 1 chiều theo kiểu xoay
vòng (coi phần tử an-1 kề với phần tử a0)
• Hàng đợi chứa tối đa N phần tử
• Phần tử ở đầu hàng đợi sẽ có chỉ số front
• Phần tử ở cuối hàng đợi sẽ có chỉ số rear
17 23 97 44
0 1 2 3 4 5 6 7
myQueue:
rear = 3front = 0
Trang 9Mô tả Queue bằng mảng
• A queue is a first in, first out (FIFO) data structure
• This is accomplished by inserting at one end (the rear) and
deleting from the other (the front)
• To insert: put new element in location 4, and set rear to 4
0 1 2 3 4 5 6 7
myQueue:
rear = 4front = 0
David Matuszek
Trang 10Mô tả Queue bằng mảng
• A queue is a first in, first out (FIFO) data structure
• This is accomplished by inserting at one end (the rear) and
deleting from the other (the front)
• To insert: put new element in location 4, and set rear to 4
• To delete: take element from location 0, and set front to 1
0 1 2 3 4 5 6 7
myQueue:
rear = 3front = 1
Trang 11Mô tả Queue bằng mảng
• Dùng mảng: Có xu hướng dời về cuối mảng
• Hai cách hiện thực:
Khi lấy một phần tử ra thì đồng thời dời ô lên một vị trí
Khi lấy một phần tử ra thì không dời ô lên:
17 23 97 44
Ban đầu:
rear = 3front = 0
Trang 12Mô tả Queue bằng danh sách vòng
• Dùng mảng lưu Hàng đợi với danh sách vòng
Trang 13Mô tả Queue bằng danh sách vòng
• Dùng mảng lưu Hàng đợi với danh sách vòng
• Tính: front = (front + 1) % myQueue.length;
và: rear = (rear + 1) % myQueue.length;
Trang 14Mô tả Queue bằng danh sách vòng
• Dùng mảng lưu Hàng đợi với danh sách vòng
Trang 15Mô tả Queue bằng danh sách vòng
• Dùng mảng lưu Hàng đợi với danh sách vòng
• Tính: front = (front + 1) % myQueue.length;
và: rear = (rear + 1) % myQueue.length;
Trang 16Mô tả Queue bằng danh sách vòng
• Dùng mảng lưu Hàng đợi với danh sách vòng
Trang 17Full and empty queues
Trang 18Full and empty queues: solutions
• Giải pháp 1: Dùng thêm 1 biến phụ
• Giải pháp 2: Giữ 1 ô trống: Coi như hàng đợi chỉ có n-1 ô
Trang 19Mô tả Queue bằng danh sách nối đơn
• Có thể tạo một hàng đợi sử dụng một DSLK đơn
• Phần tử đầu DSKL (phead) sẽ là phần tử đầu Queue
(front), phần tử cuối DSKL (ptail) sẽ là phần tử cuối
Queue (rear)
struct Node {
DataType data;
Node *pNext;
};
struct Queue {
Node *front, *rear;
Trang 20Mô tả Queue bằng danh sách nối đơn
• Tương tự như cài đặt Stack bằng danh sách nối đơn
kiểu LIFO, ta cũng không kiểm tra Queue tràn trong
trường hợp mô tả Queue bằng danh sách nối đơn kiểu
FIFO
Trang 21Discussion – Câu hỏi
•
https://sites.google.com/site/daonamanhedu/data-structure-algorithm