Để sử dụng cấu trúc dữ liệu mảng mơ tả Queue người ta dùng hai chỉ số là Front và
Rear để đánh dấu vị trí đầu và cuối của hàng đợi trong mảng. Nếu mảng tính từ chỉ số 0 thì ban đầu chúng ta khởi tạo Rear = -1 và Front = 0.
• Để thêm một phần tử vào Queue, ta tăng Rear lên 1 và đưa nĩ vào phần tử thứ Rear.
• Để loại một phần tử khỏi Queue, ta lấy giá trị ở vị trí Front và tăng chỉ số này lên 1.
• Khi Rear tăng lên hết khoảng chỉ số của mảng thì mảng đầy, khi đĩ ta khơng thể thêm vào mảng được nữa.
• Khi Front > Rear ⇒ Queue = {∅}.
Tương tự như phần Stack ở đây sẽ xây dựng một cấu trúc Queue chứa các phần tử cĩ kiểu dữ liệu là Data, Data là kiểu dữ liệu do người dùng định nghĩa cĩ thể số nguyên, thực, ký tự hoặc một cấu trúc dữ liệu nào đĩ tùy ý.
Khai báo cấu trúc Queue dùng mảng:
#define MAX 100 typedef struct {
int Front; // chỉ đến vị trí đầu của queue
int Rear; // chỉ đến vị trí cuối của queue
Data Q[MAX]; // mảng dữ liệu cần lưu trữ
} Queue;
Trong cấu trúc này trường Front chỉ đến vị trí đầu của Queue cịn Rear chỉ đến vị trí cuối của Queue. Ban đầu khi Queue được khởi tạo rỗng thì Rear = -1 và Front = 0.
Các thao tác trên cấu trúc Queue:
void Insert(Queue &queue, Data x): Đưa phần tử x vào cuối Queue Data Remove(Queue &queue): Lấy một phần tử ở đầu Queue int IsEmpty(Queue queue): Kiểm tra xem Queue cĩ rỗng hay khơng int IsFull(Queue queue): Kiểm tra xem Queue đầy hay khơng. void InitQueue(Queue &queue): Khởi tạo Queue.
#define TRUE 1 #define FALSE 0
void Insert(Queue &queue, Data x) {
queue.Rear++; // tăng Rear lên 1
if (IsFull(queue))
printf(“Queue full!”); else
queue.Q[queue.Rear] = x; }
Data Remove(Queue &queue) { Data x; if (IsEmpty(queue)) printf(“Queue empty!”); else x = queue.Q[queue.Front++]; return x; }
int IsEmpty(Queue queue) {
if (queue.Front > queue.Rear) return TRUE;
return FALSE; }
int IsFull(Queue queue) {
if (queue.Rear == MAX) return TRUE; return FALSE; }
void InitQueue(Queue &queue) {
queue.Rear = -1; queue.Front = 0; }