Queue trong C/C++ là gì? Các thao tác trên Queue trong C/C++ thường dùng

Queue hay còn gọi là hàng đợi là một cấu trúc giải thuật thường gặp trong lập trình. Cùng VHĐS tìm hiểu xem cấu trúc Queue trong C++ là gì và ứng dụng của nó trong lập trình cũng như trong cuộc sống nhé!

Cấu trúc dữ liệu hàng đợi (Queue) là gì?

Queue (hàng đợi) là một vật chứa các đối tượng làm việc. Queue luôn mở ở cả hai đầu. Một đầu dùng để thêm một đối tượng vào hàng, đầu kia dùng để lấy một đối tượng ra khỏi hàng.

Việc thêm hoặc bớt đối tượng tuân thủ theo nguyên tắc FIFO (First In First Out – vào trước xếp trước), nghĩa là đối tượng nào được thêm vào đầu tiên sẽ được truy xuất đầu tiên.

Queue hoạt động theo nguyên tắc FIFO
Queue hoạt động theo nguyên tắc FIFO

Trong thực tế, hàng đợi không hề xa lạ mà luôn hiện diện xung quanh chúng ta. Ví dụ phổ biến nhất về hàng đợi là xếp hàng cho các mục đích khác nhau (xếp hàng qua cổng soát vé, xếp hàng mua vé xem phim,….), trong đó đối tượng nào xếp hàng trước sẽ được phục vụ trước và thoát ra khỏi hàng trước.

Ví dụ về hàng đợi
Ví dụ về hàng đợi

Các hàm và thao tác cơ bản của Queue

Khai báo thư viện Queue

#include <queue>

Khai báo biến

  • queue[…]: hàng đợi, là mảng một chiều chứa các biến đợi.
  • rear: chỉ số phần tử ở cuối hàng đợi queue. Khởi tạo rear = -1.
  • front: chỉ số phần tử ở đầu hàng đợi queue. Khởi tạo front = 0.
  • count: đếm số lượng phần tử trong hàng đợi queue. Khởi tạo count = 0.

Thao tác Peek()

Peek() là thao tác giúp lấy phần tử ở đầu hàng mà không xóa phần tử ấy đi.

Thap tác peek
Thap tác peek

Code minh họa:

kiểu dữ liệu peak()

{

return queue[front];

{

Phương thức IsFull()

IsFull giúp kiểm tra hàng đợi đã đầy hay chưa?

Phương thức IsFull
Phương thức IsFull

Code minh họa:

bool isFull()

{

if (count == max)

return true;

return false;

}

Phương thức IsEmpty()

IsFull giúp kiểm tra hàng đợi có trống hay không?

Phương thức IsEmpty
Phương thức IsEmpty

Code minh họa:

bool isEmpty()

{

if (count == max)

return true;

return false;

}

Các giải thuật hàng đợi queue

Giải thuật Enqueue

Enqueue() là thao tác thêm phần tử vào cuối hàng đợi.

Quy trình:

  • Bước 1: Kiểm tra queue có đầy hay không.
  • Bước 2: Nếu queue đầy, thoát khỏi queue.
  • Bước 3: Nếu queue chưa đầy, tăng rear tới vị trí trống tiếp theo (rear + 1).
  • Bước 4: Gán dữ liệu vào vị trí rear trong hàng đợi.
Giải thuật Enqueue
Giải thuật Enqueue

Code minh họa:

void enqueue(int data)

{

if(!isFull())

{

rear++;

count ++;

queue[rear] = data;

}

else cout << Queue is full”;

}

Giải thuật Dequeue

Dequeue() Xóa phần tử ra khỏi hàng đợi

Quy trình:

  • Bước 1: Kiểm tra queue có trống hay không?
  • Bước 2: Nếu queue trống, thoát khỏi queue.
  • Bước 3: Nếu queue không trống, tăng front tới vị trí chứa đối tượng tiếp theo (front + 1).
Giải thuật Dequeue
Giải thuật Dequeue

Code minh họa:

void dequeue()

{

if(!isEmpty())

{

count–;

front++;

}

else

cout << “Queue is empty”;}

Một số ứng dụng của hàng đợi Queue

Trong in ấn, các tài nguyên khi in ấn sẽ được lưu trữ trong một bộ nhớ đệm sau đó được đẩy ra bộ đệm riêng của máy in. Cơ chế này cho phép đặt nhiều lệnh in vào hàng đợi. Nhờ cơ chế này mà người dùng không phải chờ kết thúc từng lệnh để bắt đầu lệnh tiếp theo.

Ứng dụng của queue trong in ấn
Ứng dụng của queue trong in ấn

Giải thuật tìm kiếm theo chiều rộng (Breadth-First search) là thuật toán xét duyệt, tìm kiếm trên cây hoặc đồ thị theo chiều rộng. Giải thuật này sử dụng hàng đợi queue để ghi nhớ đỉnh liền kề để bắt đầu việc tìm kiếm khi không gặp được đỉnh liền kề trong bất kỳ vòng lặp nào.

Ứng dụng của queue vào giải thuật Breadth-First search
Ứng dụng của queue vào giải thuật Breadth-First search

Xem thêm:

Trên đây là toàn bộ kiến thức cơ bản về Queue trong C/C++ và các thao tác cơ bản thường dùng. Hi vọng bạn đã có những kiến thức cơ bản về Queue và có thể thực hành về Queue qua một vài ví dụ cụ thể. Cảm ơn các bạn đã theo dõi bài viết này!

0/5 (0 Reviews)

BÀI VIẾT THỊNH HÀNH

Khương Linh
Khương Linh
Chào mọi người, mình là Khương Linh. Mình đam mê chia sẻ những câu chuyện ý nghĩa và hình ảnh đẹp. Mình luôn mong muốn mang đến cho các bạn những trải nghiệm thú vị qua từng bài viết trên VANHOADOISONG.

Để lại bình luân

Nhập bình luận tại đây
Để lại tên bạn ở đây