4.2.1 Khái niệm
Hàng đợi là một cấu trúc dữ liệu gần giống với ngăn xếp, nhƣng khác với ngăn xếp ở nguyên tắc chọn phần tử cần lấy ra khỏi tập phần tử. Trái ngƣợc với ngăn xếp, phần tử đƣợc lấy ra khỏi hàng đợi không phải là phần tử mới nhất đƣợc đƣa vào mà là phần tử đã đƣợc lƣu trong hàng đợi lâu nhất.
Điều này nghe có vẻ hợp với quy luật thực tế hơn là ngăn xếp ! Quy luật này của hàng đợi còn đƣợc gọi là Vào trƣớc ra trƣớc (FIFO - First In First Out). Ví dụ về hàng đợi có rất nhiều trong thực tế. Một dòng ngƣời xếp hàng chờ cắt tóc ở 1 tiệm hớt tóc, chờ vào rạp chiếu phim, hay siêu thị là nhƣng ví dụ về hàng đợi. Trong lĩnh vực máy tính cũng có rất nhiều ví dụ về hàng đợi. Một tập các tác vụ chờ phục vụ bởi hệ điều hành máy tính cũng tuân theo nguyên tắc hàng đợi.
Hàng đợi còn khác với ngăn xếp ở chỗ: phần tử mới đƣợc đƣa vào hàng đợi sẽ nằm ở phía cuối hàng, trong khi phần tử mới đƣa vào ngăn xếp lại nằm ở đỉnh ngăn xếp.
- *
- *
Nhƣ vậy, ta có thể định nghĩa hàng đợi là một dạng đặc biệt của danh sách mà việc lấy ra một phần tử, get, đƣợc thực hiện ở 1 đầu (gọi là đầu hàng), còn việc bổ sung 1 phần tử, put, đƣợc thực hiện ở đầu còn lại (gọi là cuối hàng).
Trở lại với ví dụ về việc bổ sung và loại bỏ các phần tử của 1 ngăn xếp các ký tự nhƣ ở phần trƣớc, ta sẽ xem xét việc bổ sung và loại bỏ tƣơng tự nhƣng áp dụng cho hàng đợi các ký tự.
Giả sử ta có hàng đợi Q lƣu trữ các ký tự. Ban đầu Q ở trạng thái rỗng:
Khi thực hiện lệnh bổ sung phần tử A, put(Q, A), hàng đợi có dạng:
Tiếp theo là các lệnh put(Q, B), put(Q, C):
Khi thực hiện lệnh get để lấy ra 1 phần tử từ hàng đợi thì phần tử đƣợc lƣu trữ lâu nhất trong hàng sẽ đƣợc lấy ra. Đó là phần tử đầu tiên ở đầu hàng.
Tiếp theo, thực hiện lệnh put(Q, D) để bổ sung phần tử D. Phần tử này sẽ đƣợc bổ sung ở phía cuối của hàng.
Hai lệnh get tiếp theo sẽ lần lƣợt lấy ra 2 phần tử ở đầu hàng là B và C.