Là một dạng danh sách ñặc biệt mà việc 
thêm phần tử chỉ thực hiện tại một ñầu, gọi là
cuối hàng; việc loại bỏ phần tử thực hiện ở 
ñầu kia, gọi làñầu hàng.
 Làm việc theo nguyên tắc FIFO(First In First 
Out).
              
                                            
                                
            
 
            
                 15 trang
15 trang | 
Chia sẻ: Mr Hưng | Lượt xem: 1093 | Lượt tải: 0 
              
            Nội dung tài liệu Cấu trúc hàng đợi (queue), để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CẤU TRÚC HÀNG ĐỢI 
(QUEUE)
Bộ môn Công nghệ phần mềm
Khoa Công nghệ thông tin & Truyền thông
Đại học Cần Thơ
KHÁI NIỆM HÀNG ĐỢI
 Là một dạng danh sách ñặc biệt mà việc 
thêm phần tử chỉ thực hiện tại một ñầu, gọi là
cuối hàng; việc loại bỏ phần tử thực hiện ở 
ñầu kia, gọi là ñầu hàng.
 Làm việc theo nguyên tắc FIFO(First In First 
Out).
PHÉP TOÁN TRÊN HÀNG ĐỢI
 MAKENULL_QUEUE(Q): khởi tạo hàng ñợi 
rỗng.
 EMPTY_QUEUE(Q): kiểm tra hàng ñợi rỗng.
 FULL_QUEUE(Q): kiểm tra hàng ñợi ñầy.
 FRONT(Q): nội dung phần tử ñầu hàng.
 ENQUEUE(X,Q): thêm phần tử X vào cuối 
hàng ñợi Q.
 DEQUEUE(Q): xóa phần tử ở ñầu hàng ñợi.
CÀI ĐẶT HÀNG ĐỢI BẰNG MẢNG
 Mô hình lưu trữ:
 Khai báo:
#define . . . MaxLength
typedef ... ElementType;
typedef struct{
ElementType Elements[MaxLength];
int front, rear; 
} Queue;
Queue Q;
front rear
0 1 2 3 . maxlength-1 
CÀI ĐẶT HÀNG ĐỢI BẰNG MẢNG
 Hàng ñầy: front rear
0 1 2 3 . maxlength-1 
 Hàng tràn: front rear
0 1 2 3 . maxlength-1 
 Sử dụng bộ nhớ không hiệu quả. Phải xử lý 
hàng tràn.
CÀI ĐẶT HÀNG ĐỢI BẰNG MẢNG
 Xử lý hàng tràn bằng mảng tịnh tiến:
front rear
0 1 2  maxlength-1 
 Xử lý hàng tràn bằng mảng vòng:
front rear
CÀI ĐẶT HÀNG ĐỢI BẰNG MẢNG
 Khởi tạo hàng rỗng
void MakeNull_Queue(Queue *Q){
Q->Front = -1;
Q->Rear = -1;
} 
CÀI ĐẶT HÀNG ĐỢI BẰNG MẢNG
 Kiểm tra hàng rỗng
int Empty_Queue(Queue Q){
return Q.Front == -1;
}
CÀI ĐẶT HÀNG ĐỢI BẰNG MẢNG
 Kiểm tra hàng ñầy
int Full_Queue(Queue Q){
return (Q.Rear-Q.Front+1) % MaxLength == 0;
}
CÀI ĐẶT HÀNG ĐỢI BẰNG MẢNG
 Nội dung phần tử ñầu hàng:
ElementType Front(Queue Q){
if (Empty_Queue (Q)) printf(“Loi ! Hang doi rong”);
else
return Q.Element[Q.Front];
} 
CÀI ĐẶT HÀNG ĐỢI BẰNG MẢNG
 Xóa phần tử ñầu hàng:
CÀI ĐẶT HÀNG ĐỢI BẰNG MẢNG
 Xóa phần tử ñầu hàng:
void DeQueue(Queue *Q){
if (Empty_Queue(*Q)) printf("Loi: Hang rong!");
else
if (Q->Front == Q->Rear) 
MakeNull_Queue(Q);
else Q->Front=(Q->Front+1) % 
MaxLength;
} 
CÀI ĐẶT HÀNG ĐỢI BẰNG MẢNG
 Thêm phần tử vào cuối hàng:
CÀI ĐẶT HÀNG ĐỢI BẰNG MẢNG
 Thêm phần tử vào cuối hàng:
void EnQueue(ElementType X,Queue *Q){
if (Full_Queue(*Q)) printf("Loi: Hang day!");
else{
if (Empty_Queue(*Q)) Q->Front = 0;
Q->Rear = (Q->Rear+1) % MaxLength;
Q->Elements[Q->Rear] = X;
}
} 
CÀI ĐẶT HÀNG ĐỢI BẰNG DSLK
front rear
            Các file đính kèm theo tài liệu này:
 hangdoi_719.pdf hangdoi_719.pdf