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]
(1)Giảng viên: TS Ngo Huu Phuc Tel: 0438 326 077 Mob: 098 5696 580
Email:
Cấu trúc liệu giải thuật
(2)ội dung:
13.1 Khái niệm hàng đợi.
13.2 Xây dựng sử dụng Queue.
13.3 Ví dụ hàng đợi. Tham khảo:
1. Data structures and Algorithms Stacks.htm, Kyle Loudon Mastering
Algorithms,
2. Chapter Stacks and Queues, Elliz Horowitz – Fundamentals of Data
Structures.
(3)(4)sách, việc thêm phần tử thực đầu
một danh sách (cuối hàng đợi) việc lấy phần tử thực cuối danh sách (đầu hàng).
Hàng đợi gọi danh sách FIFO (First In First Out).
(5) Đối với hàng đợi, số lượng ứng dụng có nhiều ngăn xếp.
Ví dụ máy tính thực 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 phục vụ trước, phần tử thường gọi front hay head Phần tử thêm vào gọi rear
(6)Một hàng đợi phần tử kiểu T chuỗi nối tiếp phần tử T kèm theo số tác vụ sau:
1. Tạo đối tượng hàng rỗng.
2. Thêm một phần tử vào hàng, giả sử hàng đợi chưa đầy
(phần tử liệu thêm vào cuối hàng).
3. Loại phần tử khỏi hàng, giả sử hàng chưa rỗng (phần tử
bị loại phần tử đầu hàng, thường phần tử vừa xử lý xong).
(7)(8) Thành phần liệu cho Queue:
MaxEntry: Kích thước Queue.
QueueEntry: Kiểu liệu dành cho phần tử Queue.
Một số phương thức Queue:
QueueClassL();
int isEmpty();
int isFull();
int Dequeue(QueueEntry *value);
int Enqueue(QueueEntry value);
int Peek(QueueEntry *value);
(9)Khai báo lớp Queue (dạng tuyến tính):
template<class QueueEntry> // Lớp mẫu cho kiểu liệu Queue
class QueueClassL{ // Định nghĩa tên lớp
public:
QueueClassL(); // Hàm tạo 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 phần tử Queue
int Enqueue(QueueEntry value); // Thêm phần tử vào Queue
int Peek(QueueEntry *value); // Xem giá trị đầu Queue
void makeEmpty(); // Làm rỗng Queue
private:
(10)template<class QueueEntry> QueueClassL<QueueEntry>
::QueueClassL(void) {
front=rear=-1; }
template<class QueueEntry>
int QueueClassL<QueueEntry> ::isEmpty()
{
if(front==rear) return 1;