m ột danh sách (cuối hàng đợi) và việc lấy ra một phần tử được th ực hiện ở cuối danh sách (đầu hàng).. Hàng đợi còn được gọi là danh sách FIFO (First In First Out).[r]
Trang 1Gi ảng viên: TS Ngo Huu Phuc
Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@gmail.com
Bài 13 Hàng đợi - Queues
Trang 2ội dung:
13.1 Khái ni ệm về hàng đợi.
13.2 Xây d ựng và sử dụng Queue.
13.3 Ví d ụ về hàng đợi.
Tham kh ảo:
1 Data structures and Algorithms Stacks.htm, Kyle Loudon Mastering
Algorithms,
2 Chapter 6 Stacks and Queues, Elliz Horowitz – Fundamentals of Data
Structures.
3 Chapter 3 Stacks and Queues, Deshpande Kakle – C and Data Structures.
ảng TS Nguyễn Nam Hồng
Trang 4sách, trong đó việc thêm một phần tử được thực hiện ở đầu
một danh sách (cuối hàng đợi) và việc lấy ra một phần tử được
thực hiện ở cuối danh sách (đầu hàng)
Hàng đợi còn được gọi là danh sách FIFO (First In First Out)
Trang 5 Đối với hàng đợi, số lượng ứng dụng có nhiều hơn cả ngăn
xếp
Ví dụ như máy tính thực hiện nhiệm vụ, có nhiều hàng đợi
được sử dụng:
hàng đợi máy in,
vi ệc truy xuất đĩa,
s ử dụng CPU.
chuy ển đổi từ Infix sang Prefix.
Phần tử đầu hàng đợi được phục vụ trước, phần tử này thường
gọi là front hay head Phần tử mới thêm vào được gọi là rear hay tail.
Trang 6Một hàng đợi các phần tử kiểu T là một chuỗi nối tiếp các phần
tử của T và kèm theo một số tác vụ sau:
1 T ạo mới một đối tượng hàng rỗng.
2 Thêm m ột phần tử mới vào hàng, giả sử hàng đợi chưa đầy
(ph ần tử dữ liệu mới luôn được thêm vào cuối hàng).
3 Lo ại một phần tử ra khỏi hàng, giả sử hàng chưa rỗng (phần tử
b ị loại là phần tử tại đầu hàng, thường là phần tử vừa được xử lý xong).
4 Xem ph ần tử tại đầu hàng (phần tử sắp được xử lý).
Trang 7Ho ạt động của hàng đợi
Trang 8 Thành ph ần dữ liệu cho Queue:
MaxEntry: Kích thước của Queue.
QueueEntry: Kiểu dữ liệu dành cho mỗi phần tử trong Queue.
M ột số phương thức cơ bản của Queue:
QueueClassL();
int isEmpty();
int isFull();
int Dequeue(QueueEntry *value);
int Enqueue(QueueEntry value);
int Peek(QueueEntry *value);
void makeEmpty();
Trang 9Khai báo l ớp Queue (dạng tuyến tính):
template< class QueueEntry> // L ớp mẫu cho kiểu dữ liệu của Queue
public :
QueueClassL(); // Hàm t ạo của lớp, khởi tạo thông tin cho Queue
int isEmpty(); // Queue r ỗng → 1, ngược lại → 0
int isFull(); // Queue đầy → 1, ngược lại → 0
int Dequeue(QueueEntry *value); // L ấy 1 phần tử Queue
int Enqueue(QueueEntry value); // Thêm 1 ph ần tử vào Queue
int Peek(QueueEntry *value); // Xem giá tr ị tại đầu của Queue
void makeEmpty(); // Làm r ỗng Queue
private :
int front, rear; // front: đầu Queue, rear: cuối Queue
QueueEntry entry[MaxEntry]; // M ảng lưu thông tin của Queue
Trang 10template< class QueueEntry>
QueueClassL<QueueEntry>
::QueueClassL( void ) {
front=rear=-1;
}
template< class QueueEntry>
int QueueClassL<QueueEntry>
::isEmpty() {
if (front==rear)
return 1;
else return 0;
}