btvn.vn
Tìm kiếm Đăng nhập

Dùng hai ngăn xếp cho Quay lại và Tiến tới

Lưu trên thiết bị này
Chuyên đề lựa chọn CS: Ngăn xếp và hàng đợi · Chọn bài khác

Trang hiện tại được giữ riêng

Mô hình có `current` là trang đang xem, `backward` lưu các trang có thể Quay lại, `forward` lưu các trang có thể Tiến tới. Đỉnh mỗi ngăn xếp là trang sẽ được mở ở lần bấm tương ứng. Khi thăm trang mới, đưa trang hiện tại vào backward rồi đổi current. Khi Quay lại, đưa current vào forward, lấy đỉnh backward làm current mới. Tiến tới làm ngược lại. Nếu ngăn xếp cần lấy đang rỗng thì giữ current. Sau khi Quay lại rồi thăm một trang mới, xóa forward vì đã rẽ sang nhánh lịch sử mới. Mô hình này chỉ minh họa thứ tự chuyển trang, không mở website hoặc mô phỏng mọi tính năng của trình duyệt.

Các hàm dùng lại push và pop

Dùng các hàm ngăn xếp của bài trước. Khởi tạo `backward = Stack()`, `forward = Stack()`, `current = None`; luôn gán lại giá trị hàm trả về cho current, chẳng hạn `current = visit(backward, forward, current, 'A')`. ```python def visit(backward, forward, current, page): if current is not None: push(backward, current) forward.clear() return page def go_back(backward, forward, current): if isEmptyStack(backward): return current push(forward, current) return pop(backward) def go_forward(backward, forward, current): if isEmptyStack(forward): return current push(backward, current) return pop(forward) ```

Một lần rẽ sang trang mới

Trong bảng, ngăn xếp viết từ đáy đến đỉnh. |Thao tác|backward|current|forward| |---|---|---|---| |Thăm A, B, C|[A, B]|C|[]| |Quay lại|[A]|B|[C]| |Tiến tới|[A, B]|C|[]| |Quay lại, rồi thăm D|[A, B]|D|[]| Ở dòng cuối, C bị loại khỏi forward khi thăm D. Nếu tiếp tục Tiến tới thì vẫn ở D. Nếu chỉ pop trang hiện tại khỏi một ngăn xếp rồi lại trả chính trang đó, mô hình sẽ không thực sự chuyển về trang trước.

Bài luyện

Đang ở C, backward=[A,B], forward=[]. Sau Quay lại, trạng thái nào đúng?
Chọn một đáp án

Bài luyện

Đang ở B sau khi Quay lại từ C. Tiếp đó thăm trang mới D. Vì sao cần xóa forward?
Chọn một đáp án

Bài luyện

backward đang rỗng. Theo go_back đã định nghĩa, kết quả là gì?
Chọn một đáp án

Đang học