Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 19 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
19
Dung lượng
280,5 KB
Nội dung
HÀNG ĐỢI
QUEUE
KHÁI NIỆM
Hàng đợi là một danh sách tuyến tính,
trong đó:
Việc bổ sung một phần tử vào hàngđợi được
thực hiện ở một đầu gọi là cuối hàng
Việc loại bỏ một phần tử ra khỏi hàngđợi được
thực hiện ở đầu kia gọi là đầu hàng.
Danh sách kiểu hàngđợi còn gọi là danh
sách FIFO – First In First Out.
KHÁI NIỆM
A B C D E F
Đầu hàng Cuối hàng
Loại bỏ
Bổ sung
Hình vẽ biểu diễn hàng đợi
BIỂU DIỄN CẤUTRÚCDỮ LIỆU
Giả sử các phần tử của HĐ có kiểu dữliệu là Item, độ dài của HĐ
là N
HĐ được lưu trong BNMT bởi mảng 1 chiều (lưu trữ kế tiếp).
Mỗi phần tử của mảng lưu một phần tử của hàng đợi
Hàng đợi được biểu diễn là một cấutrúc có 3 thành phần:
Thành phần thứ nhất là mảng E lưu các phần tử của HĐ
Thành phần thứ hai là biến front lưu chỉ số của phần tử đầu hàng
Thành phần thứ ba là biến rear lưu chỉ số của phần tử cuối hàng
Cấu trúcdữliệu như sau:
BIỂU DIỄN CẤUTRÚCDỮ LIỆU
A B C D E F
0 1 2 3 4 5 6 7 8 9 = Max-1
front = 2 rear = 7
E
Mảng lưu trữ hàng đợi
BIỂU DIỄN CẤUTRÚCDỮ LIỆU
#define Max N
//Định nghĩa kiểu Item
struct Queue{
int front, rear;
Item E[Max];
};
Queue Q;
/* Q.rear = -1 -> hàngđợi rỗng,
Q.rear = Max-1 -> Hàngđợi đầy */
CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI
void Initialize (Queue &Q)
{
Q.front = 0;
Q.rear = -1;
}
1. Khởi tạo hàngđợi rỗng
int Empty (Queue Q)
{
return (Q.rear == -1);
}
2. Kiểm tra hàngđợi rỗng
CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI
1 2 3 4 5 6 7 8 9
Max=10
front = 0 rear = -1
E
Biểu diễn hàngđợi rỗng
0
CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI
3. Kiểm tra hàngđợi đầy
int Full (Queue Q)
{
reurn (Q.rear == Max-1);
}
A B C D E F G H
1 2 3 4 5 6 7 8 9
10 = Max
front = 2 rear = 9
E
Biểu diễn hàngđợi đầy
0
CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI
A B C D E F
1 2 3 4 5 6 7 8 9
10 = Max
front = 2 rear = 7
E
Mảng lưu trữ hàng đợi
4. Bổ sung một phần tử vào cuối hàng đợi
G
0
X
[...]... Mảng lưu trữ hàngđợi 9 CÁC PHÉP TOÁN TRÊN HÀNGĐỢI 5 Lấy ra một phần tử ở đầu hàngđợi 0 E Trường hợp hàngđợi có 1 phần tử 1 2 3 4 5 10 = Max 6 7 B rear = 3 X front = 3 Mảng lưu trữ hàngđợi 8 9 CÁC PHÉP TOÁN TRÊN HÀNGĐỢI 5 Lấy ra một phần tử ở đầu hàngđợi Trường hợp hàngđợi có 1 phần tử 10 = Max 0 1 2 3 4 5 6 7 8 9 E B front = 0 rear = -1 X Hàngđợi rỗng CÁC PHÉP TOÁN TRÊN HÀNGĐỢI 5 Lấy...CÁC PHÉP TOÁN TRÊN HÀNGĐỢI 4 Bổ sung một phần tử vào cuối hàngđợi 10 = Max 0 E 1 2 3 4 5 6 7 A B C D E 8 9 F X front = 2 Mảng lưu trữ hàngđợi rear = 8 G CÁC PHÉP TOÁN TRÊN HÀNGĐỢI 4 Bổ sung một phần tử vào cuối hàngđợi 0 E 1 2 3 4 5 6 A B C D E 7 F front = 2 Mảng lưu trữ hàngđợi 8 10 = Max 9 G rear = 8 CÁC PHÉP TOÁN TRÊN HÀNGĐỢI 4 Bổ sung một phần tử vào cuối hàngđợi int AddQ(Queue &Q,... hiện bổ sung một phần tử vào cuối hàng, hàm trả về 1 nếu bổ sung thành công, ngược lại hàm trả về 0 CÁC PHÉP TOÁN TRÊN HÀNGĐỢI 5 Lấy ra một phần tử ở đầu hàngđợi 0 E Trường hợp hàngđợi có nhiều hơn 1 phần tử 1 2 3 4 5 6 7 A B C D E 10 = Max 8 F X front = 2 rear = 7 Mảng lưu trữ hàngđợi 9 CÁC PHÉP TOÁN TRÊN HÀNGĐỢI 5 Lấy ra một phần tử ở đầu hàngđợi Trường hợp hàngđợi có nhiều hơn một phần... Lấy ra một phần tử ở đầu hàngđợi int DeleteQ(Queue &Q, Item &X) { if (Empty(Q)) return 0; else { X = Q.E[Q.front]; if (Q.front == Q.rear) Initialize(Q); else Q.front = Q.front + 1; return 1; } } Hàm DeleteQ thực hiện lấy ra một phần tử ở đầu hàng, hàm trả về 1 nếu lấy ra thành công, ngược lại hàm trả về 0 ỨNG DỤNG Viết chương trình: Nhập một chuỗi ký tự, sử dụng hàng đợi, việc nhập kết thúc khi . phần tử cuối hàng Cấu trúc dữ liệu như sau: BIỂU DIỄN CẤU TRÚC DỮ LIỆU A B C D E F 0 1 2 3 4 5 6 7 8 9 = Max-1 front = 2 rear = 7 E Mảng lưu trữ hàng đợi BIỂU DIỄN CẤU TRÚC DỮ LIỆU #define. Q.rear = -1 -& gt; hàng đợi rỗng, Q.rear = Max-1 -& gt; Hàng đợi đầy */ CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI void Initialize (Queue &Q) { Q.front = 0; Q.rear = -1 ; } 1. Khởi tạo hàng đợi rỗng int. == -1 ); } 2. Kiểm tra hàng đợi rỗng CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI 1 2 3 4 5 6 7 8 9 Max=10 front = 0 rear = -1 E Biểu diễn hàng đợi rỗng 0 CÁC PHÉP TOÁN TRÊN HÀNG ĐỢI 3. Kiểm tra hàng đợi