Một dãy dữ liệu, hai quy tắc lấy ra
Ngăn xếp (stack) tuân theo **vào sau, ra trước — LIFO**. Thêm và lấy đều ở đỉnh; phần tử vừa thêm trở thành đỉnh mới. Chồng sách chỉ được lấy từ trên cùng là một mô hình ngăn xếp.
Hàng đợi (queue) tuân theo **vào trước, ra trước — FIFO**. Thêm ở cuối, lấy ở đầu. Những người đến quầy lần lượt và được phục vụ theo thứ tự đến là một mô hình hàng đợi.
Sơ đồ dùng cùng thứ tự thêm 3, 7, 2 để chỉ ra sự khác nhau: ngăn xếp lấy 2 trước, hàng đợi lấy 3 trước.
Xem chưa làm mất phần tử
|Công việc|Ngăn xếp|Hàng đợi|
|---|---|---|
|Khởi tạo rỗng|Stack()|Queue()|
|Kiểm tra rỗng|isEmptyStack(S)|isEmptyQueue(Q)|
|Thêm phần tử x|push(S,x), ở đỉnh|enqueue(Q,x), ở cuối|
|Lấy ra và trả về|pop(S), ở đỉnh|dequeue(Q), ở đầu|
|Chỉ xem, giữ nguyên cấu trúc|top(S), xem đỉnh|front(Q), xem đầu|
Sau khi thêm 3, 7, 2 vào ngăn xếp, `top(S)` trả về 2 và vẫn còn ba phần tử. `pop(S)` cũng trả về 2 nhưng chỉ còn 3, 7. Nếu là hàng đợi, `dequeue(Q)` trả về 3, còn 7, 2.
Ngăn xếp và hàng đợi rỗng không có phần tử để xem hoặc lấy ra. Chương trình phải kiểm tra trường hợp này trước khi truy cập.
Bài luyện
Thêm lần lượt 3, 7, 2 vào ngăn xếp rỗng rồi lấy hết bằng pop. Thứ tự nhận được là gì?
Đây là thứ tự FIFO.
Đúng. Phần tử vào sau ra trước.
7 chưa ở đỉnh lúc lấy lần đầu.
Sau 2, đỉnh mới là 7.
Lời giải
2 được thêm cuối nên ở đỉnh và ra trước. Sau khi lấy 2, đỉnh là 7; lấy 7 xong còn 3. Thứ tự là 2, 7, 3 theo LIFO.
Bài luyện
Hàng đợi Q chứa [3, 7, 2], đầu ở bên trái. Sau front(Q), Q thế nào?
Lấy khỏi đầu mới làm còn [7, 2].
front không lấy khỏi cuối.
Đúng. front chỉ xem phần tử đầu là 3.
front không đảo thứ tự.
Lời giải
front(Q) trả về phần tử đầu là 3 mà không xóa nó. Vì vậy Q vẫn chứa [3, 7, 2]; thao tác dequeue(Q) mới loại bỏ 3.
Bài luyện
Mô hình nào phù hợp với hàng đợi FIFO?
Chỉ lấy ở đỉnh thường theo LIFO.
Vật vào cuối ra đầu là LIFO.
Thao tác gần nhất được xử lí trước phù hợp ngăn xếp.
Đúng. Người đến trước được phục vụ trước.
Lời giải
FIFO yêu cầu phần tử vào trước ra trước. Phục vụ theo thứ tự đến đáp ứng quy tắc ấy; ba mô hình còn lại xử lí phần tử hoặc thao tác gần nhất trước.
Đang học