Professional Documents
Culture Documents
2
Nội dung
4. Cài đặt hàng đợi
– Cài đặt hàng đợi bằng danh
sách liên kết
– Cài đặt hàng đợi bằng mảng
5. Ví dụ minh họa
3
Giới thiệu QUEUE
• Queue là một cấu trúc dữ liệu trừu tượng
hoạt động theo nguyên lý FIFO (First-In-
First-Out).
Người xếp hàng đầu tiên sẽ là người đầu tiên được mua vé
4
Giới thiệu QUEUE
• Cũng giống như stack thì queue cũng là
cấu trúc dữ liệu tuyến tính được truy cập
hạn chế.
• Có số phần tử động (có thể dễ dàng thay
đổi kích thước)
• Mỗi queue có hai điểm truy cập là
– Front: Là điểm truy cập tới các phần tử cũ
nhất. (Còn gọi là head)
– Rear: Là điểm truy cấp tới các phần tử mới
nhất. (Còn gọi là tail)
5
Tổ chức danh sách hàng đợi
• Một đầu dùng để thêm các phần tử vào
danh sách hàng đợi gọi là rear
• Một đầu dùng để xóa các phần tử ra khỏi
danh sách hàng đợi gọi là front
6
Các thao tác cơ bản
• Hàng đợi có hai thao tác cơ bản:
– Enqueue: Thêm một phần tử vào cuối danh
sách hàng đợi.
– Dequeue: Xóa một phần tử ở đầu danh sách
hàng đợi
7
Các thao tác cơ bản
• Ngoài ra còn một số thao tác như:
– isEmpty: Kiểm tra hang đợi có rỗng hay
không?
– Peek: Lấy thông tin phần tử ở đầu hàng đợi
mà không xóa nó khỏi hàng đợi.
– Count: Hàm lấy kích thước hàng đợi (Hay số
lượng phần tử đang có trong hàng đợi)
8
Ứng dụng của queue
• Ứng dụng trong các bài toán lập lịch của
hệ điều hành (CPU Scheduling) và tác vụ
truy xuất đĩa (Disk Scheduling).
• Xử lý các ngắt (interrupt) trong hệ thống
thời gian thực.
• Khi dữ liệu được truyền không đồng bộ
giữa hai tiến trình (process) thì queue
được dùng để đồng bộ nó. Ví dụ: print
spooling, …
9
Ứng dụng của queue
• Hai kỹ thuật tìm kiếm trên cây tìm kiếm
chúng ta có thể dùng stack và queue:
– Tìm kiếm theo chiều sâu sử dụng stack
(Depth-First Search)
– Tìm kiếm theo chiều rộng sử dụng queue
(Breadth-First Search)
• Kết hợp cả queue và stack trong chuyển
đổi biểu thức: tiền tố, trung tố và hậu tố từ
đó chúng ta có thể định trị được biểu thức
10
Nội dung
1. Khái niệm hàng đợi
– Giới thiệu hàng đợi
– Ứng dụng của hàng đợi
2. Hàng đợi trong Java API
3. Kiểu dữ liệu trừu tượng hàng đợi
11
Hàng đợi trong JAVA API
• Java Collections API không nhất quán
trong cách thực thi collection hàng đợi
(queue).
• Có một số điểm khác biệt trong cách ngăn
xếp và hàng đợi được java triển khai thực
thi:
– Java Collections API cung cấp lớp
java.util.Stack để thực thi collection ngăn xếp,
trong khi đó hàng đợi không được cài đặt bằng
lớp Queue mà chỉ cung cấp interface Queue.
12
Hàng đợi trong JAVA API
– Lớp Stack cung cấp cách cài đặt các thao tác
truyền thống như Push, Pop và Peek. Trong
khi đó interface Queue<E> không cài đặt thao
tác truyền thống như Enqueue, Dequeue và
First.
– Thay vào đó interface Queue<E> định nghĩa
hai cách khác nhau để thêm phần tử vào
queue và hai cách khác nhau để loại bỏ phần
tử ra khỏi queue và cung cấp một phương
thức tương đương cho các khái niệm như first
hay peek của queue.
13
Hàng đợi trong JAVA API
• Interface Queue<E> cung cấp hai phương
thức khác nhau để thêm một phần tử vào
hàng đợi:
– add(E e): Thao tác này sẽ thêm phần tử vào hàng
đợi nếu dung lượng bộ nhớ đang có sẵn và ném
ra ngoại lệ illegalStateException nếu không gian
bộ nhớ không có sẵn. Nếu thêm thành công, giá
trị trả về là true.
– offer(E e): Thao tác này sẽ thêm phần tử vào
hàng đợi nếu đủ không gian nhớ. Nếu thêm thành
công, giá trị trả về là true. Ngược lại là false.
14
Hàng đợi trong JAVA API
• Interface Queue<E> cũng cung cấp hai
phương thức khác nhau để xóa một phần tử
ra khỏi hàng đợi:
– poll(): Trả về phần tử và loại nó ra khỏi queue
hoặc trả về giá trị null nếu queue rỗng.
– remove(): Trả về phần tử và loại nó ra khỏi
queue. Nếu queue rỗng sẽ ném ra ngoại lệ.
• Các phương thức trong interface Queue<E>
được cài đặt rải rác không chỉ bởi một lớp
mà bởi nhiều lớp trong đó có LinkedList.
15
Nội dung
1. Khái niệm hàng đợi
– Giới thiệu hàng đợi
– Ứng dụng của hàng đợi
2. Hàng đợi trong Java API
3. Kiểu dữ liệu trừu tượng hàng đợi
16
Kiểu dữ liệu trừu tượng hàng đợi
17
Kiểu dữ liệu trừu tượng hàng đợi
• Cài đặt kiểu dữ liệu trừu tượng hàng đợi
18
Nội dung
4. Cài đặt hàng đợi
– Cài đặt hàng đợi bằng danh
sách liên kết
– Cài đặt hàng đợi bằng mảng
5. Ví dụ minh họa
19
Cài đặt hàng đợi bằng danh sách liên kết
20
Cài đặt hàng đợi bằng danh sách liên kết
21
Cài đặt hàng đợi bằng danh sách liên kết
22
Cài đặt hàng đợi bằng danh sách liên kết
23
Cài đặt hàng đợi bằng danh sách liên kết
24
Cài đặt hàng đợi bằng mảng
• Để cài đặt hàng đợi bằng mảng chúng ta quy định:
– Chỉ số của mảng bắt đầu từ 0, mỗi lần thêm thì thêm vào
cuối mảng nên chỉ số tăng lên một. Do vậy chỉ số rear
cũng tăng lên một. Để chuẩn bị cho việc thêm này phần tử
rear luôn nằm sau phần tử cuối cùng để khi thêm vào rear
cho tiện.
– Mỗi lần xóa sẽ xóa ở chỉ số trước tiên của mảng tại đầu
front.
• Tổ chức queue bằng mảng
25
Cài đặt hàng đợi bằng mảng
• Chúng ta sẽ sử dụng mảng vòng để cài
đặt queue
26
Cài đặt hàng đợi bằng mảng
• Các trường hợp xử lý
27
Cài đặt hàng đợi bằng mảng
28
Cài đặt hàng đợi bằng mảng
• Cài đặt class CircularArrayQueue thực thi
interface QueueADT:
public class CircularArrayQueue <E>
implements QueueADT<E>
{
//Các thuộc tính & phương thức định nghĩa ở đây
}
• Các thuộc tính:
29
Cài đặt hàng đợi bằng mảng
• Hàm tạo
30
Cài đặt hàng đợi bằng mảng
• Hàm mở rộng sức chứa cho mảng
31
Cài đặt hàng đợi bằng mảng
Hàm kiểm tra mảng rỗng Hàm số phần tử
32
Cài đặt hàng đợi bằng mảng
• Thêm phần tử vào đầu hàng đợi
33
Cài đặt hàng đợi bằng mảng
• Xóa phần tử ra khỏi hàng đợi
34
Nội dung
4. Cài đặt hàng đợi
– Cài đặt hàng đợi bằng danh
sách liên kết
– Cài đặt hàng đợi bằng mảng
5. Ví dụ minh họa
35
Ví dụ minh họa
• Cho danh sách những vũ công gồm cả
nam và nữ như sau: (Với M là nam và F là
nữ)
36
Ví dụ minh họa
• Hãy sử dụng hàng đợi để nhập vào máy
tính hai danh sách là nam riêng và nữ
riêng.
• Hãy ghép các cặp đôi theo thứ tự và đưa
ra màn hình. (Một cặp đôi gồm một nam
và một nữ)
37
Ví dụ minh họa
• Ta sử dụng một class Dancer để làm việc
với một vũ công như sau:
38
Ví dụ minh họa
• Hàm nhập dữ liệu vào cho bài toán
39
Ví dụ minh họa
• Hàm tạo ra hai hàng đợi nam và nữ
40
Ví dụ minh họa
• Hàm ghép cặp đôi vũ công
41
Ví dụ minh họa
• Chương trình chính
42
Ví dụ minh họa
• Kết quả:
43
Thảo luận
44