You are on page 1of 19

Phân tích


thiết kế hệ
thống

Nhóm 2
Nguyễn Nghĩa Ninh Trần việt Tú
(Nhóm trưởng)

Nguyễn Đức Nam Ngô Văn Long

2
Chủ đề:
Queue ( hàng đợi )
Nội dung

Biểu diễn
Khái niệm .
.

Các hoạt động cơ Ứng dụng


bản
. .
1.Khái niệm
Cấu trúc dữ liệu hàng đợi (Queue) là gì ?
Hàng đợi (Queue) là một cấu trúc dữ liệu trừu tượng
Đặc điểm của hàng đợi là FIFO (first in first out) - có nghĩa là vào trước ra
trước
Khác với ngăn xếp, hàng đợi là mở ở cả hai đầu. Một đầu luôn luôn
được sử dụng để chèn dữ liệu vào (hay còn gọi là sắp vào hàng)
và đầu kia được sử dụng để xóa dữ liệu (rời hàng). Cấu trúc dữ
liệu hàng đợi tuân theo phương pháp First-In-First-Out, tức là dữ
liệu được nhập vào đầu tiên sẽ được truy cập đầu tiên.
2. Biểu
diễn

6
Biểu diễn cấu trúc dữ liệu hàng đợi (Queue)
Chúng ta có thể truy cập cả hai đầu của hàng đợi:

Mảng Con trỏ


(Array) (Pointer)
Tương tự như
CTDL ngăn xếp, 01 03
thì CTDL hàng
02 04
đợi cũng có thể
được triển khai Danh sách Cấu trúc
bởi liên kết Struct)
(Link list)
3.
Các hoạt
động cơ bản
8
CTDL hàng đợi có thể liên quan đến việc khởi tạo hàng
đợi, sử dụng dữ liệu trên hàng đợi và sau đó là xóa dữ
liệu khỏi bộ nhớ.

Enqueue() Dequeue() Peek () isFull() isEmpty()

Thêm hay Xóa một Lấy phần tử Kiểm tra Kiểm tra
lưu trữ một phần tử từ ở đầu hàng xem hàng xem hàng
phần tử vào hàng đợi đợi mà đợi là đầy đợi là trống
hàng đợi không xóa hay không hay không
phần tử này
Hoạt động Enqueue()
Bởi vì CTDL hàng đợi duy trì hai con trỏ dữ liệu: front và rear, do đó các hoạt
động của loại CTDL này khá phức tạp so với ngăn xếp.
Dưới đây là các bước để Enqueue (chèn) dữ liệu vào trong hàng đợi:

Kiểm tra hàng đợi có


đầy hay không
01

02 Nếu hàng đợi là đầy, tiến


trình bị lỗi và bị thoát

Nếu hàng đợi không đầy, tăng con trỏ


rear để trỏ tới vị trí bộ nhớ trống tiếp
03
theo
04 Thêm phần tử dữ liệu vào vị trí con
trỏ rear đang trỏ tới trong hàng đợi

Trả về Success 05
11
Hoạt động Dequeue()
Việc truy cập dữ liệu từ hàng đợi là một tiến trình gồm hai tác vụ: truy
cập dữ liệu tại nơi con trỏ front đang trỏ tới và xóa dữ liệu sau khi đã
truy cập đó.
Các bước thực hiện: Kiểm tra hàng đợi có 1
trống hay không

Nếu hàng đợi là trống, 2


tiến trình bị lỗi và thoát

Nếu hàng đợi không


trống, truy cập dữ liệu tại 3
nơi con trỏ front đang trỏ

Tăng con trỏ font để trỏ 4


tới vị trí chứa phần tử
tiếp theo
5
Trả về
Success
Phương thức Peek()
Lấy phần tử từ ở đầu hàng đợi mà không xóa phần tử này
Giống như trong CTDL ngăn xếp, hàm này giúp chúng ta quan sát dữ
liệu tại đầu của hàng đợi.
Phương thức isFull()
Lấy phần tử từ ở đầu hàng đợi mà không xóa phần tử này
Nếu khi chúng ta sử dụng mảng 1 chiều để triển khai, chỉ cần kiểm tra con trỏ
rear có tiến đến giá trị MAXSIZE hay không để xác định là hàng đợi đầy hay
không. Trong trường hợp triển khai hàng đợi sử dụng Danh sách liên kết vòng,
giải thuật cho hàm isFull() sẽ khác
Giống như trong CTDL ngăn xếp, hàm này giúp chúng ta quan sát dữ liệu tại
đầu của hàng đợi.
Sự triển khai của hàm:
1 bool isfull() {
2   if(rear == MAXSIZE - 1)
3      return true;
4   else
5      return false;
6}
15
Phương thức
isEmpty()
Nếu giá trị của front nhỏ hơn Min hoăc 0 tức là hàng đợi vẫn
chưa được khởi tạo, vì thế hàng đợi trống.
4. Ứng
dụng

17
* Hàng đợi được sử dụng khi lập lịch CPU.
Khi có nhiều tiến trình cùng yêu cầu CPU, một số thuật toán lập
lịch phức tạp được sử dụng cùng với hàng đợi để phân phối thời
gian xử lí của CPU cho tiến trình. Khi dữ liệu được truyền đồng
bộ giữa các tiến trình, hàng đợi cũng được dùng để đồng bộ hóa
dữ liệu này.

* Khi in ấn, các tài liệu cần in đưcọ tải vào một bộ nhớ đệm. Sau
đó lần lượt đẩy ra bộ nhớ đệm riêng của máy in. Cơ chế này cho
phép đặt nhiều lệnh in vào một hàng đợi, giúp người dùng không
phải chờ kết thúc từng lệnh để bắt đầu in lệnh tiếp theo.
Thanks!
Any questions?

19

You might also like